使CURAND生成小于特定数字的正不同随机数

时间:2012-09-14 10:21:49

标签: random cuda seed

我正在尝试使用CURAND库生成完全相互独立的随机数。因此,我想为每个线程提供不同的种子。 那么,问题1:我如何为每个线程提供不同的种子?(在CUDA中是否有一些时间可以使用?)

现在我还想在0到10000之间生成这个随机数。如何实现这一目标。

目前我正在使用curand_normal(因为我希望从正态分布中获得数字),但它给出了我不想要的负数和相同的数字。

1 个答案:

答案 0 :(得分:0)

设置不同的种子不是获得独立(非相关)随机数(使用任何单个随机数生成器)的统计上合理的方法。您最好选择单个序列的不同子序列,大多数随机数库允许您这样做,包括cuRAND。

查看CUDA SDK中的示例,例如EstimatePiP或EstimatePiInlineP示例使用cuRAND生成伪随机数。

对于问题的第二部分,如cuRAND手册中所述,curand_normal()例程返回平均值为0.0且标准差为1.0的正态分布数(即标准正态分布)。显然,这意味着您将有大约50%的负数。

指定固定范围和正态分布是没有意义的。您要么需要具有固定范围的其他分布(例如Uniform),要么您希望Normal分布具有特定的均值和标准分布。从标准正常值到目标均值/ std.dev。您只需将随机抽取乘以目标标准差并添加目标均值。