Я работаю в кластере, где каждый узел имеет 16 процессоров. Моя версия Open MPI - 1.5.3. Я написал следующий простой код в Fortran:mpirun не работает с двумя узлами
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 an d node2 повторяется 16 раз каждый.
Я могу скомпилировать успешно. Когда я запускаю его для -np 16 (так что только один узел), он работает отлично: каждый подчиненный заканчивает свою задачу, и я возвращаю запрос обратно в терминал. Но когда я пытаюсь -np 32, не все подчиненные заканчивают свою работу, только 16 из них.
На самом деле с 32 узлами программа не дает мне назад, так что я думаю, что программа уложена где-то и ждет некоторой задачи для выполнения.
Я хотел бы получить от вас любые комментарии, поскольку я провел некоторое время в этой тривиальной проблеме.
Спасибо.
попробуйте этот узел 0: 16 node1: 16 – peaceman