質問
重労働を行うために CUDA を利用してパーティクル システムを構築しようとしています。速度や寿命などのパーティクルの初期値の一部をランダム化したいと考えています。視覚効果だけを目的としているため、乱数は非常にランダムである必要はありません。同じテーマを扱った次の投稿を見つけました。
これは、線形合同が進むべき道であることを示唆しています。実装は簡単そうに思えますが、実装から役立つものを得るのに苦労しています。誰かがデバイスで実行されるコードを提供できますか?
Windows 7 64ビット上でVC++でCUDAを使用しています。
解決
CUDA 擬似乱数生成器は次のとおりです。
NVidia SDK に含まれています。例:
C/src/MersenneTwister/
そしてC/src/quasirandomGenerator
別の論文およびソースとして入手可能:
2.a ラングドンの論文 そして ラングドンのソースコード
他のヒント
あなたの要件に応じて、オープンソースの選択肢がいくつかあります。このよう NAG のL'EcuyerのMRG32k3aを実装している人など、いくつかの商業的なオプションもあります。あなたのストリームが相関していないことを保証する必要がある場合はLCGを使用しての注意が必要! - あなたは馬跳び/分割を使用することができますが、あなたは非常に長い期間が必要になります。
あなたがオープンソースに行きたいなら、あなたは間違いなく、それはだために推力を使用することを検討すべきですシンプルさ。メルセンヌツイスターPRNGサンプル(MT607、MT19937は、フォーラム上で)とソボルとNiederreiter QRNGs含むNVIDIA SDKでいくつかのRNGは、もあります。
最後に、 CUDPP にも乱数発生器を有している。