Comment générer un pseudo aléatoire dans cuda

J’essaie de construire un système de particules utilisant CUDA pour soulager des charges lourdes. Je souhaite randomiser certaines des valeurs initiales des particules telles que la vitesse et la durée de vie. Les nombres aléatoires ne doivent pas forcément être super aléatoires puisqu’il s’agit uniquement d’un effet visuel. J’ai trouvé ce post qui aborde le même sujet:

Génération de nombres aléatoires dans CUDA

Cela suggère qu’une congruence linéaire est la voie à suivre. Il semble que cela devrait être simple à mettre en œuvre, mais j’ai du mal à obtenir quelque chose d’utile de mon implémentation. Quelqu’un peut-il fournir du code qui fonctionnera dans l’appareil?

J’utilise CUDA avec VC ++ sur Windows 7 64bit.

Les générateurs de nombres pseudo aléatoires CUDA sont

  1. inclus dans le Kit de développement logiciel de NVidia, par exemple C/src/MersenneTwister/ et C/src/quasirandomGenerator

  2. disponible en articles séparés et source:

    2. Article de Langdon et code source de Langdon

    2.b Mersenne Twister sur GPU

Selon vos besoins, il existe un certain nombre d’options open source. Il existe également plusieurs options commerciales, telles que NAG qui a mis en œuvre le MRG32k3a de l’Ecuyer. Méfiez-vous des GLC si vous devez vous assurer que vos stream ne sont pas corrélés – vous pouvez utiliser le saut / saut, mais vous aurez besoin d’une très longue période!

Si vous voulez utiliser l’open source, vous devriez envisager d’utiliser la poussée pour sa simplicité. NVIDIA SDK contient également des GNR, notamment l’échantillon PRNG Mersenne Twister (MT607, MT19937 est sur les forums) et les QRNG Sobol et Niederreiter.

Enfin, CUDPP dispose également d’un générateur de nombres aléatoires.