プログラマーがハイパースレッディングをオフにしたい理由は何ですか?


13

私の会社は新しいコンピューターを購入して、古い2GB Windows XPマシンを置き換えました。私のチームの誰かが、ハイパースレッディングが無効になっていることに気付き、再起動して電源を入れるように全員に指示しました。ハイパースレッディングが無効になっているマシンでプログラミングすることには利点がありますか?


1
Core i5やi7など、Intel CPUのどのモデルを使用していますか?
JBキング

@JBK良い質問です、私にはわかりません、私はそれらのマシンの1つを自分で持っていません。
ポップス

古いPentium 4ノートブックで、熱とファンのノイズを減らし、バッテリーを数分持続させるため。それは古代の歴史のものであるべきであり、あなたの場合には適用すべきではないので、答えでありません。
Steve314

LucasartsゲームのGrim Fandangoでは、ハイパースレッディングを使用して実行すると、サウンドエンジンが競合状態に陥りました。

回答:


14

はい、HTが無効になっているマシンで実行するとパフォーマンスが向上するアプリを開発しました。

何が起こったのか、元のコードはハイパースレッドマシンで実行するとスレッドの2倍の数を作成します(これはHTの要点の1つであると思われます)。ただし、これらのスレッドのスループットは、スレッドで使用可能なキャッシュの量に非常に敏感でした。一定量のキャッシュを求めて2倍の数のスレッドが競合するため、スレッドごとに使用可能なキャッシュが低すぎてスラッシングが発生しました:より多くのキャッシュミスがロードされ、メインメモリアクセスがより多くロードされ、スレッドあたりのスレッド数を減らし、スレッドごとのキャッシュを増やします(HTを無効にしたマシンでアプリを実行した場合に得られるものです)。

最終的な修正は、作成するスレッドの数を決定するときに、アプリがHWプラットフォームをより良くチェックし、スレッドごとに必要と見なされるキャッシュサイズとキャッシュ量を考慮することでした。いずれにせよ、CPUの次の世代でこの問題はすぐに解消され、キャッシュサイズが2倍になりました(そして実際にHTからわずかなメリットが見られるようになりました)。ただし、エピソード全体では、SWが実行されたプラットフォームでHTを常に無効にすることを推奨するという長続きする遺産が残っており、「マシンでHTが有効になっていないということは?」(基本的な問題は、ほとんどのオタクでない人が単にHTが実際に何であるかを理解していないことだと思います。)


11

技術的な詳細は知りませんが、明らかにアプリ(またはOS)がハイパースレッディング用に最適化されていない場合、ハイパースレッディングは実際にパフォーマンスを低下させる可能性があります。

Intelでさえ、この場合はオフにすることをお勧めします。

次のデスクトップオペレーティングシステムは、ハイパースレッディングテクノロジでの使用を推奨していません。次のデスクトップオペレーティングシステムのいずれかを使用している場合、システムBIOSセットアッププログラムでハイパースレッディングテクノロジーを無効にすることをお勧めします。[...]

(出典:http : //www.intel.com/support/processors/sb/CS-017343.htm

そのため、製造業者(または供給業者)が注意したかったのかもしれません。


ハイパースレッディングが無効になっているときよりも一部のゲームの実行を遅くすることも知られています。
クライム

4
彼らが職場でプレイされるゲームのパフォーマンスについて懸念している場合、それは興味深いでしょう。
-Dietbuddha

マルチコアシステムでは、2つのスレッドが同じコア上の2つのハイパースレッドに割り当てられ、他のすべてのコアをアイドル状態にして、各スレッドを異なるコアに配置するよりもパフォーマンスが大幅に低下します。オペレーティングシステムでは、同じコア上の異なるコアと異なるハイパースレッド間の差...を自覚するまで
Steve314

1
@ Steve314:Windows2000の場合は確かにそうでした(実行している場合はHTを無効にすることは間違いなく良い考えです)が、Windows XPはHTに対応しているはずです(例:download.microsoft.com/download/5/7/ 7 /…)そしてそのようなtrapに陥らない。同様のロジックがカーネルのあるバージョンからLinuxに組み込まれたと思います。
ティムデイ

6

おそらく、OEMは保守的でした。OEMは、高度な機能(HT、No-Executeビット、vtなど)を無効にして出荷することがよくあります。その理由は、いくつかのまれな状況によってこれらの設定が失敗する可能性があり、実際に機能を必要とするユーザーは同じように簡単に有効にできるからです。

また、OSのいくつかのまれなバグにより、一部の機能が有効になっている場合に潜在的なセキュリティの問題が発生します。たとえば、仮想化技術にはかつてこのような問題がありました。したがって、保守的なのはベンダーだけです。

ハイパースレッディングは一般に、プログラミングマシンなどの対話型デスクトップに役立ちます。ただし、HTを使用しないサーバーでアプリを実行する場合は、この機能を無効にしたい人もいるかもしれません。潜在的なハードウェアの違いを減らすためです。


2
これはほとんどの場合、HTがオフになっているマシンに当てはまります。互換性を最大限に高め、奇妙なサポートコールの洪水からベンダーを救います。
パトリックヒューズ

5

ハイパースレッディングは、CPUに新しいコアを追加しません。コアごとに1つの算術/論理ユニット、1つの浮動小数点ユニット(...)がまだあります。したがって、非常に異なることを行う複数のスレッド/プロセスがある場合、HTTはパフォーマンスを改善できます。しかし、多かれ少なかれ同じことを実行する複数のスレッドがある場合(数の多いアプリケーションでは珍しくありません)、実際にはHTTのパフォーマンスが著しく低下する可能性があります。


2

多分、大規模なマルチスレッドコードのキャッシュコヒーレンスの問題でしょうか?個別のCPUキャッシュがある場合、2つのスレッドが同じデータをキャッシュし、異なる値で同時に変更することは理論的には可能です。CPUとメインメモリ(L2またはL3のいずれか)の間のある時点で統合キャッシュを使用している場合、おそらくこれを防ぐメカニズムが実装されていますが、キャッシュが小さいローエンドのCPUではそうではないかもしれません。

あるいは、サポートしていないチップでハイパースレッディングを有効にすると、POST中にコードがスローされる可能性があります。そのため、BIOSサプライヤはシステムにどのようなCPUが搭載されているかわからないため、そのままにしておきます。


私の推測-この一貫性の問題を解決するためのメカニズムはありますが、パフォーマンスが大幅に低下する可能性があります。IIRC、メモリの特定のページをキャッシュページに自由にロードすることはできません。通常、this-address-maps-to-one-of-the-the-few-pagesメカニズムがあります。たぶん、2つのスレッドがいくつかのキャッシュページをめぐって戦い、残りを未使用のままにしておくことは可能でしょうか?(おそらくマルチコアでも、おそらくリスクは低いでしょう)。
Steve314

0

開発者のマシンでハイパースレッディングをオフにしない理由の1つは、いくつかの微妙なマルチスレッドのバグを隠す可能性があることです。しかし、これはシングルコアシングルプロセッサマシンにのみ実際に適用されます。マルチコアは、テスト中に、もしあれば、より多くのマルチスレッドのバグを明らかにします。

OTOH、ハイパースレッディングがデフォルトで無効になっているシングルコアプロセッサが表示されるとは思えません。私の投票はSleskesの回答にあります。


0

古いソフトウェアの多くはシングルコアマシンで記述されており、マルチコアマシンで実行するときにバグがあった可能性があります。おそらく、この命令は「これはマルチコアマシンでは機能しません」と言うことを意図していたのでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.