web-dev-qa-db-ja.com

ハイパースレッドはどのくらいスピードアップしますか? (理論的には)

ハイパースレッドCPUによる理論的なスピードアップは何なのかと思います。 100%の並列化、および0の通信を想定すると、2つのCPUで速度が2向上します。ハイパースレッドのCPUはどうでしょうか。

38
Mikhail

他の人が言ったように、これは完全にタスクに依存します。

これを説明するために、実際のベンチマークを見てみましょう。

enter image description here

これは私の修士論文から抜粋したものです(現在オンラインでは利用できません)。

これは相対速度向上を示しています1 文字列照合アルゴリズム(すべての色は異なるアルゴリズムです)。アルゴリズムは、ハイパースレッディングを備えた2つのIntel Xeon X5550クアッドコアプロセッサで実行されました。つまり、合計8つのコアがあり、それぞれが2つのハードウェアスレッド(=「ハイパースレッド」)を実行できます。したがって、ベンチマークでは、最大16スレッド(この構成で実行できる同時スレッドの最大数)でスピードアップをテストします。

4つのアルゴリズムのうち2つ(青とグレー)は、全範囲にわたってほぼ線形にスケーリングします。つまり、ハイパースレッディングの恩恵を受けます。

他の2つのアルゴリズム(赤と緑、色覚障害者にとっては残念な選択)は、最大8スレッドまで線形にスケーリングします。その後、彼らは停滞する。これは、これらのアルゴリズムがハイパースレッディングの恩恵を受けていないことを明確に示しています。

理由?この特定のケースでは、それはメモリの負荷です。最初の2つのアルゴリズムは計算のためにより多くのメモリを必要とし、メインメモリバスのパフォーマンスによって制約されます。つまり、一方のハードウェアスレッドがメモリを待機している間、もう一方は実行を継続できます。ハードウェアスレッドの主要なユースケース。

他のアルゴリズムはより少ないメモリを必要とし、バスを待つ必要はありません。それらはほぼ完全に計算限界であり、整数演算のみを使用します(実際にはビット演算)。したがって、並列実行の可能性はなく、並列命令パイプラインのメリットもありません。


1 つまりスピードアップ係数4は、アルゴリズムが1つのスレッドのみで実行された場合の4倍の速度で実行されることを意味します。したがって、定義により、1つのスレッドで実行されるすべてのアルゴリズムの相対スピードアップ係数は1です。

59
Konrad Rudolph

問題は、それがタスクに依存することです。

ハイパースレッディングの背後にある概念は、基本的に、すべての最近のCPUには複数の実行の問題があるということです。通常、現在はダースに近いです。整数、浮動小数点、SSE/MMX /ストリーミング(現在の名前にかかわらず)に分割されています。

さらに、各ユニットには異なる速度があります。つまり整数演算ユニットが何かを処理するには3サイクルかかる場合がありますが、64ビット浮動小数点除算は7サイクルかかる場合があります。 (これらは何にも基づいていない神話的な数です)。

順不同の実行は、さまざまなユニットをできるだけいっぱいに保つのに多くを助けます。

ただし、単一のタスクがすべての実行ユニットを使用するわけではありません。スレッドを分割することでさえ完全に役立つわけではありません。

したがって、理論は、2番目のCPUがあるふりをすることによってなり、別のスレッドがそれに使用できる可能性がある実行ユニットを使用して、たとえば、オーディオトランスコーディング(98%SSE/MMXのもの)を使用し、intユニットとfloatユニットは完全にいくつかのものを除いてアイドル。

私にとって、これは単一のCPUの世界ではより理にかなっています。2番目のCPUを偽造することで、この偽の2番目のCPUを処理するための追加のコーディングがほとんどない場合でも、スレッドがそのしきい値を簡単に超えることができます。

6/8/12/16 CPUを持つ3/4/6/8コアの世界では、それは役に立ちますか?ダンノ。できるだけ多く?手元のタスクに依存します。

したがって、実際に質問に答えるには、プロセス内のタスク、それが使用している実行ユニット、およびCPUで、2番目の偽のCPUでアイドル/十分に使用されていない実行ユニットに依存します。

計算に関するいくつかの「クラス」は、(漠然と一般的に)利益があると言われています。しかし、厳格な規則はなく、一部のクラスでは、速度が遅くなります。

20
geoffc

geoffcの回答 に追加するいくつかの事例証拠があります。実際には、ハイパースレッディングを備えたCore i7 CPU(4コア)を使用しており、ビデオトランスコーディングで少し遊んでいます。通信と同期は十分ですが、システムを効率的に完全にロードできるほどの並列性があります。

いくつのCPUがタスクに割り当てられているかの経験は、一般に4つのハイパースレッド「追加」コアを使用しており、約1 CPU相当の処理能力に相当します。追加の4つの「ハイパースレッド」コアは、3から4の「実際の」コアと同じくらいの有効な処理能力を追加しました。

すべてのエンコーディングスレッドがCPUの同じリソースを競合する可能性が高いため、これは厳密に公正なテストではありませんが、全体的な処理能力が少なくともわずかに向上したことがわかりました。

本当に役立つかどうかを示す唯一の実際の方法は、ハイパースレッディングを有効および無効にしたシステムでいくつかの異なる整数/浮動小数点/ SSEタイプのテストを同時に実行し、制御された状態で利用可能な処理能力を確認することです環境。

5
Mokubai

他の人が言っているように、CPUとワークロードに大きく依存します。

インテルは言う

インテル®Xeon®プロセッサーで測定されたパフォーマンスMPハイパースレッディングテクノロジーを使用すると、このテクノロジーの一般的なサーバーアプリケーションベンチマークで最大30%のパフォーマンス向上が示されます

(これは私には少し保守的なようです。)

そして、もう1つ長い論文(まだすべてを読んだわけではありません)が ここにさらに数字があります と書かれています。その論文からの興味深い興味深い点の1つは、ハイパースレッディングによって、一部のタスクでシンが遅くなる可能性があることです。

AMDのブルドーザーアーキテクチャは興味深いかもしれません 。彼らは、各コアを実質的に1.5コアと説明しています。これは、パフォーマンスの可能性にどの程度自信があるかに応じて、極端なハイパースレッディングまたは準標準のマルチコアのようなものです。その部分の数字は、コメントが0.5倍から1.5倍高速化することを示唆しています。

最後に、パフォーマンスはオペレーティングシステムにも依存します。 OSは、うまくいけば、プロセスをrealCPUに送信します。CPUになりすましたハイパースレッドよりも優先されます。それ以外の場合、デュアルコアシステムでは、1つのアイドルCPUと、2つのスレッドがスラッシングしている非常にビジーなコアが1つある可能性があります。これはWindows 2000で発生したことを思い出しますが、もちろん、すべての最新のOSは適切に機能します。

3