0

私には、SMPと非常によく並列化する大規模な科学計算タスクがありますが、レベルが細かすぎるため、明示的なメッセージパッシングを介して簡単に並列化できません。アドレス空間と物理マシン間で並列化したいと思います。次の条件下で、複数の物理コンピューター間ですでにマルチスレッド化されたコードを並列化するスケジューラーを作成することは可能ですか?

  1. コードはすでにマルチスレッド化されており、SMP構成でかなり適切に拡張できます。
  2. すべてのスレッドが同じアドレス空間または同じ物理マシンで実行されているわけではないという事実は、一部のユースケースでパフォーマンスが大幅に低下したとしても、プログラムに対して透過的である必要があります。
  3. 関連するすべての物理マシンが、バイナリ互換のオペレーティングシステムとCPUアーキテクチャを実行していると想定する場合があります。
  4. ロックや不可分操作のようなものは遅いかもしれませんが(処理するためのネットワーク遅延があります)、「正しく機能する」必要があります。

編集:

  1. レイテンシーではなく、スループットのみを気にします。
  2. 私はDプログラミング言語を使用していますが、定型的な解決策はないとほぼ確信しています。私は、特定の缶詰のソリューションよりも、これが原則として実行可能かどうかに関心があります。
4

3 に答える 3

0

私の最初の考えは、Apache Hadoopを使用することです。分散ストレージと分散コンピューティングを提供します。ファイルをロックとして使用することにより、プロセス間で同期できます。

于 2010-05-24T15:36:10.510 に答える
0

カスタム ハードウェアが必要ですが、SCRAMNetのようなものが必要なようです。ソフトウェアのみのソリューションがあるかどうかはわかりません。また、それが機能したとしても、ネットワーク化されたバージョンの実行速度が、以前に単一のマシンで実行していたときよりも遅くなる可能性があります。思い切ってアプリを再設計する必要があるかもしれません。

于 2010-05-24T15:51:41.163 に答える
0

ポイント 2 は、ある程度のパフォーマンスの低下に耐えることができることを示唆しているため、ハイブリッド アプローチを検討することをお勧めします。個々のマシン内での SMP、マシン間のメッセージ パッシングです。私は D に詳しくないので、具体的なアドバイスはできません。さらに、OpenMP + MPI のハイブリッド アプローチについてさまざまなレビューを見てきましたが、それはあなたとあなたのアプリケーションに適しているかもしれません。

編集:「パーティション化されたグローバルアドレス空間」についてGoogleで検索することをお勧めします。これは、希望するアプローチを非常に正確に説明しているようです。前と同じように、これに D を使用することについてのアドバイスはありません。

于 2010-05-24T16:11:07.550 に答える