Использование случайных чисел с графическими процессорами - PullRequest
9 голосов
/ 26 июня 2010

Я исследую использование графических процессоров nvidia для симуляции Монте-Карло.Тем не менее, я хотел бы использовать gsl генераторы случайных чисел, а также параллельный генератор случайных чисел, такой как SPRNG.Кто-нибудь знает, возможно ли это?

Обновление

Я играл с RNG с использованием графических процессоров.В настоящее время нет хорошего решения.Mersenne Twister, поставляемый с SDK, на самом деле не подходит для (моего) моделирования Монте-Карло, поскольку для создания семян требуется невероятно много времени.

Библиотеки NAG более перспективны.Вы можете генерировать RN либо в пакетном режиме, либо в отдельных потоках.Однако в настоящее время поддерживается только несколько распределений - равномерное, экспоненциальное и нормальное.

Ответы [ 7 ]

5 голосов
/ 29 июня 2010

Руководство GSL рекомендует Mersenne Twister .

Авторы Mersenne Twister имеют версию для графических процессоров Nvidia .Я попытался перенести это на пакет R gputools , но обнаружил, что мне нужно чрезмерно большое количество отрисовок (я думаю, миллионов), прежде чем комбинация «генерировать GPU и сделать доступной для R» была быстрее, чем просторисование в R (используя только процессор).

Это действительно компромиссный расчет / коммуникация.

5 голосов
/ 11 октября 2011

У меня и моих коллег есть препринт , который появится на конференции SC11 , в котором рассматривается альтернативный метод генерации случайных чисел, который хорошо подходит для графических процессоров. Идея состоит в том, что n-е случайное число:

x_n = f(n) 

В отличие от традиционного подхода, где

x_n = f(x_{n-1})

Доступен исходный код , который реализует несколько различных генераторов. предлагая 2 ^ 64 или более потоков, каждый с периодами 2 ^ 128 или более. Все они проходят широкий спектр тестов (наборы TestU01 Crush и BigCrush) как внутрипотоковой, так и межпотоковой статистической независимости. Библиотека также включает в себя адаптеры, которые позволяют использовать наши генераторы в среде GSL.

5 голосов
/ 27 июня 2010

Массивная параллельная генерация случайных чисел, как вам нужно для графических процессоров, является сложной проблемой. Это активная тема исследования. Вы действительно должны быть осторожны не только для того, чтобы иметь хороший последовательный генератор случайных чисел (это вы найдете в литературе), но и для того, чтобы гарантировать, что они независимы . Парная независимость не достаточна для хорошего моделирования Монте-Карло. AFAIK нет хорошего общественного домена доступного кода.

2 голосов
/ 28 июня 2010

Я только что обнаружил, что NAG предоставляет некоторые процедуры RNG . Эти библиотеки бесплатны для академиков.

0 голосов
/ 29 июня 2010

Здесь мы используем последовательности соболя на графических процессорах.

0 голосов
/ 29 июня 2010

Используйте Mersenne Twister PRNG, как указано в CUDA SDK.

0 голосов
/ 26 июня 2010

Вы должны будете реализовать их самостоятельно.

...