5

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

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

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

4

2 回答 2

2

这样做的 MPI 方法是使用MPI_Packand MPI_Unpack。当然那是 C 语言,可能不如使用 C++ 特性的东西方便。一个简单的例子见http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiexmpl/src/bcast/C/pack/solution.html

于 2012-08-17T10:41:23.313 回答
0

使用从数组istrstream中提取的。char这个的标题是<strstream>. 而且,是的,它在 C++ 标准中正式被弃用。该委员会在其早期沉迷于大量的一厢情愿。istrstream不会消失。

于 2012-08-15T19:36:46.800 回答