質問

マルチスレッドプログラムとマシン間通信に依存するプログラムの違いを理解しています。私の問題は、「C」で書かれた素晴らしいマルチスレッドプログラムがあり、8コアマシンで非常にうまく動作し、実行されることです。このプログラムをクラスターに移植して、より多くのコアにアクセスできるようになりました。 pthreadをリッピングしてMPI(私は使用したことがない)を改良するのに努力する価値はありますか? 「スタック」していると仮定します。 Cでは、言語の大規模な変更はオプションではありません。

役に立ちましたか?

解決

ソフトウェアの作成方法に応じて、pthread実装を維持するよりもMPIを使用するほうが有利な場合とそうでない場合があります。

残念ながら(または幸いなことに)、メッセージの受け渡しはpthreadingとは非常に異なります-基本的な仮定はまったく異なります。 マエストロチームのジョシュアフィリップスからの引用:"メッセージの受け渡しと共有状態の通信の違いは、同僚にタスクの完了を要求する電子メールを送信して開くことの違いと同等です主催者を設定して、タスクをTo Doリストに直接書き留めます。単に失礼であるだけでなく、後者は彼女を混乱させる可能性があります。彼女はそれを消したり、気付かなかったり、誤って優先順位を間違ったりするかもしれません。

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

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top