Я работаю в кластере, где каждый узел имеет 16 процессоров. Моя версия Open MPI — 1.5.3. Я написал следующий простой код на фортране:
program MAIN
implicit none
include 'mpif.h'
integer status(MPI_STATUS_SIZE)
integer ierr,my_rank,size
integer irep, nrep, iex
character*1 task
!Initialize MPI
call mpi_init(ierr)
call mpi_comm_rank(MPI_COMM_WORLD,my_rank,ierr)
call mpi_comm_size(MPI_COMM_WORLD,size,ierr)
do iex=1,2
if(my_rank.eq.0) then
!Task for the master
nrep = size
do irep=1,nrep-1
task='q'
print *, 'master',iex,task
call mpi_send(task,1,MPI_BYTE,irep,irep+1,
& MPI_COMM_WORLD,ierr)
enddo
else
!Here are the tasks for the slaves
!Receive the task sent by the master node
call mpi_recv(task,1,MPI_BYTE,0,my_rank+1,
& MPI_COMM_WORLD,status,ierr)
print *, 'slaves', my_rank,task
endif
enddo
call mpi_finalize(ierr)
end
затем я компилирую код с помощью:
/usr/lib64/openmpi/bin/mpif77 -o test2 test2.f
и запустить его с
/usr/lib64/openmpi/bin/mpirun -np 32 -hostfile nodefile test2
мой nodefile выглядит так:
node1
node1
...
node2
node2
...
с узлами node1 и node2, повторяющимися по 16 раз каждый.
Я могу успешно скомпилировать. Когда я запускаю его для -np 16 (то есть только один узел), он работает нормально: каждый ведомый сервер завершает свою задачу, и я получаю приглашение обратно в терминал. Но когда пробую -np 32, не все рабы заканчивают свою работу, только 16 из них.
На самом деле с 32 узлами программа не возвращает мне подсказку, так что я думаю, что программа где-то сложена и ожидает выполнения какой-то задачи.
Я хотел бы получить от вас какие-либо комментарии, насколько я потратил некоторое время на эту тривиальную проблему.
Спасибо.