并行随机数发生器

1 TRNG

TRNG 是一个非常灵活的随机数发生器库。它允许顺序和用于并行应用程序。库不依赖于任何特定的通信库。
它可以使用消息传递接口 (MPI), OpenMP, 以及与 POSIX线程或任何其他通信库。本节给出了一个关于写作的简短教程

并行蒙特卡罗应用与 TRNG 和各种并行编程模型, 如MPI 或 OpenMP。

并行随机数产生方法:分块方法block splitting method 或者蛙跳方法the leapfrog method。

TRNG 提供两种强大的技术, 用于并行化的伪随机数流, 即块分裂和跳跃leapfrog。哪一个选择, 高度依赖于结构你的蒙特卡罗算法和你的需求。

leapfrog方法:

采用split()设置,split可以多次调用,产生子子序列。

https://www.numbercrunch.de/trng

windows下编译完成的32位openmp静态库链接:https://download.csdn.net/download/novanova2009/10542654

头文件及必要的源代码https://download.csdn.net/download/novanova2009/10542665

2 RngStream

RngStream链接http://www.iro.umontreal.ca/~lecuyer/myftp/streams00/c++/

它更直观,易用。RngStream只是一个并行随机数发生器。周期2^191。可产生2^56长度的子序列。

直接用RngStream g; 然后g.RandU01()即可得到0-1分布随机数。

不同进程/线程采用局部对象变量g,可得到该进程/线程的随机数序列。

猜你喜欢

转载自blog.csdn.net/novanova2009/article/details/81048551