MPI_Rank devuelve el mismo número de proceso para todo el proceso

Estoy intentando ejecutar este progtwig de ejemplo hello world con openmpi y mpirun en debian 7.

#include  #include  int main (int argc, char **argv) { int nProcId, nProcNo; int nNameLen; char szMachineName[MPI_MAX_PROCESSOR_NAME]; MPI_Init (&argc, &argv); // Start up MPI MPI_Comm_size (MPI_COMM_WORLD,&nProcNo); // Find out number of processes MPI_Comm_rank (MPI_COMM_WORLD, &nProcId); // Find out process rank MPI_Get_processor_name (szMachineName, &nNameLen); // Get machine name printf ("Hello World from process %d on %s\r\n", nProcId, szMachineName); if (nProcId == 0) printf ("Number of Processes: %d\r\n", nProcNo); MPI_Finalize (); // Shut down MPI return 0; } 

Mi problema es que MPI_Comm_Rank devuelve 0 para todas las copias del proceso. Cuando ejecuto este comando en el shell:

 mpirun -np 4 helloWorld 

Produce esta salida:

 Hello World from process 0 on debian Number of Processes: 1 Hello World from process 0 on debian Number of Processes: 1 Hello World from process 0 on debian Number of Processes: 1 Hello World from process 0 on debian Number of Processes: 1 

¿Por qué el número de procesos sigue siendo 1?

Asegúrese de que tanto mpicc como mpirun provengan de la misma implementación de MPI . Cuando mpirun no proporciona la información del universo necesaria para los procesos iniciados, y la razón más común es que el ejecutable se compiló con una implementación de MPI diferente (o incluso una versión diferente de la misma implementación), MPI_Init() vuelve a la llamada inicialización MPI singleton y crea un MPI_COMM_WORLD que solo contiene el proceso de llamada. Por lo tanto, el resultado son muchos procesos MPI dentro de sus propias instancias MPI_COMM_WORLD .

Por lo general, los comandos como mpicc --showme , which mpicc y which mpirun podrían ayudarlo a averiguar si ese es el caso de hecho.