Ich versuche, intrinsischen PRNG Fortran in einem MPI-Code zu verwenden.Verwendung von Fortran RANDOM_SEED in Parallel MPI
Ich verstehe von diesem link, Das gfortran die PRNG implementieren mit xorshift1024 *, die über einen Zeitraum von 2^1024 hat - 1. Er sagt auch:
Beachten Sie, dass in einem Multithread-Programm (zB OpenMP mit Direktiven), Jeder Thread hat seinen eigenen Zufallszahlenstatus.
Dann this Lesen I gefunden:
0 verwendet hat,Wenn ein neuer Thread RANDOM_NUMBER zum ersten Mal verwendet wird, das Saatgut aus dem Master- Samen kopiert wird, und N * 2^512 Schritte zur Garantie weitergeleitet dass der Zufall Strom Alias keinen anderen Strom in dem System, wobei N die Anzahl der Threads ist, der RANDOM_NUMBER bisher während der Programmausführung
Wenn dies eine automatische Funktion von GFortran ist, funktioniert es nur in OpenMP? Was, wenn ich paralleles PRNG mit MPI haben möchte? Wie kann ich die Portabilität des Codes für andere Compiler sicherstellen?
Mit anderen Worten: Gibt es eine Möglichkeit zu tun, was GFortran sagt, dass es tut (d. H. Echte parallele PRNG garantieren) in einer tragbaren Weise mit den intran-Anweisungen von Fortran?
HINWEIS: Ich verwendete die PRNG von Numerical Recipes in MPI. Das hat einige Jahre gut funktioniert, aber jetzt bekomme ich ein paar Fehler in einigen Annahmen über das Ganzzahlmodell, das Numerical Recipes sagt, geht über Fortran hinaus ... also sehe ich nicht, wie ich das lösen soll und das ist die Art, wie ich das verwenden möchte intrinsische PRNG wenn möglich.
Wenn Sie Portabilität/Konsistenz über Compiler (sogar Compiler-Versionen) interessieren, dann wird 'random_number' (und' random_seed') viele Probleme darstellen. – francescalus
* Gibt es eine Möglichkeit zu tun, was GFortran sagt, dass es ... auf eine tragbare Weise mit den intran Anweisungen von Fortran? * Nein. This - http://stackoverflow.com/questions/8920411/possible-sources-for- Zufallszahlen - kann nützlich sein. –
Vielen Dank für Ihre Kommentare. Wenn die intrinsischen sind nicht tragbar und die Numerical Recipes scheint auch nicht portierbar (nach meiner Erfahrung). Welche anderen Bibliotheken, Subroutinen oder Methoden schlagen Sie vor? – alexis