首页> 中国专利> 面向向量化部件的并行随机数生成方法

面向向量化部件的并行随机数生成方法

摘要

本发明公开一种面向向量化部件的并行随机数生成方法,包括以下步骤:步骤S10,根据线性同余方程生成跳跃公式;步骤S20,确定LCG法参数及初值、向量化宽度、以及需要产生的伪随机数总数量;步骤S30,根据向量化宽度分配数组空间;步骤S40,根据跳跃公式迭代生成伪随机数子序列种子;步骤S50,根据LCG法生成随机数;步骤S60,判断是否生成了所有的随机数,若未生成所有随机数,则跳转回步骤S50,反之,结束。本发明执行一次LCG法可同时产生多个伪随机数过程,在输入初值及LCG法参数后,利用向量化部件及SIMD指令迭代即可生成所有随机数,每次执行可并行生成多个随机数,极大提高了生成速度。

著录项

  • 公开/公告号CN112328206A

    专利类型发明专利

  • 公开/公告日2021-02-05

    原文格式PDF

  • 申请/专利权人 广州科泽云天智能科技有限公司;

    申请/专利号CN202011212670.1

  • 发明设计人 刘锋;侯晓东;朱肖雄;

    申请日2020-11-03

  • 分类号G06F7/58(20060101);

  • 代理机构44384 深圳市中科创为专利代理有限公司;

  • 代理人彭西洋;袁曼曼

  • 地址 511457 广东省广州市南沙区南沙街进港大道8号1202-1204房

  • 入库时间 2023-06-19 09:49:27

说明书

技术领域

本发明涉及数据处理技术领域,尤其涉及一种面向向量化部件的并行随机数生成方法。

背景技术

随着微处理器制造工艺不断提高,在商用微处理器芯片中集成支持双精度浮点运算的向量化部件来加速浮点运算能力已成为重要发展趋势。目前,大多数商用微处理器上已经集成了向量化部件,如Intel的MMX/SSE/AVX以及MIC协处理器中的VPU,由向量化部件利用SIMD指令对向量进行操作,一个向量由多个浮点数据组成,从而实现了单一指令同时对多个浮点数据进行操作,加速了微处理器的计算过程。

目前,伪随机数发生器在多种科学计算程序中具有很重要应用,如在各类蒙特卡罗模拟程序中,快速产生高质量的伪随机数是影响程序运行的关键,而利用向量化部件对程序进行向量化,可以有效加速伪随机数产生过程。但伪随机数的产生一般是利用某种数学方法,从初始值根据迭代方程依次产生数字序列,这一数字序列称为伪随机数序列,在专利号为“CN201110347722.0”,名称为“伪随机数种子、伪随机数生成的方法和装置”的专利中,公开了一种伪随机数种子生成方法和一种伪随机数生成方法,能够生成伪随机数,但这种方法是串行生成的,也即一次只能生成一个伪随机数,生成速度较慢,有可能成为某些对伪随机数生成速度较为敏感的程序性能瓶颈。

综上,目前的伪随机数生成方法是串行生成,每次执行只能生成一个伪随机数,影响了主程序的并行性及执行速度,而微处理器中的向量化部件从硬件上为算法一次生成多个伪随机数提供了向量化支持;因此,有必要提供一种面向向量化部件的并行随机数生成方法,从而达到一次产生多个伪随机数的目的。

发明内容

本发明的目的是克服现有技术的不足,提供一种面向向量化部件的并行随机数生成方法。

本发明的技术方案如下:

一种面向向量化部件的并行随机数生成方法,包括以下步骤:

步骤S10,根据线性同余方程生成跳跃公式;

步骤S20,确定LCG法参数及初值、向量化宽度、以及需要产生的伪随机数总数量;

步骤S30,根据向量化宽度分配数组空间;

步骤S40,根据跳跃公式迭代生成伪随机数子序列种子;

步骤S50,根据LCG法生成随机数;

步骤S60,判断是否生成了所有的随机数,其中,未生成所有随机数,则跳转回所述步骤S50,反之,结束。

进一步地,所述步骤S10中的线性同余方程为x

进一步地,所述步骤S20中的LCG法参数为乘数a和模数M,设定LCG法初值x

进一步地,所述步骤S30中的数组空间包括以向量化宽度作为长度来分配的高精度数组seedH和低精度数组seedL。

进一步地,所述步骤S40根据跳跃公式x

进一步地,所述步骤S40的实现方式是通过令i=1,t=1,

进一步地,所述步骤S50根据所述步骤S40生成的伪随机数子序列种子利用LCG法生成随机数,所述LCG法包括线性同余方程x

进一步地,所述步骤S50的实现方式是令n=1,令mmvecH=seedH以实现将整个seedH数组打包进所述向量寄存器中;令mmvecL=seedL以实现将整个seedL数组打包进所述向量寄存器中;令mmvecK=a以实现将LCG参数中的乘数a打包进向量寄存器中;令

进一步地,所述步骤S60的判断条件是令n=n+1再比较n与

采用上述方案,本发明具有以下有益效果:

本发明执行一次LCG法可同时产生多个伪随机数过程,在输入初值及LCG法参数后,利用向量化部件及SIMD指令迭代即可生成所有随机数,替代了串行生成,每次执行可并行生成多个随机数,极大提高了生成速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。

图1为本发明面向向量化部件的并行随机数生成方法的流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

以下结合附图和具体实施例,对本发明进行详细说明。

参照图1所示,本发明提供一种面向向量化部件的并行随机数生成方法,包括以下步骤:

步骤S10,根据线性同余方程生成跳跃公式;

步骤S20,确定LCG法参数及初值、向量化宽度、以及需要产生的伪随机数总数量;

步骤S30,根据向量化宽度分配数组空间;

步骤S40,根据跳跃公式迭代生成伪随机数子序列种子;

步骤S50,根据LCG法生成随机数;

步骤S60,判断是否生成了所有的随机数,其中,未生成所有随机数,则跳转回所述步骤S50,反之,结束。

在本实施例中,所述步骤S10中的线性同余方程为x

在本实施例中,所述步骤S20中的LCG法参数为乘数a和模数M,设定LCG法初值x

在本实施例中,所述步骤S30中的数组空间包括以向量化宽度作为长度来分配的高精度数组seedH和低精度数组seedL。

在本实施例中,所述步骤S40根据跳跃公式x

具体的,所述步骤S40的实现方式是通过令i=1,t=1,

在本实施例中,所述步骤S50根据所述步骤S40生成的伪随机数子序列种子利用LCG法生成随机数,所述LCG法包括线性同余方程x

具体的,所述步骤S50的实现方式是令n=1,令mmvecH=seedH以实现将整个seedH数组打包进所述向量寄存器中;令mmvecL=seedL以实现将整个seedL数组打包进所述向量寄存器中;令mmvecK=a以实现将LCG参数中的乘数a打包进向量寄存器中;令

在本实施例中,所述步骤S60的判断条件是令n=n+1再比较n与

与现有技术相比,本发明具有以下有益效果:

本发明执行一次LCG法可同时产生多个伪随机数过程,在输入初值及LCG法参数后,利用向量化部件及SIMD指令迭代即可生成所有随机数,替代了串行生成,每次执行可并行生成多个随机数,极大提高了生成速度。

以上仅为本发明的较佳实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号