Beim Schreiben von MPI 3.0 - Code, soll ich weitergeben argc
und argv
auf den MPI_Init
Anruf oder nicht, und warum?
EDIT: Da die Antwort von Bill Barth einige Fragen aufwirft, möchte ich einige Anmerkungen machen:
- Bestehen
argc
/argv
ist seit MPI 1.1 nicht erforderlich. - Die Frage ist speziell, warum sollte / sollte man nicht bestehen
argc
/argv
( warum sollte man dann nicht wirklich eine Antwort sein). - Manchmal können Sie jedoch nicht übergeben
argc
/argv
anMPI_Init
(Schreiben einer Bibliothek, die statische Initialisierung verwendet, um MPI zu starten, wenn main außerhalb Ihrer Kontrolle liegt und MPI ein Implementierungsdetail ist).
EDIT2: Die Frage, warum Sie nicht verwenden würden,MPI_Init(argc, argv)
ist jetzt zu oft gekommen. Einige Gründe:
Aus Gründen der Kompatibilität mit älteren / nicht kompatiblen / kompatiblen MPI <1.1-Implementierungen ist dies nicht möglich, da diese bei Verwendung von MPI2- oder MPI3-Funktionen sowieso nicht funktionieren.
MPI_Init()
Initialisiert die MPI-Laufzeit auf die gleiche Weise wieMPI_Init(argc, argv)
MPI_Init(argc, argv)
entfernt Argumente an die MPI - Laufzeit übergebenargc
, undargv
und initialisiert MPI. AFAIK ist es der einzige Weg , zu reinigenargc
undargv
so , wenn Sie diese brauchen brauchen Sie keine MPI Argumente zu haben , es zu benutzen.MPI_Init()
kann in mehr Situationen verwendet werden, alsMPI_Init(argc, argv)
. Zum Beispiel kann Ihre Bibliothek, die MPI als Implementierungsdetail verwendet, testen, ob MPI initialisiert ist. Wenn nicht, wird aufgerufenMPI_Init()
und das Richtige passiert. Ihre Benutzer nicht wissen , dass Sie mpi verwenden, muss nicht passierenargc
,argv
Ihre Bibliothek, brauchte nicht ihr Haupt ändern (falls es nehme keine Argumente) Ihre Bibliothek zu nutzen ....
MPI_Init()
die muss richtig die Argumente erhalten Sie weitergeben mpirun
/ mpiexec
irgendwie (es ist nicht spezifiziert , wie), und da MPI_Init()
kann in mehr Situationen verwendet werden , als MPI_Init(argc, argv)
(und ohne Abhilfen), I don‘ Ich verstehe den Sinn der Verwendung nicht wirklich, MPI_Init(argc, argv)
wenn Sie auf MPI 3.0 abzielen.
argc
und argv
von MPI Argumenten und initialisieren MPI dann verwenden MPI_Init(argc, argv)
, sonst MPI_Init()
ist in Ordnung (und manchmal ist es notwendig).