【问题标题】:Boost MPI blocks on split call在拆分调用时提升 MPI 块
【发布时间】:2017-09-23 05:56:36
【问题描述】:

我设置了一个 Beowulf 集群,每台机器上有 3 个带有 MPICH 和 Boost 的 VM。 我的程序在我的集群上运行良好,但是当我尝试使用 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 上做错了什么吗?

【问题讨论】:

    标签: c++ boost mpi


    【解决方案1】:

    我终于找到了问题:mpirun 有时试图使用错误的接口进行通信。 通过在运行 mpirun 时指定好的接口,一切顺利!

    这是给 mpirun 的参数:

    --mca btl_tcp_if_include [your_network_interface]

    【讨论】:

      猜你喜欢
      • 2016-03-14
      • 2015-11-27
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2011-07-17
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多