2010-06-26 2 views
9

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

Update

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

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

+0

Вы, вероятно, не можете вызывать какой-либо RNG с графического процессора, но вы можете предварительно генерировать случайные числа и использовать их в качестве вклада в свою программу. – Gabe

ответ

5

Руководство GSL recommends the Mersenne Twister.

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

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

-2

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

+5

Хммм ... * всегда * стоит упомянуть, что это делает * не * означает проектирование одного самостоятельно. Используйте хорошо понятный алгоритм высокого качества. В самом деле. – dmckee

+0

Он говорил о 2 специальных алгоритмах, поэтому я думаю, что ясно, что он будет реализовывать эти два специальных алгоритма и не изобретать что-то новое. –

+0

GSL и SPRNG не являются алгоритмами, они являются библиотеками. Они содержат несколько разных генераторов. –

5

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

2

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

0

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

0

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

4

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

x_n = f(n) 

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

x_n = f(x_{n-1}) 

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

Смежные вопросы