(Intel) ハイパースレッド コアは、(最大で) 2 つの CPU のように機能します。
単一の CPU には一連のリソースがあり、理想的には継続的にビジーですが、実際には、CPU が何らかの外部イベント (通常はメモリの読み取りまたは書き込み) を待機している間、驚くほどアイドル状態になることがよくあります。
別のハードウェア スレッドの追加の状態情報 (たとえば、レジスタの別のコピー + 追加のもの) を追加することにより、「単一の」CPU は、最初のスレッドがブロックされたときに、その注意を他のスレッドの実行に切り替えることができます。(この N 個のハードウェア スレッドを一般化することができ、他のアーキテクチャはこれを行っています。Intel は 2 で終了しました)。
両方のハードウェア スレッドがさまざまなイベントの待機に時間を費やす場合、CPU はハードウェア スレッドに対応する処理を行うことができます。メモリ待機の 40 ナノ秒は長い時間です。したがって、プログラムが大量のメモリをフェッチする場合、両方のハードウェア スレッドが完全に効果的であるように見えると思います。たとえば、ほぼ 2 倍になるはずです。
2 つのハードウェア スレッドが非常にローカルな作業を行っている場合 (たとえば、レジスタだけで集中的な計算を行う場合)、内部待機は最小限になり、単一の CPU は、両方のハードウェア スレッドが作業を生成するのと同じ速さでサービスを提供するのに十分な速度で切り替えることができません。この場合、パフォーマンスが低下します。どこで聞いたか覚えていませんが、ずっと前に聞いたことがあります。このような状況では、正味の効果は、理想化された 2 倍よりも 1.3 倍に近くなります。(SOの聴衆がこれについて私を訂正することを期待しています).
アプリケーションは、現在実行中の部分に応じて、必要に応じて切り替えることができます。次に、さまざまなパフォーマンスが得られます。いくらでもスピードアップできて満足です。