Al escribir el código MPI 3.0, ¿debería pasar argcy argva la MPI_Initllamada o no, y por qué?
EDITAR: Dado que la respuesta de Bill Barth planteó algunas preguntas, quiero hacer algunos comentarios:
- Pasar
argc/argvno 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/argvaMPI_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, yargve inicializa MPI. AFAIK es la única forma de limpiarargcy,argvpor 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,argva 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.
argcy argvpartir de argumentos MPI e inicializar MPI, use MPI_Init(argc, argv), de lo contrario MPI_Init()está bien (y a veces es necesario).