マルチスレッドプログラムとマシン間通信に依存するプログラムの違いを理解しています。私の問題は、「C」で書かれた素晴らしいマルチスレッドプログラムがあり、8コアマシンで非常にうまく機能することです。より多くのコアにアクセスするために、このプログラムをクラスターに移植する機会があります。pthreadのものを取り除いてMPI(私が使用したことのないもの)を改造することは努力する価値がありますか、それともすべて(またはそのほとんど)を最初から再コーディングする方が良いですか?私たちがCに「行き詰まっている」ので、言語を大幅に変更することはできません。
2 に答える
ソフトウェアの作成方法によっては、pthreadの実装を維持するよりもMPIを使用する方が有利な場合とそうでない場合があります。
残念ながら(または幸いなことに)、メッセージパッシングはpthreadingとは非常に異なる獣です-基本的な仮定はまったく異なります。マエストロチームのジョシュアフィリップスからのこの引用が大好きです。「メッセージパッシングと共有状態のコミュニケーションの違いは、同僚にタスクの完了を要求する電子メールを送信することと、主催者に書き込みを許可することの違いに相当します。仕事をやることリストに直接入れてください。失礼なだけでなく、後者は彼女を混乱させる可能性があります。彼女はそれを消したり、気づかなかったり、誤って優先順位を付けたりする可能性があります。」
残念ながら、データを共有する方法は大きく異なります。他のスレッドのデータに直接アクセスすることはできないため(他のマシン上にある可能性があるため)、pthreadからMPIに移行するのは非常に困難な作業になる可能性があります。一方、各スレッドが分離されるようにコードが記述されている場合、それは簡単な作業であり、間違いなく価値があります。
これがどれほど役立つかを判断するには、コードと、切り替えによって何を達成したいのかを理解する必要があります。学習経験としては価値がありますが(MPIで作業することにより、同期とスレッド化について多くのことを学びます)、利益がわずかである場合は実用的ではない可能性があります。
再。Reed へのコメント -- これは、MPI への簡単でオーバーヘッドの少ない変換のように思えます。注意: すべての MPI API がプロセスの動的作成をサポートしているわけではありません。つまり、N 個のプロセス (起動時に指定) でプログラムを開始すると、プログラムの存続期間中 N 個のプロセスでスタックします。