13

私はしばらくの間、pthreads、OpenMP、intel TBB、および一般的なスレッド化で遊んでいますが、OpenMP のようなメッセージ パッシング インターフェイスの実装と従来のスレッド化ライブラリの主な違いは何かをまだ理解していません。

私の場合、スレッドプールのボイラープレートコードをすべて書くことは問題ではなく、C++を使用していると仮定すると、この2つのテクノロジーの違いは... ?

接続されているすべてのマシンにタスクを分散しながら、ネットワーク経由でスレッドを操作することにも興味があります。

この 2 つの概念がどのように機能するかを理解したいので、OpenMP/ OpenMPIでサポートされるプラットフォームの数に関する制限も考慮していません。

4

2 に答える 2

9

マイク・シーモアの回答の補足として:

主なトレードオフは、プロセスとスレッド間で何を共有する必要があるかによって異なります。共有メモリを使用すると、実際に実行コンテキスト間でデータを共有できます。

メッセージングでは、実行コンテキスト (スレッド、プロセス、複数のコンピューター上のプロセス) 間でデータを渡すためにデータをコピーする必要があります。

コンテキストの実行時間と比較してデータが小さい (つまり、データ転送時間が短い) 場合、MPI は共有メモリと比較して大きなオーバーヘッドを持たないはずです。

反対に、共有するデータが大きい場合 (データ転送時間) が実行時間と比較して同程度である場合、MPI は適切ではない可能性があります。

最後に、単一のコンピューターの境界を越えたい場合、共有メモリはゲーム外です。

于 2013-06-14T11:51:44.947 に答える