2012-02-15 107 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