没有 Boost.Serialization 的序列化

Gra*_*Guy 5 c++ serialization mpi

我正在尝试为我的代码实现一个简单的序列化/反序列化方法,以便能够使用 MPI 通过网络传递对象。在一个理想的世界,我会用Boost.SerializationBoost.MPI为,但他们无法在一些集群的安装我有机会获得,所以我考虑这个做我自己。

我的策略是将每个对象序列化为一个std::stringstream对象,然后通过MPI_SendusingMPI_CHAR作为数据类型发送消息。在这种情况下,我将std::stringstream::str()::c_str()作为指针和std::streaingstream::str()::size()*sizeof(char)消息的大小传递。

我已经想出了如何将所有内容序列化为一个std::stringstream对象。我的反序列化方法也接受一个std::stringstream对象并将所有内容反序列化。这很好用,除非我不知道如何std::stringstreamchars数组创建对象并避免从数组到流中的额外副本。我应该更改我的反序列化方法以直接char使用 using数组memcpy吗?

Zul*_*lan 2

MPI 执行此操作的方法是使用MPI_PackMPI_Unpack。当然,这是 C 语言,可能不如使用 C++ 功能的东西那么方便。有关简单示例,请参阅http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiexmpl/src/bcast/C/pack/solution.html