我正在尝试为我的代码实现一种简单的序列化/反序列化方法,以便能够使用MPI通过网络传递对象。在理想的情况下,我会为此使用Boost.SerializationBoost.MPI,但它们未安装在我可以访问的某些群集中,因此我正在考虑自己进行此操作。

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

我已经弄清楚了如何将所有内容序列化为std::stringstream对象。我的反序列化方法还采用了std::stringstream对象并将所有内容反序列化。除我不知道如何从std::stringstream数组创建char对象并避免从数组到流中的多余拷贝之外,此方法运行良好。我是否应该更改反序列化方法以改为直接使用charmemcpy数组一起使用?

最佳答案

MPI的实现方式是使用MPI_PackMPI_Unpack。当然是C语言,可能不如使用C++功能的便利。有关简单的示例,请参见http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiexmpl/src/bcast/C/pack/solution.html

关于c++ - 没有Boost.Serialization的序列化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11975606/

10-16 16:14