Как создать псевдослучайный в CUDA - PullRequest
1 голос
/ 04 февраля 2010

Я пытаюсь построить систему частиц, используя CUDA для выполнения тяжелой работы. Я хочу рандомизировать некоторые начальные значения частиц, такие как скорость и продолжительность жизни. Случайные числа не обязательно должны быть супер случайными, так как это просто для визуального эффекта. Я нашел этот пост, посвященный той же теме:

Генерация случайных чисел в CUDA

Это предполагает, что линейная конгруэнтность - это путь. Кажется, что это должно быть просто реализовать, но у меня возникают проблемы с получением чего-либо полезного из моей реализации. Кто-нибудь может предоставить какой-нибудь код, который будет работать на устройстве?

Я использую CUDA с VC ++ в Windows 7 64bit.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

В зависимости от ваших требований существует несколько вариантов с открытым исходным кодом. Есть также несколько коммерческих опций, таких как NAG , которые внедрили l'Ecuyerer MRG32k3a. Будьте осторожны с использованием LCG, если вам нужно убедиться, что ваши потоки не коррелированы - вы можете использовать скачок / расщепление, но вам понадобится очень длительный период!

Если вы хотите пойти с открытым исходным кодом, то вам определенно стоит рассмотреть возможность использования thrust для простоты. В NVIDIA SDK также есть несколько RNG, в том числе образец PRNG Mersenne Twister (MT607, MT19937 на форумах) и QRNG Соболя и Нидеррейтера.

Наконец, CUDPP также имеет генератор случайных чисел.

3 голосов
/ 04 февраля 2010

CUDA генераторы псевдослучайных чисел

  1. включено в NVidia SDK, например, C/src/MersenneTwister/ и C/src/quasirandomGenerator

  2. доступно как отдельные документы и источник:

    2.a Бумага Лэнгдона и Исходный код Лэнгдона

    2.b Mersenne Twister на графическом процессоре

...