これが Wikipedia にあるハイパースレッディングの説明です:
物理的に存在するプロセッサコアごとに、オペレーティングシステムは2つの仮想(論理)コアに対応し、可能な場合はそれらの間でワークロードを共有します。
物理コアごとに3つまたは4つの論理コアを提供するハイパースレッディングがないのはなぜですか?
マニュアル インテルハイパースレッディングテクノロジーテクニカルユーザーガイド には、一部のサーバーCPUで行ったように、インテルがコンシューマーCPUでコアごとに2つ以上のスレッドを試行しなかった理由に関するヒントが含まれています。
ハイパースレッディングテクノロジーを説明するとき、それは言います:
各論理プロセッサ
- 独自のアーキテクチャ状態を持っている
- 独自のコードストリームを同時に実行します
- 個別に中断および停止できます
2つの論理プロセッサは同じものを共有します
- 実行エンジンとキャッシュ
- ファームウェアとシステムバスのインターフェース
重要な部分は、2つの論理プロセッサが同じ実行エンジンを共有することです。つまり、コアを構成するユニットは複製されません。たとえば、演算ユニットが1つのスレッドで使用されると、他のスレッドでは使用できません。これにより、完全な並列処理が防止されるため、2つのスレッドが同じタイプの並列命令で実行されることはありません。一方は他方が終了するのを待つ必要があります。
Intelは、スレッドによる平均パフォーマンス向上を次のように定量化しました。
ハイパースレッディングテクノロジーを搭載したプロセッサは、マルチスレッドオペレーティングシステムとアプリケーションコードを実行すると、ハイパースレッディングテクノロジーを搭載していない同等のインテルアーキテクチャプロセッサよりもパフォーマンスが30%向上する可能性があります。
したがって、1つのスレッドに対する2つのスレッドの統計的増加は30%程度であり、同じコア上の2つのスレッドが1つの作業を2倍にできる場合に予想される100%からはかなり離れています。
したがって、Intelがコアで3つのスレッドを有効にした場合、統計的な向上ははるかに低くなり、おそらく10%以下になると推定します。
各スレッドごとに一部のハードウェアを複製する必要があるという事実、つまりアーキテクチャの状態と割り込みロジックを考えると、この追加のハードウェアがコアの価格に追加するコストに見合うだけの価値はないでしょう。
効果的なハイパースレッディングのために、Intelは各コア内の同じタイプのユニットの数を増やす必要がありました。 Haswell microarchitecture では、ロード/ストア用に4つのポート、整数用に4つ、ブランチ用に2つのポートがあるため、同じ整数のワークロードを実行している2つのスレッドでも、多くの競合は発生しません。ただし、インテルはまだコアあたり2つのハイパースレッドのモデルを維持しています。おそらく、より多くのハイパースレッドを可能にするために必要なハードウェアを節約するためか、あるいは現代のオペレーティングシステムが実際にそのような建築。
この議論は ServerFault SE:ハイパースレッディングで使用するCPUの数は? で提起されました。
2つの異なるスレッドを使用すると、1つのスレッドのパフォーマンスが低下するのはいつですか。
命令間の依存関係は変わりませんが、新たな問題が発生します-競争。これらの異なるスレッドは、キャッシュ使用率と帯域幅の両方でメモリアクセスをめぐって競合しますが、これはやや逆効果です。
論理コアは多くのことを行うことはできませんが、並列性が少し向上します。それは本当のコアではありません。実際、実際の物理コアの約30%のパフォーマンスを提供します。
その目的は、I/Oバウンド(非CPU集中)プロセスが支配する世界で並列処理を増やすことでした。 CPU集中型(CPUバウンド)スレッドがこれらのコアの1つに切り替えられると、そのパフォーマンスが大幅に低下します。
このようなスレッドが複数の論理コアの周りに投げ込まれるシナリオを想像してみてください。これにより、パフォーマンスが低下する可能性があります。
出典: ハイパースレッディングが痛い場合
なぜ3つまたは4つのスレッドではないのですか?または8?収穫逓減。 Sunはコアあたり8スレッドを実行し、多くのスレッドを必要とするものの、高性能ではないものに対してはうまく機能しましたが、クロック速度が同じ時間のIntelチップよりはるかに低かったことがわかります。より多くのスレッドのためにコアの一部を複製すると、追加の熱が蓄積されます。 Sunの新しいチップと現在のOracleは、特定のコアの一部またはすべての他のスレッドを動的にオフにして、単一のスレッドタスクに高いパフォーマンスを提供する機能を備えています。