【发布时间】:2016-10-24 21:32:32
【问题描述】:
我试图找出在什么情况下可能阻塞的 boost mpi“发送”实际上会阻塞并导致死锁。
#include <boost/mpi.hpp>
#include <iostream>
int main(int argc, char *argv[])
{
boost::mpi::environment env{argc, argv};
boost::mpi::communicator world;
if (world.rank() == 0)
{
char buffer[14];
const char *c = "Hello, world from 1!";
world.send(1, 1, c, 13);
std::cout << "1--11111\n";
world.send(1, 1, c, 13);
std::cout << "1--22222\n";
world.recv(1, 1, buffer, 13);
std::cout << "1--33333\n";
world.recv(1, 1, buffer, 13);
std::cout << "1--44444\n";
buffer[13] = '\0';
std::cout << buffer << "11 \n";
}
else
{
char buffer[14];
const char *c = "Hello, world from 2!";
world.send(0, 1, c, 13);
std::cout << "2--11111\n";
world.send(0, 1, c, 13);
std::cout << "2--22222\n";
world.recv(0, 1, buffer, 13);
std::cout << "2--33333\n";
world.recv(0, 1, buffer, 13);
std::cout << "2--44444\n";
buffer[13] = '\0';
std::cout << buffer << "22 \n";
}
}
但它运行得很好,并且按照这个顺序:
2--11111
2--22222
1--11111
1--22222
1--33333
1--44444
Hello, world 11
2--33333
2--44444
Hello, world 22
如果有人能给我一个我实际上陷入僵局的场景,我将不胜感激。 潜在阻塞的 boost mpi 是如何工作的?
谢谢。
【问题讨论】:
-
Boost 不是 MPI 实现,它只是一个接口包装器,以使其更适合 C++。您想询问具体的 MPI 实现,例如 MPICH、OpenMPI、MVAPICH、Intel MPI、Cray、IBM、SGI 等。