我正在尝试为我的代码实现一个简单的序列化/反序列化方法,以便能够使用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
数组?
答案 0 :(得分:1)
MPI执行此操作的方法是使用MPI_Pack
和MPI_Unpack
。当然这是C,可能不像使用C ++功能那样方便。有关简单示例,请参阅http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiexmpl/src/bcast/C/pack/solution.html
答案 1 :(得分:0)
使用从istrstream
数组中提取的char
。标头为<strstream>
。并且,是的,正式地它在C ++标准中被弃用了。委员会在其早期就沉迷于大量的一厢情愿的想法。 istrstream
不会消失。