Ошибка MPI из очень простого примера кода fortran

#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 показывает их. Это часто делается намеренно, чтобы удержать людей от перегрузки головных узлов многоядерными заданиями.