web-dev-qa-db-ja.com

マルチコアDellPCでハイパースレッディングを無効にする

Windows 7Professionalを実行しているDellデスクトップがあります。プロセッサはIntelCoreだと思います i7-26

最近、Linuxクラスターを専門とするコンピューターの専門家が私のデスクトップPCを見ていて、私のマシンには8つのスレッドがあるとコメントしました。つまり、マシンには4つのコアがあります。コアごとに2つのスレッドです。マシンに複数のコアがあることに気づいていませんでした。

マシンに明らかに4つのコアがあることがわかったので、おそらく3つのモデルを同時に実行したいと考えています。3つのコアのそれぞれに1つのモデルがあります。

「モデルごとにコア全体を使用できるようにする」ために、「ハイパースレッディングをオフにする」ことを提案されました。そうでなければ、彼は「半分の速度で動く」と書いた。

私はプログラムRを使用して多くのモデルを実行し、私を助けてくれたコンピューター紳士は、私のRスクリプトファイルの1つが8スレッドのうち7スレッドを使用しているというメッセージを表示したことを指摘しました。したがって、Rファイルがコアごとに2つのスレッドを使用し、3つのコアがハイパースレッディングをオフにしても、私の場合は計算速度が向上しない可能性があります。

ハイパースレッディングをオフにするとRスクリプトの計算速度が上がる場合、どうすればよいですか?

私はインターネットを少し検索し、このフォーラムでこのテーマに関する議論を見つけました。

http://answers.Microsoft.com/en-us/windows/forum/windows_7-performance/disable-hyperthreading-when-windows-7-already/80dd6c15-76b7-4534-b691-3e3a37ffad75

私に関係するそのフォーラムでの1つのコメントは、次のような主張です。

「HTをシャットダウンしたい人にとっての最大の問題は、多くのコンピューターメーカー(HP、Dell)が、コンピューターを購入した人がBIOSオプションでHTをシャットダウンすることを許可していないことです。WindowsはHTを監視しているためです。 HTを処理するかどうかを決定するためにBIOSで設定します。これは、ローギアでスタックし、シフトアップする機能がない場合です。」

私のコンピュータはDellであるため、ハイパースレッディングをオフにできない可能性があります。

スーパーユーザーにもこの投稿があります。

Windows 7レジストリでハイパースレッディングを無効にする

そこでの1つの答えは、16進数を扱うのに特に役立つが複雑であるように思われ、問題のコンピューターはHPでした。それが重要かどうかはわかりません。

ハイパースレッドについては他にもかなりの数の投稿があるようですが、すぐ上の投稿は私が読んだものの私の状況に最も近いものです。

この質問が重複している場合は申し訳ありません。追加情報を提供したり、懸念事項を明確にしたりする必要がある場合は、喜んでそうします。

1
Mark Miller

BIOSにオプションがないのはなぜですか?

デルや友人がこれを無効にするオプションを追加しないことが多い理由は、それが良い考えになることはめったにないからだと思います。平均すると、コンピューターの速度が低下します(または、別の観点から見ると、競合他社のコンピューターは比較的高速になります)。

そうは言っても、いくつかの架空の例を見てみましょう。

HTは何をしますか?

1コア、ハイパースレッディングなし

  • 1つのCPUバウンドプロセスが実行されており、最大速度で実行できます。この速度を1、または100%と呼びましょう
  • 2つのCPUバウンドプロセスが実行されています。 CPUは両方を切り替える必要があります。両方のプロセスの実効速度は約半分になります。 (両方の速度の合計はまだ最初の例と同じです。)
  • 3つのCPUバウンドプロセスが実行されています。 CPUは3つすべてを切り替える必要があります。両方のプロセスの実効速度は約3分の1です。 (両方の速度の合計は同じです(3 x 0.33 = 1)。

2コア、ハイパースレッディングなし

  • 1CPUバウンドプロセス * 0 が実行されており、そのコアの最大速度で実行できます。 (速度100%)(もう一方のコアはアイドル状態です)。
  • 2つのCPUバウンドプロセスが実行されています。どちらもコアの最大速度で実行できます。 (速度200%)
  • 3つのCPUバウンドプロセスが実行されています。通常、3つのタスクが約2/3の効率で実行されます。 (速度の合計はまだ「2」です。余分なオーバーヘッドとキャッシュミスのために少し失うため、およそ2です)。 (速度200%、またはおそらく190%)

現在、ハイパースレッディングを備えたコアです。これらは2つのコアとして機能しますが、2つの完全なコアとしては機能しません。 Intelがハイパースレッディングと定義するものは、時間の経過とともに少し変化しましたが、通常はこれに帰着します。 CPUはメモリからデータをフェッチして計算します。メモリバスを必要としない場合、CPUの2番目の部分は限られた作業を実行できます。すべてのハードウェアが複製されているわけではないため、2つの完全なコアを取得することはできません。ただし、追加のハードウェアが限られている場合(10%?)、平均30%の速度が得られます。 * 1

1コア、-1 CPUバインドプロセスが実行されており、最大速度で実行できます。 (100%)-2つのCPUバウンドプロセスが実行されています。 CPUは両方を切り替える必要があります。ただし、追加のハードウェアがいくつかあります。正味の速度は約30%速くなります(たとえば、シングルコアの速度は133%)

等。

HTの紹介はこれで終わりです。

これらの架空の%は本物ですか?

いいえ。まず、オーバーヘッドが原因で効率が低下します。 (1つのCPUで10個のタスクが実行されるのは、コンテキストスイッチとそのデータのすべてのキャッシュがない1つのタスクよりも遅くなることはありません)。

第二に、説明が複雑になるため、ターボブーストを完全に無視しました。

私の友人はおそらく何を言うつもりでしたか?

次のように4コア8トレッドCPUを見てみましょう。
コア1、CPU 1(実際)
コア1、CPU 2(HT付き)
Core 2、CPU 3(実際)
Core 2、CPU 4(HT付き)
コア3、CPU 5(実数)
コア3、CPU 6(HT付き)
コア4、CPU 7(実際)
コア4、CPU 8(HT付き)

2つのタスクを実行する場合、CPU1とCPU2で両方を実行する必要はありません(実際のコアを共有しているため)。正味の結果は、可能な速度のほぼ半分です。これはあなたの友人が意味したことかもしれません。

本当ですが、心配する必要はないと思います。 Windowsスケジューラは、プロセスを最初にCPU 1,3,5,7に割り当て、次に2,4,6,8に割り当てるのに十分なほどスマートです。



* 0 CPUバウンドプロセスは、CPUによって制限されるプロセスです。プロセスがdiskIOを待機していて、CPUがアイドル状態の場合、まったく異なる結果が得られます。

* 1 それらの数字を一粒の塩で取ってください。それらは正確ではありません。これらは、CPU世代ごと、さらにはCPUモデルごとに異なります。プログラムごとに異なります。また、Intelがハイパースレッディングと呼ぶものは、CPUの初期世代から変更されています。しかし、彼らは大まかな考えを与えます。

3
Hennes