我正在尝试为我的代码实现一种简单的序列化/反序列化方法,以便能够使用MPI通过网络传递对象。在理想的情况下,我会为此使用Boost.Serialization
和Boost.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
对象并避免从数组到流中的多余拷贝之外,此方法运行良好。我是否应该更改反序列化方法以改为直接使用char
与memcpy
数组一起使用?
最佳答案
MPI的实现方式是使用MPI_Pack
和MPI_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/