2012-02-15 168 views
3

我是CUDA的新手,我努力在内核中生成随机数。(适用于傻瓜)

我知道有不同的实现,更重要的是,在SDK 4.1中有一个Niederreiter Quasirandom序列生成器的例子。

我不知道从哪里开始......我有点伤心,感觉像一个假......

谁能请请使用的Niederreiter准随机序列生成一个简单的和愚蠢的例子( SKD代码示例)?我真的会赞赏它。例如,创建一个向量并用随机数填充(每个线程填充一个向量位置)。

预先感谢您。

回答

1

SDK中的quasirandomGenerator示例完成了您所要求的几乎所有内容,它需要一个内存区域并使用quasirandom数字填充它。

也就是说,我认为你最好使用cuRAND,它是Sobol'而不是Niederreiter,但除非你有特定的原因喜欢后者,否则你会发现它更易于使用。有关如何使用它的例子,你应该看看在MonteCarloCURAND组样品:

  • EstimatePiQ说明如何在GPU内存中分配一个区域,并与Sobol”数字填补它
  • EstimatePiInlineQ说明如何生成一个号码在另一个内核中一次

以P结尾的样本使用伪随机生成器。

+0

谢谢,我使用了cuRAND,它完全满足了我的需求。事实上,我对我获得的结果非常满意。但是当我用Matlab的Parallel Computing Toolbox的feval函数使用这个库时,我得到了错误的和意想不到的结果。出现一些引渡行为...所以我想尝试另一个发电机进行比较。 – user1211206 2012-02-15 15:56:58

+0

在cuRAND中生成的数字是标准的Sobol序列,所以它很可能是你在其他地方做错了什么(我从你的Matlab中调用过)。 – Tom 2012-02-15 16:33:01

+0

我认为有一些与并行计算工具箱也许...我的CUDA实现没有MATLAB(当我直接从主机代码调用我的内核时)工作良好,但是当通过Matlab进行调用时,我得到了extrage结果....从Matlab的调用很简单,我不能做任何错误那里.... http://www.mathworks.es/help/toolbox/distcomp/feval.html – user1211206 2012-02-15 16:40:09