提升MPI World Communicator重复

时间:2015-08-07 09:50:58

标签: c++ boost mpi

我正在寻找与此处提出的问题相似的内容:MPI communicator as global variable

答案基本上是MPI_COMM_WORLD是一个全局变量。

Boost很好地包装了它的通信器,并且在构造MPI_COMM_WORLD类型的对象时默认为boost::mpi::communicator生成通信器包装器。 [Boost MPI tutorial]

我的问题:

如果我想访问通讯器给出的内容,例如进程的排名,我可以调用

boost::mpi::communicator world;
int mpi_rank  = world.rank();

这也适用于main.cpp之外的单独函数,等等。如果我在那里使用相同的构造函数,我会在每种情况下获得相同的mpi_rank值吗?更具体地说,如果我在新文件/函数中构造新的rank = 0对象,那么rank = 0的进程是否仍会有boost::mpi::communicator?从Boost文档中我看起来并不清楚。

2 个答案:

答案 0 :(得分:0)

简单回答:看起来像是。

示例程序(没有相关的#include s,语法很好):

int main()
{
    boost::mpi::communicator main_comm;
    int mpi_rank = main_comm.rank();
    myClass myObj;
    myObj.test(mpi_rank);
}

// Separate file
class myClass
{
    void test(int i) {
        boost::mpi::communicator local;
        int local_rank = local.rank();
        std::cout << "local rank = " << local_rank 
                  << ", i(main rank) = " << i 
                  << std::endl;
    }
};

这个程序总是打印两次相同的数字(总是= = 10次左右,有4个过程。不是任何方式的详尽测试,但至少让我信服)

答案 1 :(得分:0)

确认您已经测试过的内容。是。一旦你设置了一个MPI通信器(或者像你的情况一样使用MPI_COMM_WORLD),一个过程&#39;在整个计划中,该沟通者中的排名不会改变。甚至跨文件/功能。