1


1

cudaで擬似ランダムを生成する方法

CUDAを利用してパーティクルシステムを構築し、重量物を持ち上げようとしています。 速度や寿命などのパーティクルの初期値の一部をランダム化したいです。 乱数は視覚効果のためだけであるため、スーパーランダムである必要はありません。 私は同じ主題に対処するこの投稿を見つけました:

それは、線形合同が進むべき方法であることを示唆しています。 簡単に実装できるように思えますが、実装の有用なものを得るのに苦労しています。 誰でもデバイスで実行されるコードを提供できますか?

Windows 7 64ビットでVC ++でCUDAを使用しています。

2 Answer


3


CUDA擬似乱数ジェネレーターは

  1. NVidia SDKに含まれる例: C / src / MersenneTwister /`および `C / src / quasirandomGenerator

  2. 個別の論文と資料として入手可能: + 2.a Langdon’s paperおよびhttp://www.cs.ucl.ac.uk/ staff / W.Langdon / ftp / gp-code / random-numbers / [Langdonのソースコード] + 2.b http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ MTGP / index.html [GPUのMersenne Twister]


3


要件に応じて、多くのオープンソースオプションがあります。 l’EcuyerのMRG32k3aを実装したhttp://www.nag.co.uk/[NAG]などのいくつかの商用オプションもあります。 ストリームが相関していないことを確認する必要がある場合は、LCGの使用に注意してください。リープフロッグ/スプリットを使用できますが、非常に長い時間が必要です。

オープンソースにしたい場合は、簡単にするためにhttp://code.google.com/p/thrust/[thrust]の使用を必ず検討する必要があります。 NVIDIA SDKには、Mersenne Twister PRNGサンプル(MT607、MT19937がフォーラムにあります)、SobolおよびNiederreiter QRNGなどのRNGもあります。

最後に、http://gpgpu.org/developer/cudpp [CUDPP]には乱数ジェネレーターもあります。