gpt4 book ai didi

c++ - 是否可以强制 MPI 在发送时始终阻塞?

转载 作者:行者123 更新时间:2023-11-30 01:45:23 24 4
gpt4 key购买 nike

有没有办法强制 MPI 总是阻止发送?这在寻找分布式算法中的死锁时可能很有用,否则它取决于 buffering MPI might choose to do on send .

例如,下面的程序(运行 2 个进程)在我的机器上运行没有问题:

// C++
#include <iostream>
#include <thread>

// Boost
#include <boost/mpi.hpp>
namespace mpi = boost::mpi;

int main() {
using namespace std::chrono_literals;

mpi::environment env;
mpi::communicator world;
auto me = world.rank();
auto other = 1 - me;

char buffer[10] = {0};

while (true) {
world.send(other, 0, buffer);
world.recv(other, 0, buffer);
std::cout << "Node " << me << " received" << std::endl;

std::this_thread::sleep_for(200ms);
}
}

但如果我将缓冲区的大小更改为10000,它会无限期阻塞。

最佳答案

对于纯 MPI 代码,您所描述的正是 MPI_Ssend() 给您的。但是,在这里,您使用的不是纯 MPI,而是 boost::mpi。不幸的是,根据 boost::mpi's documentation , MPI_Ssend() 不受支持。

也就是说,也许 boost::mpi 提供了另一种方式,但我对此表示怀疑。

关于c++ - 是否可以强制 MPI 在发送时始终阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com