Я работаю в кластере, где каждый узел имеет 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
мой нодфайл выглядит так:
node1
node1
...
node2
node2
...
с узлами 1 и 2 повторяются по 16 раз каждый.
Я могу успешно скомпилировать. Когда я запускаю его для -np 16 (так что только один узел), он работает
хорошо: каждый раб заканчивает свою задачу, и я получаю подсказку обратно в терминал. Но когда я пытаюсь -np 32, не все рабы заканчивают
их работа только 16 из них.
На самом деле с 32 узлами программа не дает мне
подскажите обратно, чтобы я думаю программа где-то сложена и ждет
какая-то задача для выполнения.
Я хотел бы получить от вас какой-либо комментарий, поскольку я провел некоторое время в этом
тривиальная проблема.
Спасибо.