Gra*_*Guy 5 c++ serialization mpi
我正在尝试为我的代码实现一个简单的序列化/反序列化方法,以便能够使用 MPI 通过网络传递对象。在一个理想的世界,我会用Boost.Serialization和Boost.MPI为,但他们无法在一些集群的安装我有机会获得,所以我考虑这个做我自己。
我的策略是将每个对象序列化为一个std::stringstream对象,然后通过MPI_SendusingMPI_CHAR作为数据类型发送消息。在这种情况下,我将std::stringstream::str()::c_str()作为指针和std::streaingstream::str()::size()*sizeof(char)消息的大小传递。
我已经想出了如何将所有内容序列化为一个std::stringstream对象。我的反序列化方法也接受一个std::stringstream对象并将所有内容反序列化。这很好用,除非我不知道如何std::stringstream从chars数组创建对象并避免从数组到流中的额外副本。我应该更改我的反序列化方法以直接char使用 using数组memcpy吗?
MPI 执行此操作的方法是使用MPI_Pack和MPI_Unpack。当然,这是 C 语言,可能不如使用 C++ 功能的东西那么方便。有关简单示例,请参阅http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiexmpl/src/bcast/C/pack/solution.html