5

MPI を使用してネットワーク経由でオブジェクトを渡すことができるように、コードに単純なシリアル化/逆シリアル化メソッドを実装しようとしています。理想的な世界では、そのために使用Boost.SerializationBoost.MPIていたでしょうが、アクセスできる一部のクラスターにはインストールされていないため、自分でこれを行うことを検討しています。

私の戦略は、すべてのオブジェクトをオブジェクトにシリアル化し、データ型として使用しstd::stringstreamてメッセージを送信することです。そのような場合、ポインターとメッセージのサイズとして渡します。MPI_SendMPI_CHARstd::stringstream::str()::c_str()std::streaingstream::str()::size()*sizeof(char)

std::stringstreamすべてをオブジェクトにシリアル化する方法を考え出しました。私の逆シリアル化メソッドも、std::stringstreamオブジェクトを受け取り、すべてを逆シリアル化して戻します。std::stringstreams の配列からオブジェクトを作成し、配列charからストリームへの余分なコピーを回避する方法がわからないことを除いて、これは正常に機能します。逆シリアル化メソッドを代わりにcharusingの配列で直接動作するように変更する必要がありますか?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 に答える