私が理解しているように、NUMA システムでのパフォーマンスのために、避けるべき 2 つのケースがあります。
- 同じソケット内のスレッドが同じキャッシュ ラインに書き込む (通常は 64 バイト)
- 異なるソケットから同じ仮想ページに書き込むスレッド (通常は 4096 バイト)
簡単な例が役に立ちます。2 ソケット システムがあり、各ソケットに 2 つの物理コア (および 2 つの論理コア、つまりモジュールごとに Intel ハイパースレッディングまたは AMD 2 コアがない) を備えた CPU があると仮定します。OpenMPの図をお借りしましょう: スケジュール用
| socket 0 | core 0 | thread 0 |
| | core 1 | thread 1 |
| socket 1 | core 2 | thread 2 |
| | core 3 | thread 3 |
したがって、ケース 1 に基づいて、たとえばスレッド 0 とスレッド 1 が同じキャッシュラインに書き込むことを避けるのが最善であり、ケース 2 に基づいて、たとえばスレッド 0 がスレッド 2 と同じ仮想ページに書き込むことを避けるのが最善です。
ただし、最新のプロセッサでは、2 番目のケースはもはや問題ではないとのことです。ソケット間のスレッドは、同じ仮想ページに効率的に書き込むことができます (同じキャッシュ ラインに書き込まない限り)。
ケース 2 はもはや問題ではありませんか? それでも問題がある場合、これに対する正しい用語は何ですか? 両方のケースを一種の偽の共有と呼ぶのは正しいですか?