我有一些STL数据结构的大项目,比如std :: map和std :: list。我想通过MPI使其并行。 据我所知,没办法简单地通过MPI发送std :: list。我看到boost有一些功能可以做到,但我想了解其他方法。
是否有任何速度优化的方法将一些大的std :: map(或std :: list)转换为类似int *的东西,通过标准MPI接口发送它并在对等端解压缩? 我很欣赏一些阅读社区体验的链接。
稍后添加。 既然没有回答我试过以下: char * ptr必须足够长。经过MPI环境测试。
struct Phase : public TscTime {
Phase() : funcId(0), uniqIdx(-1LL) {}
long funcId;
long long uniqIdx;
long pack(char *ptr) const {
long ssize = 0, ptrIt = 0;
ptrIt += TscTime::pack(ptr+ptrIt);
ssize = sizeof(funcId); memcpy(ptr+ptrIt, &funcId, ssize); ptrIt+=ssize;
ssize = sizeof(uniqIdx); memcpy(ptr+ptrIt, &uniqIdx, ssize); ptrIt+=ssize;
return ptrIt;
}
long unpack(const char *ptr) {
long ssize = 0, ptrIt = 0;
ptrIt += TscTime::unpack(ptr+ptrIt);
ssize = sizeof(funcId); memcpy(&funcId, ptr+ptrIt, ssize); ptrIt+=ssize;
ssize = sizeof(uniqIdx); memcpy(&uniqIdx, ptr+ptrIt, ssize); ptrIt+=ssize;
return ptrIt;
}
};