Wie erzeugen Pseudozufall in CUDA
Frage
Ich bin versucht, ein Partikelsystem CUDA zu bauen unter Verwendung das schwere Heben zu tun. Ich möchte ein Teil der Partikel Anfangswerte wie Geschwindigkeit und Lebensdauer randomisieren. Die Zufallszahlen sein müssen nicht Super zufällig, da sie nur für die visuelle Wirkung ist. Ich fand diesen Beitrag, der das gleiche Thema befasst:
Random Number Generation in CUDA
Das legt nahe, eine lineare Kongruenz ist der Weg zu gehen. Es scheint, wie es sollte einfach zu implementieren sein, aber ich habe Probleme immer etwas nützlich meine Umsetzung. Kann jemand etwas Code, der in dem Gerät ausgeführt wird?
Ich bin mit CUDA mit VC ++ auf Windows 7 64bit.
Lösung
CUDA Pseudozufallszahlengeneratoren sind
-
, die in der NVidia SDK zB
C/src/MersenneTwister/
undC/src/quasirandomGenerator
-
als separate Papiere und Quelle:
Andere Tipps
Je nach Bedarf gibt es eine Reihe von Open-Source-Optionen. Darüber hinaus gibt es mehrere kommerzielle Optionen wie NAG die l'Ecuyer des MRG32k3a umgesetzt haben. Seien Sie vorsichtig bei Verwendung eines LCG, wenn Sie benötigen, um sicherzustellen, dass Ihre Streams nicht korreliert sind - Sie verwenden können leapfrog / Splitting, aber Sie werden eine sehr lange Zeit benötigen
Wenn Sie Open-Source gehen wollen, dann sollten Sie auf jeden Fall überlegen mit Schub es ist Einfachheit. Es gibt auch einige RNGs im NVIDIA SDK, einschließlich der Mersenne-Twister-PRNG Probe (MT607, MT19937 in den Foren ist) und die Sobol und Niederreiter QRNGs.
Schließlich CUDPP auch einen Zufallszahlengenerator hat.