在分离呼叫上增强MPI阻止

时间:2017-04-26 02:13:45

标签: c++ boost mpi

我在每台机器上设置了一个带有3个VM的Beowulf群集,其中包含MPICH和Boost。 我的程序在我的集群上工作正常但是当我尝试使用boost :: split时,执行会无限期地阻塞。

请使用以下代码:

#include <boost/mpi.hpp>
#include <iostream>

namespace  mpi = boost::mpi;

int main (int argc , char* argv[])
{
    mpi::environment env(argc,argv);
    mpi::communicator world;

    int group_id = world.rank()%3;

    mpi::communicator local = world.split(group_id);

    std::cout  << "I am process " << world.rank() << " of " << world.size() << "." << std::endl;

    std::cout  << "I am sub-process " << local.rank() << " of " << local.size() << "." << std::endl;



    return 0;
}

在群集上执行时,没有任何反应。 但是如果我只在一个节点上执行它(比如用-np 9),它就可以正常工作:

I am process 5 of 9.
I am process 2 of 9.
I am process 3 of 9.
I am process 1 of 9.
I am process 6 of 9.
I am process 7 of 9.
I am process 0 of 9.
I am process 4 of 9.
I am sub-process 2 of 3.
I am sub-process 0 of 3.
I am sub-process 1 of 3.
I am sub-process 2 of 3.
I am sub-process 1 of 3.
I am sub-process 1 of 3.
I am sub-process 0 of 3.
I am process 8 of 9.
I am sub-process 2 of 3.
I am sub-process 0 of 3.

删除boost :: split调用使示例在3个节点上按预期执行,因此对split的调用显然是有罪的。

知道我在使用boost :: split做错了什么吗?

1 个答案:

答案 0 :(得分:1)

我最终发现了这个问题:mpirun有时试图使用错误的接口进行通信。 通过在运行mpirun时指定好的界面,一切都很顺利!

这是给mpirun的参数:

  

- mca btl_tcp_if_include [your_network_interface]