Я использую MPICH. Я запускаю программу MPI с одним процессом, используя:
mpiexec -n 1 -f hostfile ./master [arguments]
Где мои аргументы — это набор аргументов, требуемых процессом mpi. Мастер вычисляет оптимальное количество рабочих процессов, которые будут порождены, а затем вызывает следующую функцию:
MPI_Comm_spawn("./worker", argv, nprocs, MPI_INFO_NULL, 0, MPI_COMM_SELF,&intercomm,NULL);
Теперь эта программа работает нормально, когда у меня машинный файл выглядит так:
node01:2
node02:1
node03:1
node04:1
Итак, на node01 у меня запущено 2 процесса (мастер + 1 рабочий), а на остальных узлах есть один процесс. Однако я хочу, чтобы каждый узел запускал только 1 процесс. Поэтому я изменил hostfile следующим образом. Теперь после MPI_COMM_spawn()
, дочерние процессы не инициализированы, и я получаю в результате утверждение не удалось.
node01:1
node02:1
node03:1
node04:1
ОШИБКА
Assertion failed in file src/util/procmap/local_proc.c at line 127: node_id <= max_node_id
internal ABORT - process 0
Assertion failed in file src/util/procmap/local_proc.c at line 112: my_node_id <= max_node_id
internal ABORT - process 2
Assertion failed in file src/util/procmap/local_proc.c at line 127: node_id <= max_node_id
internal ABORT - process 1
Я не могу понять, что происходит в этом случае. Кто-нибудь еще сталкивался с подобной проблемой? Какова вероятная причина этого?
Задача ещё не решена.
Других решений пока нет …