#mpi
#mpi
Вопрос:
Я скомпилировал этот код:
program mpisimple
implicit none
integer ierr
include 'mpif.h'
call mpi_init(ierr)
write(6,*) 'Hello World!'
call mpi_finalize(ierr)
end
используя команду: mpif90 -o helloworld simplempi.f90
Когда я запускаю эту команду:
$ mpiexec -np 1 ./helloworld
Hello World!
как вы можете видеть, все работает нормально. Но когда я запускаю с любым другим количеством процессоров (здесь 4) Я получаю ошибки, и мне в основном приходится нажимать ctrl C, чтобы уничтожить ее.
Fatal error in MPI_Init: Other MPI error, error stack:
MPIR_Init_thread(805).....: fail failed
MPID_Init(1859)...........: channel initialization failed
MPIDI_CH3_Init(126).......: fail failed
MPID_nem_init_ckpt(858)...: fail failed
MPIDI_CH3I_Seg_commit(427): PMI_KVS_Get returned 4
In: PMI_Abort(69777679, Fatal error in MPI_Init: Other MPI error, error stack:
MPIR_Init_thread(805).....: fail failed
MPID_Init(1859)...........: channel initialization failed
MPIDI_CH3_Init(126).......: fail failed
MPID_nem_init_ckpt(858)...: fail failed
MPIDI_CH3I_Seg_commit(427): PMI_KVS_Get returned 4)
forrtl: severe (174): SIGSEGV, segmentation fault occurred
В чем может быть проблема? Я делаю это в системе Linux hpc.
Ответ №1:
Я понял, почему это произошло. Система, которую я использую, не требует от пользователей отправки одноядерных заданий через планировщик, но требует этого для многоядерных заданий. Как только команда mpiexec была отправлена через скрипт PBS bash, ошибки исчезли, и результат был таким, как ожидалось.
Комментарии:
1. Вероятно, у вас очень низкие ограничения ресурсов, установленные на головном узле кластера.
ulimit -a
показывает их. Это часто делается намеренно, чтобы удержать людей от перегрузки головных узлов многоядерными заданиями.