web-dev-qa-db-ja.com

ハイパースレッディングのパフォーマンスへの影響

私はちょうど Heise Onlineの記事 (表を見てください。残りはドイツ語です)を読んだだけです。芯。つまりBIOSでHTを無効にすると、シングルスレッドアプリはわずかに速く実行されます。

これは本当ですか、それとも測定誤差ですか?誰かが同じことを主張するベンチマークに関する情報源を持っていますか?

6
Bonita Montero

可能性が高い測定エラーではありません。実際、これはゲームのパフォーマンスに関する永遠の議論です。なぜなら、それらは通常、最大量のシングルコアパフォーマンスを持つように設計されているからです。このIntelの記事によると Intelの記事 ハイパースレッディングは次のとおりです。

Intelのハイパースレッディングテクノロジーにより、1つの物理プロセッサパッケージを、オペレーティングシステム内の2つの個別の論理プロセッサとして認識できます。ハイパースレッディングテクノロジー対応のプロセッサリソースは、リソースの大部分を複製、タグ付け、または共有します。リソースを共有することで、プロセッサをより効率的に使用して、単一のプロセッサパッケージと比較して、ダイサイズが5%未満になり、消費電力が大幅に増加します。ただし、ハイパースレッディングテクノロジでは、すべてのプロセッサリソースが複製されるマルチプロセッシングと同等のパフォーマンスを期待できません。

表示した表では、Cinebenchがプロセッサの1つのコアをテストしています。つまり、HT(ハイパースレッディング)は、1つの物理コア(テストで評価されるコア)に対して2つの仮想コアを有効にします。テストが分割する必要のない単一のプロセスの起動に基づいている場合、2つのコア間でリソースを共有すると、テストが無効になったときにアクティブになるときに発生するバランスが発生しないため、テスト結果が低下します(WindowsとCinebenchは、シングルプロセッサ)。

別のテスト Tom's Hardware を追加して、表示したテーブル(Cinebench R11.5)と比較する場合:

そしてマルチスレッド:

シングルスレッドパフォーマンスの結果は、soで、ページに表示した結果と異なりません。実行状態が異なる2つの論理プロセッサは、システムバスやキャッシュなどのリソースを共有するため、常にタスクを並列化できず、時々発生する可能性がありますスレッドのストールこれで言及 記事 つまり、シングルスレッドストレステストでは、リソース共有がいくつかのスレッドをエンキューする傾向があり、パフォーマンスがわずかに低下する可能性があります。

overclock.net の記事で、さまざまなゲームのさまざまなシナリオがどのようにパフォーマンスに悪影響を与えているかを確認することもできます。これは「HTを無効にするとシングルスレッドのパフォーマンスが向上する」と解釈する必要があるとは思いませんが、「ゲームは最大4コアに最適化されている」または「HTを利用していない」と解釈します。最初の仮定は this のようないくつかの記事を読んで検証できます。これは、i3のシングルコアパフォーマンスが、HTが有効になっている場合に、i7と比較してパフォーマンスがどのように向上するかを示しています。

要約すると、HyperThreadingを無効にしても、シングルスレッドのパフォーマンスに対する改善は最小限である小さなケースがあることがわかりましたが、全体的な費用対効果比では、HyperThreadingを無効にするとは言えません。 OSおよびそれがHTアーキテクチャ用に設計されたソフトウェアに関する限り、それを無効にする価値はありません。

6
jgorostegui

はい、それは明白なはずです。 HTを有効にすると、コアの数が2倍になります。

これは、ほとんどのプログラムが十分にマルチスレッド化されていないことに基づいて、より多くの並列化ができるように設計されています。ただし、プログラムを完全にマルチスレッド化すると、リソースがオーバーコミットされ、スレッドごとのオーバーヘッドが増えるため、パフォーマンスが低下します。ただし、これがどれほど小さい場合でも、アプリケーションが任意の数のコアおよびプロセッサ上で100%のCPUを使用できる場合、HTを有効にすると、パフォーマンスが約2〜3%低下します。

孤立したシングルスレッドプログラムの場合、プログラム自体はリソースを使いすぎないため問題ではないように見えますが、OSは余分なコアがあり、リソースをオーバーコミットする可能性があると考えていることを忘れないでください。未使用のコアがある場合でも、スレッドを最適に配置せずに単一の実際のコアにロックしないスケジューラーによって引き起こされるオーバーヘッドを測定できます。

これらの観察は、10年以上にわたるリアルタイムソフトウェア開発とベンチマークに基づいています。システムのパフォーマンスを最大化しようとすると、非常に小さいものの、明らかに観察可能な違いがあります。

2
Itai

ベンチマークはありませんが、以下に基づいて、おそらくそれは真実です。

「ハイパースレッディング」に関するウィキペディアの記事から:

...ただし、プロセッサの完全な注意を必要とする2つのプログラムを実行している場合、ハイパースレッディングテクノロジーがオンになっていると、実際には片方または両方のプログラムがわずかに遅くなるように見えることがあります。 これは、Pentium 4の再生システムが貴重な実行リソースを拘束し、2つのプログラム間でプロセッサリソースを均等化するためです。これにより、実行時間が異なります。

これは、SMTが無効になっている場合は当てはまりません。OSは、ハードウェアスレッドではなく、コア間でスレッドを分散します。

最新のIntel(およびAMD)CPUは、「 投機的実行 」を実行します。実際の実行が追いつくと、現在の命令ポインターの前に実際に命令をフェッチして事前実行し、結果を準備します。

予期しない分岐や割り込みのようなものは、CPUがその推測を捨て、最初からやり直さなければならない原因となり、SMTはそれが発生する可能性のある状況をさらに導入するようです。分岐したり、多くの条件を処理したりしない「ストレートタスク」(つまり、GPUっぽいタスク)の場合は、おそらく利点があります。

0
LawrenceC

HTを有効にすると、CPUは2つの論理CPUに分割され、両方のCPUは元のシングルコアよりもかなり低速ですが、合計電力は100%を超えます。 Pentium 4日間で、1つのCPUコアを約55%高速な2つの論理コアに分割できます。ハイパースレッディングがコアアーキテクチャに追加されたため、55%を超えています。

問題は、オペレーティングシステムが論理コアを物理コアとして扱う傾向があるため、同じCPUコアで優先度の高いタスクを優先度の低いタスクと一緒に実行できることです。優先度の違いが原因ではないはずのスレッドとタスクの両方が、CPUに同等の注意を向けています。ベンチマークを実行すると、OSは論理コアで優先度の低いタスクをスケジュールし、ベンチマークプログラムの速度を低下させる可能性があります。もちろん、1つの論理コアがアイドル状態になると、HTは事実上無効になり、残りのコアは100%の速度に戻ります。

CPUを多用するスクリーンセーバーを備えたビジーなサーバーを想像してください。スクリーンセーバーがオンになり、低い優先度に設定されていても、CPUコアが65%高速な2つの部分に分割されます。現在、サーバーはCPUコアの65%しか使用できません。

0
Alex Cannon