3

私はデュアルソケット8コアプロセッサを持っています。つまり、各プロセッサには4コアがあります。その仕様は完全にはわかりませんが、各プロセッサに個別のメモリバンクがccNUMA方式で接続されているため、別のプロセッサのメモリバンクからのアクセスは比較的遅いと思います。また、私が思うに、それらには異なるL3キャッシュがあります。

ここで私の質問は、2つのプロセッサ間でデータを共有するための最速の方法は何ですか。単純な共有メモリには、ccNUMAとキャッシュの一貫性が原因で問題が発生します。非常に速い方法はありますか?

4

2 に答える 2

2

それは、実装しようとしているものの性質に大きく依存します。私が見た限りでは、通常、MPI に頼るよりも、非常に厳密に管理された共有メモリ アプローチの方がうまくいく可能性があります。(共有メモリを使用すると、さらに多くのことが可能になるため)

ただし、X がうまく機能するかどうかを推測する作業がはるかに少ないため、MPI を完全に間違えることは困難です。

共有メモリを使用する一般的なアプローチを次に示します。

読み取り専用データ: データが十分に小さい場合は、すべてのノードで複製することをお勧めします。

メモリ アクセスに「移動」しない非常に高い空間的局所性がある場合は、空間的局所性アクセスの各「グループ」が同じノード上にあるようにデータを編成します。

メモリ アクセス パターンが一時的な局所性が高くても、空間的な局所性がキャッシュに収まらない場合は、データをローカル バッファーにコピーすることを検討してください。作業が完了したら、コピーして戻します。これにより、プログラムの同じ構造を維持できます。

編集:質問に「NUMA」タグを追加することを検討してください。

于 2011-09-03T13:46:36.467 に答える
1

OpenMP と OpenMPI の両方で、複数の CPU 間でデータを共有できます。これらの API のいずれかを使用すると、自分で実装しようとするものよりも高速になる可能性が高いと思います。どちらを使用するかは、実装しようとしているものの正確な性質によって異なります。

于 2011-09-03T10:34:57.960 に答える