私の会社は新しいコンピューターを購入して、古い2GB Windows XPマシンを置き換えました。私のチームの誰かが、ハイパースレッディングが無効になっていることに気付き、再起動して電源を入れるように全員に指示しました。ハイパースレッディングが無効になっているマシンでプログラミングすることには利点がありますか?
私の会社は新しいコンピューターを購入して、古い2GB Windows XPマシンを置き換えました。私のチームの誰かが、ハイパースレッディングが無効になっていることに気付き、再起動して電源を入れるように全員に指示しました。ハイパースレッディングが無効になっているマシンでプログラミングすることには利点がありますか?
回答:
はい、HTが無効になっているマシンで実行するとパフォーマンスが向上するアプリを開発しました。
何が起こったのか、元のコードはハイパースレッドマシンで実行するとスレッドの2倍の数を作成します(これはHTの要点の1つであると思われます)。ただし、これらのスレッドのスループットは、スレッドで使用可能なキャッシュの量に非常に敏感でした。一定量のキャッシュを求めて2倍の数のスレッドが競合するため、スレッドごとに使用可能なキャッシュが低すぎてスラッシングが発生しました:より多くのキャッシュミスがロードされ、メインメモリアクセスがより多くロードされ、スレッドあたりのスレッド数を減らし、スレッドごとのキャッシュを増やします(HTを無効にしたマシンでアプリを実行した場合に得られるものです)。
最終的な修正は、作成するスレッドの数を決定するときに、アプリがHWプラットフォームをより良くチェックし、スレッドごとに必要と見なされるキャッシュサイズとキャッシュ量を考慮することでした。いずれにせよ、CPUの次の世代でこの問題はすぐに解消され、キャッシュサイズが2倍になりました(そして実際にHTからわずかなメリットが見られるようになりました)。ただし、エピソード全体では、SWが実行されたプラットフォームでHTを常に無効にすることを推奨するという長続きする遺産が残っており、「マシンでHTが有効になっていないということは?」(基本的な問題は、ほとんどのオタクでない人が単にHTが実際に何であるかを理解していないことだと思います。)
技術的な詳細は知りませんが、明らかにアプリ(またはOS)がハイパースレッディング用に最適化されていない場合、ハイパースレッディングは実際にパフォーマンスを低下させる可能性があります。
Intelでさえ、この場合はオフにすることをお勧めします。
次のデスクトップオペレーティングシステムは、ハイパースレッディングテクノロジでの使用を推奨していません。次のデスクトップオペレーティングシステムのいずれかを使用している場合、システムBIOSセットアッププログラムでハイパースレッディングテクノロジーを無効にすることをお勧めします。[...]
(出典:http : //www.intel.com/support/processors/sb/CS-017343.htm)
そのため、製造業者(または供給業者)が注意したかったのかもしれません。
おそらく、OEMは保守的でした。OEMは、高度な機能(HT、No-Executeビット、vtなど)を無効にして出荷することがよくあります。その理由は、いくつかのまれな状況によってこれらの設定が失敗する可能性があり、実際に機能を必要とするユーザーは同じように簡単に有効にできるからです。
また、OSのいくつかのまれなバグにより、一部の機能が有効になっている場合に潜在的なセキュリティの問題が発生します。たとえば、仮想化技術にはかつてこのような問題がありました。したがって、保守的なのはベンダーだけです。
ハイパースレッディングは一般に、プログラミングマシンなどの対話型デスクトップに役立ちます。ただし、HTを使用しないサーバーでアプリを実行する場合は、この機能を無効にしたい人もいるかもしれません。潜在的なハードウェアの違いを減らすためです。
多分、大規模なマルチスレッドコードのキャッシュコヒーレンスの問題でしょうか?個別のCPUキャッシュがある場合、2つのスレッドが同じデータをキャッシュし、異なる値で同時に変更することは理論的には可能です。CPUとメインメモリ(L2またはL3のいずれか)の間のある時点で統合キャッシュを使用している場合、おそらくこれを防ぐメカニズムが実装されていますが、キャッシュが小さいローエンドのCPUではそうではないかもしれません。
あるいは、サポートしていないチップでハイパースレッディングを有効にすると、POST中にコードがスローされる可能性があります。そのため、BIOSサプライヤはシステムにどのようなCPUが搭載されているかわからないため、そのままにしておきます。