2010-06-26 15 views
9

Ich untersuche mit nvidia GPUs für Monte-Carlo-Simulationen. Ich möchte jedoch die gsl-Zufallszahlengeneratoren und auch einen parallelen Zufallszahlengenerator wie SPRNG verwenden. Weiß jemand, ob das möglich ist?Verwenden von Zufallszahlen mit GPUs

aktualisieren

Ich habe gespielt um mit der RNG-GPUs verwenden. Derzeit gibt es keine schöne Lösung. Der mit dem SDK mitgelieferte Mersenne Twister ist nicht wirklich für (meine) Monte-Carlo-Simulationen geeignet, da die Generierung von Seeds unglaublich lange dauert.

Die NAG-Bibliotheken sind vielversprechender. Sie können RNs entweder in Batches oder in einzelnen Threads generieren. Derzeit werden jedoch nur wenige Verteilungen unterstützt - Uniform, Exponential und Normal.

+0

Sie können wahrscheinlich keine Art von RNG von einer GPU aufrufen, aber Sie können Zufallszahlen vorgenerieren und sie als Eingabe für Ihr Programm verwenden. – Gabe

Antwort

5

Das GSL-Handbuch recommends the Mersenne Twister.

Die Mersenne Twister Autoren haben eine version for Nvidia GPUs. Ich habe versucht, dies auf das R-Paket gputools zu portieren, fand aber heraus, dass ich übermäßig viele Ziehungen benötigte (Millionen, glaube ich), bevor die Kombination von 'GPU erstellen und R zur Verfügung stellen' schneller war als nur R zu zeichnen die CPU).

Es ist wirklich eine Berechnung/Kommunikation Kompromiss.

-2

Sie müssen sie selbst implementieren.

+5

Hmmm ... * immer * erwähnenswert, dass dies * nicht * bedeutet, selbst einen zu entwerfen. Verwenden Sie einen gut verstandenen, qualitativ hochwertigen Algorithmus. Ja wirklich. – dmckee

+0

Er sprach von 2 speziellen Algorithmen, also denke ich, es ist klar, dass er diese beiden speziellen Algorithmen implementieren wird und nicht etwas Neues erfinden wird. –

+0

GSL und SPRNG sind keine Algorithmen, sie sind Bibliotheken. Sie enthalten eine Anzahl verschiedener Generatoren. –

5

Massive parallele Zufallsgenerierung, wie Sie sie für GPUs benötigen, ist ein schwieriges Problem. Dies ist ein aktives Forschungsthema. Sie müssen wirklich aufpassen, nicht nur einen guten sequentiellen Zufallsgenerator zu haben (diese finden Sie in der Literatur), sondern etwas, das garantiert, dass sie unabhängig sind. Die paarweise Unabhängigkeit ist für eine gute Monte-Carlo-Simulation nicht ausreichend. AFAIK gibt es keinen guten Public Domain Code.

2

Ich habe gerade festgestellt, dass NAG einige RNG routines bieten. Diese Bibliotheken sind frei für Akademiker.

0

Verwenden Sie den Mersenne Twister PRNG, wie im CUDA SDK bereitgestellt.

0

Hier verwenden wir Sobol-Sequenzen auf den GPUs.

4

Meine Kollegen und ich haben eine preprint, to appear in the SC11 conference, die eine alternative Technik für die Generierung von Zufallszahlen, die gut für GPUs geeignet ist. Die Idee ist, dass die n-te Zufallszahl:

x_n = f(n) 

Im Gegensatz zum herkömmlichen Ansatz, bei dem

x_n = f(x_{n-1}) 

Source code zur Verfügung, die mehrere verschiedene Generatoren implementiert. bietet 2^64 oder mehr Streams mit jeweils 2^128 oder mehr. Alle bestehen eine breite Palette von Tests (die TestU01 Crush und BigCrush Suites) sowohl der Intra-Stream- als auch der Inter-Stream-statistischen Unabhängigkeit. Die Bibliothek enthält auch Adapter, mit denen Sie unsere Generatoren in einem GSL-Framework verwenden können.