2011-08-03 24 views
3

当我在单台机器上运行多个进程时,我的测试程序正常工作。在多台主机间分配进程时,打开的MPI程序不工作

$ ./mpirun -np 2 ./mpi-test 
Hi I'm A:0 
Hi I'm A:1 
A:1 sending 11... 
A:1 sent 11 
A:0 received 11 from 1 
all workers checked in! 

当我运行在多个主机的过程中每个主机上催生了相同的程序,但MPI_SEND不会返回。

$ ./mpirun -np 2 -host A,B ./mpi-test 
Hi I'm A:0 
Hi I'm B:1 
B:1 sending 11... 

我已经尝试了一些其他的示例MPI程序,我发现和我遇到了同样的问题。任何想法出了什么问题?

编辑:如果所有进程都在该机器上产生,这也可以在远程机器上运行。

代码:

#include <mpi.h> 

int main(int argc, char** argv) 
{ 
    MPI::Init(); 
    int rank = MPI::COMM_WORLD.Get_rank(); 
    int size = MPI::COMM_WORLD.Get_size(); 
    char name[256]; 
    int len; 
    MPI::Get_processor_name(name, len); 

    printf("Hi I'm %s:%d\n", name, rank); 

    if (rank == 0) { 
     while (size > 1) { 
      int val; 
      MPI::Status status; 
      MPI::COMM_WORLD.Recv(&val, 1, MPI::INT, MPI::ANY_SOURCE, MPI::ANY_TAG, status); 
      int source = status.Get_source(); 
      printf("%s:0 received %d from %d\n", name, val, source); 
      size--; 
     } 
     printf("all workers checked in!\n"); 
    } 
    else { 
     int val = rank + 10; 
     printf("%s:%d sending %d...\n", name, rank, val); 
     MPI::COMM_WORLD.Send(&val, 1, MPI::INT, 0, 0); 
     printf("%s:%d sent %d\n", name, rank, val); 
    } 
    MPI::Finalize(); 

    return 0; 
} 

编辑:ompi_info

$ ./mpirun --bynode -host A,B --tag-output ompi_info -v ompi full --parsable 
[1,0]<stdout>:package:Open MPI [email protected] Distribution 
[1,0]<stdout>:ompi:version:full:1.4.3 
[1,0]<stdout>:ompi:version:svn:r23834 
[1,0]<stdout>:ompi:version:release_date:Oct 05, 2010 
[1,0]<stdout>:orte:version:full:1.4.3 
[1,0]<stdout>:orte:version:svn:r23834 
[1,0]<stdout>:orte:version:release_date:Oct 05, 2010 
[1,0]<stdout>:opal:version:full:1.4.3 
[1,0]<stdout>:opal:version:svn:r23834 
[1,0]<stdout>:opal:version:release_date:Oct 05, 2010 
[1,0]<stdout>:ident:1.4.3 
[1,1]<stdout>:package:Open MPI [email protected] Distribution 
[1,1]<stdout>:ompi:version:full:1.4.3 
[1,1]<stdout>:ompi:version:svn:r23834 
[1,1]<stdout>:ompi:version:release_date:Oct 05, 2010 
[1,1]<stdout>:orte:version:full:1.4.3 
[1,1]<stdout>:orte:version:svn:r23834 
[1,1]<stdout>:orte:version:release_date:Oct 05, 2010 
[1,1]<stdout>:opal:version:full:1.4.3 
[1,1]<stdout>:opal:version:svn:r23834 
[1,1]<stdout>:opal:version:release_date:Oct 05, 2010 
[1,1]<stdout>:ident:1.4.3 

回答

1

我最终在A上升级到1.5.3并在C上安装1.5.3。我不确定它是升级还是B的问题,但现在一切正常。

参考:

  • 原始设置:节点A(拱Linux中,打开MPI 1.4.3),节点B(Ubuntu的,开放MPI 1.4.3)
  • 工作设置:节点A(拱Linux中,打开MPI 1.5.3),节点C(Arch Linux的, 打开MPI 1.5.3)
0

通常的原因是有些事情是没有正确设置在远程主机上;它可能是登录/网络问题,或者MPI库/可执行文件或程序本身在远程主机上找不到。

如果您尝试

mpirun -np 2 -host A,B hostname 

会发生什么?

+0

它打印出 甲 乙 – Keith

+0

好了,所以,可能排除了简单的网络问题;现在如何处理一个简单的MPI Hello World程序:#include int main(){MPI :: Init(); int rank = MPI :: COMM_WORLD.Get_rank(); int size = MPI :: COMM_WORLD.Get_size(); printf(“Hi%d%d \ n”,rank,size); MPI ::的Finalize();返回0; } –

+0

你好,从0 0 2 你好从1 – Keith