MPI を強制的に送信時に常にブロックする方法はありますか? これは、 MPI が 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に変更すると、無期限にブロックされます。