Использование случайных чисел с графическими процессорами

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

Обновить

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

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


person csgillespie    schedule 26.06.2010    source источник
comment
Вы, вероятно, не можете вызвать какой-либо ГСЧ из графического процессора, но вы можете предварительно сгенерировать случайные числа и использовать их в качестве входных данных для своей программы.   -  person Gabe    schedule 26.06.2010


Ответы (7)


В руководстве GSL рекомендуется вихрь Мерсенна. .

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

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

person Dirk Eddelbuettel    schedule 29.06.2010

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

x_n = f(n) 

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

x_n = f(x_{n-1})

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

person jks    schedule 11.10.2011

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

person Jens Gustedt    schedule 26.06.2010

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

person csgillespie    schedule 28.06.2010

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

person MJH    schedule 29.06.2010

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

person Alexandre C.    schedule 29.06.2010

Вам придется реализовать их самостоятельно.

person Tobias P.    schedule 26.06.2010
comment
Хммм... *всегда* стоит упомянуть, что это не означает создание собственного дизайна. Используйте понятный и качественный алгоритм. Действительно. - person dmckee --- ex-moderator kitten; 26.06.2010
comment
Он говорил о двух специальных алгоритмах, поэтому я думаю, что он будет реализовывать эти два специальных алгоритма, а не изобретать что-то новое. - person Tobias P.; 26.06.2010
comment
GSL и SPRNG — это не алгоритмы, это библиотеки. Они содержат ряд различных генераторов. - person Alexandros Gezerlis; 29.06.2010