Diese Frage bezieht sich in erster Linie auf ein praktisches Software-Engineering-Problem, aber ich wäre gespannt, ob Theoretiker weitere Einblicke in dieses Problem gewähren könnten.
Einfach gesagt, ich habe eine Monte-Carlo-Simulation, die einen Pseudozufallszahlengenerator verwendet, und ich möchte sie parallelisieren, damit 1000 Computer dieselbe Simulation parallel ausführen. Deshalb brauche ich 1000 unabhängige Ströme von Pseudozufallszahlen.
Können wir 1000 parallele Streams mit den folgenden Eigenschaften haben? Hier sollte ein sehr bekanntes und weit verbreitetes PRNG mit allen Arten von guten theoretischen und empirischen Eigenschaften sein.
Die Streams sind nachweislich so gut wie das, was ich bekommen würde, wenn ich einfach und den von erzeugten Stream in 1000 Streams aufteilen würde .
Erzeugen die nächste Nummer in jedem Stream ist (fast) so schnell wie die nächste Nummer mit der Erzeugung .
Anders ausgedrückt: Können wir mehrere unabhängige Streams "kostenlos" erhalten?
Wenn wir einfach , immer 999 Zahlen verwerfen und 1 auswählen, dann hätten wir natürlich Eigenschaft 1, aber wir würden in der Laufzeit um den Faktor 1000 verlieren.
Eine einfache Idee wäre, 1000 Kopien von mit den Startwerten 1, 2, ..., 1000 zu verwenden. Dies wäre sicherlich schnell, aber es ist nicht offensichtlich, ob die Streams gute statistische Eigenschaften haben.
Nach einigem googeln habe ich zum Beispiel folgendes gefunden:
Die SPRNG- Bibliothek scheint genau für diesen Zweck konzipiert zu sein und unterstützt mehrere PRNGs .
Mersenne Twister scheint heutzutage ein beliebtes PRNG zu sein, und ich habe einige Hinweise auf eine Variante gefunden, die mehrere Streams gleichzeitig erzeugen kann.
Aber all dies ist so weit von meinen eigenen Forschungsgebieten entfernt, dass ich nicht herausfinden konnte, was wirklich auf dem neuesten Stand ist und welche Konstruktionen nicht nur in der Theorie, sondern auch in der Praxis gut funktionieren.
Einige Erläuterungen: Ich benötige keinerlei kryptografische Eigenschaften. Dies ist für die wissenschaftliche Berechnung. Ich brauche Milliarden von Zufallszahlen, damit wir jeden Generator mit einer Periode von vergessen können .
Bearbeiten: Ich kann kein echtes RNG verwenden. Ich brauche einen deterministischen PRNG. Erstens hilft es sehr beim Debuggen und macht alles wiederholbar. Zweitens ermöglicht es mir, z. B. das Median-Finden sehr effizient durchzuführen, indem ich die Tatsache ausnutze, dass ich das Multi-Pass-Modell verwenden kann (siehe diese Frage ).
Bearbeiten 2: Es gibt eine eng verwandte Frage @ StackOverflow: Pseudo-Zufallszahlengenerator für Cluster-Umgebung .