我在一个集群中工作,每个节点都有 16 个处理器。我的 Open MPI 版本是 1.5.3。我在 fortran 中编写了以下简单代码:
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
...
node1 和 node2 各重复 16 次。
我可以编译成功。当我为 -np 16 (所以只有一个节点)运行它时,它工作正常:每个从站都完成了它的任务,我在终端中得到了提示。但是当我尝试 -np 32 时,并不是所有的奴隶都完成了他们的工作,只有 16 个。
实际上有 32 个节点的程序并没有给我提示,所以我认为程序被堆叠在某个地方并且正在等待执行某些任务。
只要我在这个微不足道的问题上花了一些时间,我想收到你的任何评论。
谢谢。