並列Javaプログラムのパフォーマンスを調整しています。建築効果に興味があります。
それぞれがクアッドコアIntelXeonCPUを備えた2つのCPUソケットを備えたマシンを考えると、次のようになります。
- 2つのCPUはどのように通信しますか、どのくらいの速さで通信しますか?
- 同じチップ上の2つのコアはどのくらいの速さで通信しますか?
- 同じチップ上の4つのコアは、通信またはメモリアクセスに関して同等ですか?
並列Javaプログラムのパフォーマンスを調整しています。建築効果に興味があります。
それぞれがクアッドコアIntelXeonCPUを備えた2つのCPUソケットを備えたマシンを考えると、次のようになります。
最適なメモリパフォーマンスに近くなるようにスレッドをコアにスケジュールする方法は、メモリへのアクセスパターンによって異なり、通常は問題を起こす価値はありません。プログラムがJavaである場合、最適なパフォーマンスに近づけるために必要なレベルの制御ができない可能性があります。
最新のCPUにはメモリコントローラーが統合されており、最新のマルチソケットシステムには分散メモリが搭載されています。これはと呼ばれます
Non-Uniform Memory Access(NUMA)
最新のマルチソケットIntelプロセッサでは、ソケット間の通信はQPIで行われます。
QPIは、これがどのように機能するかを指定するIntelアーキテクチャです。AMDに相当するものはHyperTransportです。さまざまなアーキテクチャについて詳しくは、こちらをご覧ください。
レベル1のデータキャッシュで欠落しているメモリへのアクセスは、(同じソケット内の)レベル2のデータキャッシュによって処理される場合があります。または、インテルが「ラストレベルキャッシュ(LLC)」と呼ぶものによって処理される場合があります。そのメモリアドレスのメモリコントローラを備えたソケット。LLCを別のソケットにヒットさせると、数十プロセッササイクルになる可能性がありますが、DRAMにアクセスするよりもはるかに高速です(100プロセッササイクル以上)。
1) 2 つの CPU はどのように通信しますか?通信速度はどれくらいですか?
ほとんどの場合、メモリまたは最も近い共有メモリ階層レベルを介して通信します。(SMP と NUMA の両方のシステム メモリは、共有レベルと見なされます。NUMA では、別のチップのメモリ コントローラーを介してアクセスされている場合でも、これは非均一 = 低速アクセスです)
2) 同じチップ上の 2 つのコアの通信速度は?
通常、同じチップ上のコアは L2 または L3 キャッシュを共有します。異なるチップ上のコアは、メモリを介して通信するか、キャッシュ コヒーレンシ プロトコルを使用してキャッシュ間のやり取りを行います。
したがって、ケース 1 (異なるチップ) の場合、CPU 間を通過するメモリの速度 (帯域幅) は、プレーン メモリの読み取り/書き込みに近くなります。ケース2(同じチップ)の場合、この速度はキャッシュの読み取り/書き込み速度まで大きくなる可能性があります。
通信の遅延は、ケース 1 で数百 CPU ティック、ケース 2 で数十 CPU ティックになります。
3) 同じチップ上の 4 つのコアは、通信またはメモリ アクセスに関して同等ですか?
通常、同じチップの 4 つのコアはすべて、RAM までの距離が同じです。チップのアーキテクチャと実装に依存します。一部の古い Intel では、たとえばマルチコア チップは、実際には 2 つのチップが 1 つのパッケージにパックされていました。