如何在并行重复调用中生成不相关的随机数?

时间:2012-06-10 04:36:04

标签: c random parallel-processing openmp

我想编写一个多次被其他函数重复调用的函数。在这个函数里面,它应该生成很多随机数,这个部分将被并行处理。如果仅用于一次运行,则可以针对每个线程不同地选择种子,使得随机数将是不相关的。但是,如果第二次调用此函数,则似乎随机数将重复,除非在稍后的调用期间再次更改种子。

所以我的问题是,是否有一种很好的方法来生成随机数或重置种子,以便通过重复调用此函数以及不同线程生成的随机数是非常随机的?

我需要在openMP中执行此操作。在每次调用函数后,是否可以分别为每个线程存储生成器的状态,以便在下次调用函数时,随机数生成器从最后一个状态开始并继续生成不相关的数字?

谢谢。

1 个答案:

答案 0 :(得分:0)

首先使用强大的随机数生成器,如MT。要解决您的线程问题,请使用互斥锁保护一个发生器,为每个线程生成种子。然后在每个线程上使用不同的发生器 关键是要初始化你需要的最少次数,因为你可能需要一个程序全局的种子生成器和每个线程的生成器的线程本地存储。