Is there a way to force MPI to always block on send? This might be useful when looking for deadlocks in a distributed algorithm which otherwise depends on the buffering MPI might choose to do on send.
For example, the following program (run with 2 processes) works without problems on my machine:
// 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);
    }
}
But if I change the size of the buffer to 10000 it blocks indefinitely.
 
     
     
     
     
    