MPI_Rank возвращает тот же номер процесса для всех процессов - программирование

MPI_Rank возвращает тот же номер процесса для всех процессов

Я пытаюсь запустить эту программу hello world с помощью openmpi и mpirun на debian 7.

#include <stdio.h>
#include <mpi/mpi.h>

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;
}

Моя проблема MPI_Comm_Rank возвращает 0 для всех копий процесса. Когда я запускаю эту команду в оболочке:

mpirun -np 4  helloWorld

Он производит этот вывод:

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

Почему количество процессов еще 1?

4b9b3361

Ответ 1

Убедитесь, что оба mpicc и mpirun взяты из той же реализации MPI. Когда mpirun не может предоставить необходимую информацию о юниверсе запущенным процессам, наиболее распространенной причиной этого является то, что исполняемый файл был создан против другой реализации MPI (или даже другой версии той же самой реализации), MPI_Init() падает обратно к так называемой инициализации однопользовательского MPI и создает MPI_COMM_WORLD, который содержит только вызывающий процесс. Таким образом, результатом является много процессов MPI в своих отдельных экземплярах MPI_COMM_WORLD.

Обычно команды типа mpicc --showme, which mpicc и which mpirun могут помочь вам выяснить, действительно ли это так.