Std :: map序列化或映射到int *转换器

时间:2015-01-20 15:02:06

标签: c++ stl mpi

我有一些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;
    }
};

0 个答案:

没有答案