2009-03-13 12 views
0

私は、マルチスレッドプログラムとマシン間通信に依存するプログラムとの違いについて理解しています。私の問題は、 'C'で書かれた素晴らしいマルチスレッドプログラムが動作し、8コアマシンでうまく動作することです。このプログラムをクラスタに移植して、より多くのコアにアクセスできるようになりました。 pthreadものを取り除き、MPI(私が一度も使ったことのない)を改造する努力が必要なのでしょうか、それとも全部(あるいはそのほとんど)を最初から記録する方が良いでしょうか?私たちがC言語に「固執している」と仮定すると、言語の大規模な変更はオプションではありません。pthreadされたプログラムをMPIに変換しますか?

答えて

2

ソフトウェアの書き方によっては、pthreadの実装を維持しながらMPIに行く利点があるかもしれません。

残念ながら(または幸いにも)、メッセージの受け渡しはpthreadingとは非常に異なる獣です。基本的な前提は全く異なります。私はthis quote from Joshua Phillips of the Maestro teamが大好きです: "メッセージの受け渡しと共有状態のコミュニケーションの違いは、同僚に仕事を完了させることを要求する電子メールを送信し、自分の担当者にタスクを直接書き留めるために主催者を開くことと、後者は彼女を混乱させる可能性があります - 彼女はそれを気付かず、間違って優先順位を間違えてしまうかもしれません。 "

残念ながら、データを共有する方法は非常に異なります。他のスレッドのデータに直接アクセスすることはできません(他のマシン上にある可能性があるため).pthreadsからMPIに移行するのは非常に難しい作業です。一方、各スレッドが分離されるようにコードが記述されていれば、それは簡単な作業であり、間違いなく価値があります。

これがどれだけ役に立つのかを判断するには、コードを理解し、切り替えることでどのようなことを達成する必要があるでしょうか。学習経験としては価値があります(MPIでの作業で同期とスレッド化について多くを学びます)が、利益が軽い場合は実用的ではないかもしれません。

+0

お返事ありがとうございます。このプログラムには、マスタスレーブアーキテクチャの利点があります。 1つのスレッドが多数の同一のサブスレッドを起動します。いずれのサブスレッドも、他のスレッドと通信する必要はありません。そして、マスターとスレーブの間で交換されるデータは小さく、まれではありません。 – Joey

+0

そのような場合、MPIへの移植はおそらくかなり厳しいでしょう。もう1つの問題は、スレッドが結果をメインスレッドに返す方法です。多くの情報が返されますか?ステータスと結果は恐らくあなたの唯一の心配でしょう。 –

+0

もう一度ありがとうございます。基本的には、すべてのサブ問題に利用可能なデータを作成するマスター設定です。それぞれのデータは、そのデータに基づいて作業を行い、次にそれぞれがマスターに結果を提供します。マスターはいくつかの仕事と繰り返しを行います。調整のために、それは基本的に "眠っている理髪師の問題"です。 – Joey

0

Re。 Reedへのあなたのコメント - これは、MPIへの簡単で低オーバーヘッドの変換のように聞こえる。すべてのMPI APIがプロセスの動的作成をサポートしているわけではありません。つまり、スタートアップ時に指定されたN個のプロセスでプログラムを起動すると、プログラムのライフタイム全体でN個のプロセスが滞ってしまいます。

+0

ありがとうございます。私はそのコメントが提案を助けることができる詳細を追加するかもしれないと思った。あなたの応答は、この変換の潜在的な容易性についても言います。このプログラムが実行されるたびに、必要なスレッド数(MPIのプロセス数)がわかっています。ありがとう! – Joey

+0

ターゲットプラットフォームに適したMPIライブラリを選択すると、ここで多くのことができます。いくつかのMPI実装は、特定のタスクに対して他の実装よりも優れていますが、それらのプログラミングは非常に近いものでなければならないため、通常はさまざまなオプションを試してみるのはかなり簡単です。 –

関連する問題