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?
1 ответ
Убедитесь, что оба mpicc
а также mpirun
исходить из той же реализации MPI. когда mpirun
не в состоянии предоставить необходимую информацию о юниверсе запущенным процессам, причем наиболее распространенной причиной является то, что исполняемый файл был собран с использованием другой реализации MPI (или даже другой версии той же реализации), MPI_Init()
возвращается к так называемой инициализации одиночного MPI и создает MPI_COMM_WORLD
который содержит только вызывающий процесс. Таким образом, результатом является множество процессов MPI в рамках их отдельных MPI_COMM_WORLD
экземпляров.
Обычно такие команды, как mpicc --showme
, which mpicc
а также which mpirun
может помочь вам выяснить, так ли это на самом деле.