似乎通过骨架/内容机制发送 stl 复杂数据不起作用。
这是一个显示问题的简单代码:
#include <boost/mpi.hpp>
#include <boost/serialization/complex.hpp>
#include <boost/serialization/vector.hpp>
#include <iostream>
namespace mpi = boost::mpi;
using namespace std;
int main(int argc, char* argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
int NN=world.size();
int myid=world.rank();
if (myid == 0)
{
int N = 10;
vector <complex<double> > l(N);
for (int p=1; p!=NN; p++)
{
int taskid=1;
world.send(p, 0, taskid);
world.send(p, 1, mpi::skeleton(l));
}
mpi::content c = mpi::get_content(l);
for (int n = 0; n!=l.size() ; n++)
{
l[n]=complex<double>(1.0,1.0);
}
for (int p=1; p!=NN; p++)
{
world.send(p, 1, c);
}
}
else if (myid == 2)
{
vector <complex<double> > l;
mpi::content c;
world.recv(0, 1, mpi::skeleton(l));
c = mpi::get_content(l);
world.recv(0, 1, c);
for (int n=0; n!=l.size(); n++)
{
cout << l[n] << " ";
}
cout << endl;
}
}
输出中向量 l 的条目不是 (1.0,1.0) 但它们似乎未初始化。这仅在使用复杂数据类型和骨架/内容机制时才会发生。
有谁知道,如果这是一个内置问题,或者我做错了什么?