まず最初に、以下の用語とその使用状況を理解します。
- CPU
- CPUは処理ユニットです。
- 命令を処理するための複数のコンポーネントがあります。
- 各コンポーネントは、命令のフェッチ、デコード、処理、更新などのさまざまな操作を担当します。
- 芯
- 1つのCPUは、上記のコンポーネントの複数のセット/ユニットを持つことができます。
- これらのユニットが2セットある場合、プロセッサは2つの命令を並行して実行できます。
- 1つのユニットはコアと呼ばれます。
- デュエルコアCPUには、2つの同一のコンポーネントセットがあります。クアッドコアCPUには、これらのコンポーネント/ユニットの4つの同一のセットがあります。
- マルチCPU /ハイパースレッディング
- これは少しトリッキーです。ソフトウェアコンテキストでのみ有効です。
- 命令が外部イベントの完了を待機しているときはいつでも、CPUはアイドル状態になります。CPUをより有効に活用するために、一部のベンダーは2つのハードウェアスレッドを維持しており、1つのスレッドがブロックされると、ハードウェアは他のスレッドに切り替えます。この種類のプロセッサは、CPUの状態を保存および復元する機能になります
- ソフトウェアの場合、2つのスレッドが並行して実行されているように見えます。
- Linuxは、このハイパースレッディングコアを複数CPUと見なします。2つのスレッドを並行して実行できるからです。したがって、2つの実行ユニット(疑似CPU)が表示されます。
- たとえば、最近のIntel CPUはハイパースレッド化されており、2つの同時スレッドを実行できます。
- マルチコア
- 最近のCPUには、上記のハードウェアユニット/コアのセットが複数あります
- ハイパースレッディングとは異なり、実際には2つの命令を並行して実行できます。
- 各コアもハイパースレッド化できます
- マルチプロセッサ
- サーバー、スーパーコンピューターなどの高性能システムには、複数の物理CPUが搭載されます。
- あなたはそれらのマザーボードで複数のCPUソケットを見ることができます
- それぞれが複数のコアを持つことができます。繰り返しになりますが、各コアはハイパースレッド化できます
最近のPCには通常、マルチコアハイパースレッドプロセッサが搭載されています。たとえば、クアッドコアハイパースレッドIntel CPUが搭載されたPCで実行されているLinuxでは、8 CPU(4コアx 2ハイパースレッド)が表示されます。
最近のサーバーは通常、マルチコアマルチプロセッサーシステムです。一般的なサーバーには2つのソケットがあり、それぞれに24のハイパースレッドコアがあります。したがって、このシステムで実行されているLinuxでは、96個のCPU(2ソケットx 24コアx 2ハイパースレッド)が表示されます。
きょうだい
実際の質問に戻ると、キャッシュを共有するプロセッサーは兄弟と呼ばれます。キャッシュの構成は次のようになります(アーキテクチャによって異なります)。
- 各コアには、1つのL1命令キャッシュと1つのL1データキャッシュがあります。
- 各コアは1つの統合L2キャッシュになります
- ソケット内のすべてのコアには1つの統合L3キャッシュがあります
- 通常、2つのソケットがキャッシュを共有することはありません。
2つのソケットを備えたマルチコアマルチプロセッサシステムについて考えます。各ソケットはハイパースレッディングを備えた24コアを備えています。この場合、Linuxには0から95までの番号が付けられた合計96のCPUが表示されます。ソケット1にはCPU 0〜47があり、ソケット2には48〜95があります(これは通常、番号がインターリーブされます)。上記のキャッシュ構成を持つこのシステムでは、
- プロセッサ0〜47は兄弟です
- プロセッサ48〜95は兄弟です