我正在使用boost::mpi和openMPI编写模拟程序,一切都很顺利。但是,当我扩展系统规模并因此需要发送更大的std::vectors时,就会出现错误。
我已将问题简化为以下问题:
我已将问题简化为以下问题:
#include <boost/mpi.hpp>
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <boost/serialization/vector.hpp>
#include <iostream>
#include <vector>
namespace mpi = boost::mpi;
int main() {
mpi::environment env;
mpi::communicator world;
std::vector<char> a;
std::vector<char> b;
if (world.rank() == 0) {
for (size_t i = 1; i < 1E10; i *= 2) {
a.resize(i);
std::cout << "a " << a.size();
world.isend(0, 0, a);
world.recv(0, 0, b);
std::cout << "\tB " << b.size() << std::endl;
}
}
return 0;
}
输出结果:
a 1 B 1
a 2 B 2
a 4 B 4
....
a 16384 B 16384
a 32768 B 32768
a 65536 B 65536
a 131072 B 0
a 262144 B 0
a 524288 B 0
a 1048576 B 0
a 2097152 B 0
我知道mpi消息大小有限制,但是65KB对我来说似乎有点低。 有没有一种方法可以发送更大的消息?
isend
更改为send
会发生什么?这可能是非阻塞发送导致问题的原因。 - NathanOliverrecv
返回的status
吗?这可能会指引你一个方向。 - NathanOliver