mpirun无法使用两个节点

时间:2012-04-03 14:24:58

标签: fortran mpi fortran90 openmpi fortran77

我在一个集群中工作,每个节点有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

我的nodefile如下所示:

node1
node1
...
node2
node2
... 

node1和node2各重复16次。

我可以成功编译。当我为-np 16运行它时(所以只有一个节点)它可以工作 罚款:每个奴隶完成它的任务,我得到了终端的提示。但是当我尝试-np 32时,并非所有的奴隶都完成了 他们的工作只有16个。

实际上有32个节点,程序没有给我 提示回来,以便我认为程序堆放在某处并等待 一些要执行的任务。

就我在这方面花了一些时间,我想收到你的任何评论 琐碎的问题。

感谢。

2 个答案:

答案 0 :(得分:0)

我不确定您的nodefile是否正确。我希望看到这样的行:

node1 slots=16

OpenMPI已有详细记录,您是否查看了他们的常见问题解答?

答案 1 :(得分:0)

你尝试过mpiexec而不是mpirun吗?