2010-06-26 10 views
9

Estoy investigando el uso de GPU nvidia para simulaciones de Monte Carlo. Sin embargo, me gustaría utilizar los generadores de números aleatorios gsl y también un generador paralelo de números aleatorios como SPRNG. ¿Alguien sabe si esto es posible?Uso de números aleatorios con GPU

actualización

He jugado alrededor con generador de números aleatorios utilizando las GPU. En este momento no hay una buena solución. El Mersenne Twister que viene con el SDK no es realmente adecuado para (mis) simulaciones de Monte-Carlo, ya que lleva un tiempo increíblemente largo generar semillas.

Las bibliotecas NAG son más prometedoras. Puede generar RN en lotes o en hilos individuales. Sin embargo, actualmente solo se admiten algunas distribuciones: Uniforme, exponencial y Normal.

+0

Probablemente no pueda invocar ningún tipo de RNG desde una GPU, pero puede pregenerar números aleatorios y usarlos como entrada para su programa. – Gabe

Respuesta

5

El manual de GSL recommends the Mersenne Twister.

Los autores de Mersenne Twister tienen un version for Nvidia GPUs. Busqué portar esto al paquete R gputools pero encontré que necesitaba una cantidad excesivamente grande de sorteos (millones, creo) antes de que la combinación de 'generar GPU y poner a disposición R' fuera más rápida que simplemente dibujar en R (usando solo la CPU).

Realmente es una compensación de cálculo/comunicación.

-2

Tendrá que implementarlos usted mismo.

+5

Hmmm ... * siempre * vale la pena mencionar que esto * no * significa diseñar uno usted mismo. Use un algoritmo de alta calidad bien entendido. De Verdad. – dmckee

+0

Hablaba de 2 algoritmos especiales, así que creo que está claro que implementará estos dos algoritmos especiales y no inventará algo nuevo. –

+0

GSL y SPRNG no son algoritmos, son bibliotecas. Contienen varios generadores diferentes. –

5

Generación aleatoria paralela masiva como la necesita para GPU es un problema difícil. Este es un tema de investigación activo. Realmente debe tener cuidado no solo de tener un buen generador aleatorio secuencial (estos se encuentran en la literatura) sino algo que garantice que son independientes. La independencia por pares no es suficiente para una buena simulación Monte Carlo. AFAIK no hay un buen código de dominio público disponible.

2

Acabo de encontrar que NAG proporciona algunos RNG routines. Estas bibliotecas son gratuitas para académicos.

0

Utilice el Mersenne Twister PRNG, como se indica en el SDK de CUDA.

0

Aquí usamos secuencias de sobol en las GPU.

4

Mis colegas y yo tenemos un preprint, to appear in the SC11 conference que revisita una técnica alternativa para generar números aleatorios que se adapta bien a las GPU. La idea es que el número aleatorio de orden n es:

x_n = f(n) 

En contraste con el enfoque convencional, donde

x_n = f(x_{n-1}) 

Source code está disponible, que implementa varios generadores diferentes. ofreciendo 2^64 o más secuencias, cada una con períodos de 2^128 o más. Todos pasan una amplia variedad de pruebas (las suites TestU01 Crush y BigCrush) tanto de independencia estadística entre flujos como entre flujos. La biblioteca también incluye adaptadores que le permiten usar nuestros generadores en un marco GSL.