c++ - 如何知道 MPI 请求的接收者和发送者

标签 c++ boost request mpi

有没有办法知道boost中一次MPI通信的接收进程、发送进程和tag值。

现在,我有一些进程可以相互发送/接收大量消息。而且,我在接收方有一个 boost::mpi::request 集合。该集合存储已收到的请求项。通信操作完成后,我可以从这个集合中提取接收者进程和发送者进程吗? (我还需要知道标签值。)或者,我应该改变我的策略吗?也许收集请求没有意义?

最佳答案

该信息在请求完成后的状态中,而不是在请求本身中。

#include <boost/mpi.hpp>
#include <iostream>
#include <string>
#include <boost/serialization/string.hpp>
namespace mpi = boost::mpi;

int main()
{
    mpi::environment env;
    mpi::communicator world;

    if (world.rank() == 0) {
        std::string msg, out_msg = "Hello from rank 0.";
        world.send(1, 17, out_msg);
    } else {
        mpi::request req[1];
        mpi::status stat[1];
        std::string rmsg;

        req[0] = world.irecv(mpi::any_source, mpi::any_tag, rmsg);
        mpi::wait_all(req, req + 1, stat);

        std::cout << "Got " << rmsg << std::endl;
        std::cout << "From   " << stat[0].source() << std::endl;
        std::cout << "Tagged " << stat[0].tag() << std::endl;
    }

    return 0;
}

关于c++ - 如何知道 MPI 请求的接收者和发送者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403088/

相关文章:

c++ - 对我的绘图项目的建议

c++ - 模板特化编译器错误

c++ - 在 C 代码中使用 boost::bind() 会起作用吗?

json - Karate 在状态为 201 的 POST 请求后不显示响应

javascript - 如何使用promise返回数组的最终结果?

c++ - 缺少同步时的弛豫原子和内存连贯性

二叉树的 C++ 析构函数

c++ - 如何将带有自定义分配器的 std::vector 传递给需要带有 std::allocator 的函数?

c++ - SSL 证书和 Boost asio

javascript - Rails 如何使用来自 ajax post 请求的 json 响应更新部分