我正在寻找一种在boost.MPI广播,分散,收集请求中压缩序列化数据的方法。要发送的类包含需要通过无线网络传输的大量数据(400MB)。虽然它发送,但需要> 20分钟。前进的方法是压缩数据,如增强压缩存档中所示(见下文)。你知道boost.MPI是否存在类似的压缩方法?如果没有,除了实施文件服务器之外,是否有任何关于发送此类数据的建议?
要发送的类的示例
class big {
...
template<class Archive> void serialize(Archive & ar, const unsigned int version){
ar & big_element1;
ar & big_element2;
}
}
示例提升压缩存档
std::ifstream ifs(fname, std::ios::binary);
boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
in.push(boost::iostreams::zlib_decompressor());
in.push(ifs);
boost::archive::binary_iarchive ia(in);
ia >> *this;
答案 0 :(得分:1)
根据sehe的建议,重新序列化为字符串流,压缩该字符串并将其作为字符串广播。我出错的地方是将stringstream和decompressor添加到流缓冲区的顺序。使用1中的compress1和decompress1函数,代码如下所示:
在根节点上
std::stringstream sstr(std::stringstream::out);
boost::archive::binary_oarchive archive(sstr);
archive << big_instance;
std::string str = sstr.str();
str = compress1(str);
broadcast(world, str, 0);
在接收节点上
boost::mpi::broadcast(world, str, 0);
std::stringstream sstr(ecsim::string_decompress(str));
boost::archive::binary_iarchive iarchive(sstr);
iarchive >> big_instance;