Al escribir el código MPI 3.0, ¿debería pasar argc
y argv
a la MPI_Init
llamada o no, y por qué?
EDITAR: Dado que la respuesta de Bill Barth planteó algunas preguntas, quiero hacer algunos comentarios:
- Pasar
argc
/argv
no es necesario desde MPI 1.1. - La pregunta es específicamente sobre por qué debería / no debería pasar
argc
/argv
( por qué no debería, entonces no es realmente una respuesta). - Aún así, a veces no puede pasar
argc
/argv
aMPI_Init
(escribir una biblioteca que usa inicialización estática para iniciar MPI si main está fuera de su control y MPI es un detalle de implementación).
EDIT2: La pregunta por qué noMPI_Init(argc, argv)
usarías ha llegado con demasiada frecuencia ahora. Algunos motivos:
No es posible hacerlo por razones de compatibilidad con implementaciones MPI <1.1 antiguas / no conformes / compatibles, ya que si está utilizando las funciones MPI2 o MPI3, no funcionarán de todos modos.
MPI_Init()
inicializa el tiempo de ejecución de MPI de la misma manera queMPI_Init(argc, argv)
MPI_Init(argc, argv)
elimina los argumentos que se pasan a la MPI tiempo de ejecución deargc
, yargv
e inicializa MPI. AFAIK es la única forma de limpiarargc
y,argv
por lo tanto, si necesita que estos no tengan argumentos MPI, debe usarlo.MPI_Init()
se puede usar en más situaciones queMPI_Init(argc, argv)
. Por ejemplo, su biblioteca que usa MPI como detalle de implementación puede probar si MPI se inicializa, y si no, llameMPI_Init()
y sucederá lo correcto. Su usuario no sabe que está utilizando MPI, no necesita pasarargc
,argv
a la biblioteca, no necesita cambiar su principal (en caso de que se está llevando sin argumentos) para utilizar su biblioteca ....
MPI_Init()
que tiene que obtener correctamente los argumentos a los que pasas mpirun
/ de mpiexec
alguna manera (no se especifica cómo), y dado que MPI_Init()
se pueden usar en más situaciones que MPI_Init(argc, argv)
(y sin soluciones), no lo hago ' Realmente no veo el punto de usar MPI_Init(argc, argv)
si está apuntando a MPI 3.0.
argc
y argv
partir de argumentos MPI e inicializar MPI, use MPI_Init(argc, argv)
, de lo contrario MPI_Init()
está bien (y a veces es necesario).