1

C++ でアルゴリズム ライブラリを開発しました。これにより、ユーザーは、個々のアルゴリズム間でデータを共有するための独自のデータ型を実装できます (これもユーザーによって実装されます)。これは問題なく動作しますが、ライブラリ レベルで並列化を提供したいと考えています。個々のアルゴリズムは、分散メモリ マシンの異なるノードで並行して実行する必要があります。

コードを変更せずに分散および共有メモリ マシンに使用できるため、MPI を並列化に使用することにしました。残念ながら、ユーザーが実装したデータ型をノード間でどのように配布するかという問題に取り組んでいます。次の問題があります。

  • データがどれほど大きくなるかはわかりません。実行ごとに変化する可能性さえあります。
  • データ構造の中にどんなデータが入っているかわかりません。
  • データ量は最大 1GB まで非常に大きくなる可能性があります (これは MPI では問題になりません)。
  • ユーザーは、並列実行用のデータ型またはアルゴリズムの実装に違いを感じないはずです (アルゴリズムに関しては、実際には問題はありません)。

ノード間でこれらのデータを共有するためにMPIを使用する可能性はありますか、またはこの種の問題により適したアプローチが利用可能ですか? 少なくとも共有メモリ マシンで動作するソリューションが必要ですが、共有および分散メモリ マシンでコードを変更せずに動作するソリューションが必要です。

4

1 に答える 1

3

はい、MPI を使用してこれを行うことができますが、いいえ、MPI だけで行うことはできません。

このデータを別のノードに送信する場合でも、ディスクに書き込む場合でも、シリアライズできるように、メモリ内のデータ構造のレイアウトを明示的に記述する必要があります。MPI (またはその他の通信ライブラリ) にポインターを渡すと、そのポインターの反対側に何があるかがわからないため、データ構造をたどってその内容をコピーする方法がありません。

引数を単純な古いデータに (手動で、または MPI_PACK などを使用して) マーシャリングするか、その特定のインスタンスのメモリ内のデータのレイアウトを記述し、データをコピーする MPI データ型を作成できます。さらに、データ構造内のポインターをリダイレクトする必要があります。 Boost シリアライゼーションは、これらすべてに役立つ可能性があります。

于 2011-10-19T15:27:18.667 に答える