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


18

一部のBIOSにはCPUのハイパースレッディングを無効にするオプションがありません。Windows7レジストリで無効にする方法はありますか?またはツールまたはソフトウェアですか?

msconfigブートタブ(高度なオプション)とそこでのプロセッサの無効化について知っています。完全なコアまたはハイパースレッドを無効にするかどうか、またはどのように伝えるかはわかりません。

32ビットまたは64ビットのWindows 7

編集:

それがハイパースレッディングを備えたデュアルコア以上であると仮定しましょう。

デバイスマネージャーでは、i5 Intelプロセッサー上の4つのプロセッサーが表示されますが、これらを無効にすることもできません。


5
これは今月の不可能な質問だと思います。
モアブ

あなたは本当にBIOSでそれを無効にすることはできませんか?最新バージョンですか?
KCotreau

2
そのバージョンに関係なく、障害のあるBIOSでよく知られているHP PCです。
モアブ

1
すべてのi5チップが同じように作成されるわけではなく、物理コアが4つあり、ハイパースレッディングが無効になっているものもあれば、コアが2つあり、ハイパースレッディングが有効になっているものもあります-通常、ノートブックはハイパースレッディングを使用し、デスクトップチップはクアッドコアのバリアントである可能性が高くなります。デスクトップまたはノートブックを使用していて、i5モデルを知っていますか?
ダスティンG.

ハイパースレッディングについてはあまり心配しません。P4以降、大きな改善が見られました。最近のパフォーマンスは低下しません。
surfasb

回答:


3

インテルCoreプロセッサーデータシート、第1巻、38ページ:

Intelハイパースレッディングテクノロジー

[...] BIOSを使用してこの機能を有効にする必要があり、オペレーティングシステムのサポートが必要です。

これは、ハイパースレッディングがCPUダイ上の実際の物理ハードウェアであり、ハードウェアレベルでのみ有効化/無効化できるためです。

どのアプリケーションがハイパースレッディングでうまく機能しないかがわかっている場合は、XPがあればStartAffinityなどのツールを使用できます。

Windows 7を使用している場合、startこれを実行できる組み込みコマンドがあります。次のコマンドを使用して、特定のプロセッサアフィニティを持つプロセスを起動します(ここでも、/AFFINITY引数はWindows 7でのみ追加されました)。

start /AFFINITY <mask> "C:\yourprogram.exe" 

<mask>実行するプロセッサの16進マスクで置き換える必要がある場所(プロセッサマスクは、そのアフィニティを有効/無効にする単なるバイナリマスクであるため、00000101はCPU0とCPU2を有効にし、00000010はCPU1のみを有効にします)。

進値を計算するには、いずれかのバイナリマスクを変換し、することができますあなたは(0から始まる)でプログラムを実行するコアのパワーに2の合計を取り、16進数にその値を変換します。

たとえば、4コアシステムがあり、CPU0とCPU2でのみプロセスを実行したい場合、2 0 + 2 2 = 1 + 4 = 5 を追加します。5を16進数に変換します。それをあなたの<mask>。00000101を16進数に変換することもできます。これらのベースの変換方法がわからない場合は、この変換テーブルを使用できます


私はアフィニティを理解していますが、これはハイパースレッドを無効にするのではなく、完全なコアのみを無効にします。OSの内部ではBIOSのみでハイパースレッディングのみを無効にすることは不可能だと思いますが、一部のBIOSにはそのオプションがなく、主にHP pcで、誰かが間違っていることを証明できると期待していました。
モアブ

1
各物理コアは、OSでは2つの論理コアとして表示されます。これらの論理コアのいずれかを無効にすると、命令は2つの論理コアの1つにのみ送信されるため、ハイパースレッディングは事実上無効になります。したがって、ハイパースレッディングは実際には行われません。命令キューは物理コアに直接送信されます。
ブレークスルー

わかりましたが、その1つのコアのハイパースレッディングのみが無効になります。両方とも無効にする必要があります。
モアブ

1
@Moab次に、上記のマスクを使用して、偶数または奇数のコアをすべて有効にして、1つおきに無効にします。したがって、4つの論理コアがある場合は、00000101または16進数で5を16進数マスクとして使用して、CPU0とCPU2のみを有効に設定します。8個の論理コアがある場合、ビットマスクは01010101、または16進数で55(CPU0、2、4、および6のみを有効にする)になります。
ブレークスルー

2
@Moabは、他のすべてのコアを無効にする限り、技術的には重要ではありません。2つの論理コアのすべてのセットが、単一の物理コアのスレッドハンドラーを構成します。
ブレークスルー

2

ハイパースレッディングを無効にすることは、BIOSのみの問題です。

この機能に最適化されていないアプリケーションがあり、パフォーマンスが低下する可能性があるため、ハイパースレッディングを無効にすることを想定していますか?

CPUの番号付けを見ると、物理コアには奇数番号が付けられています。したがって、デュアルコアのHTシステムでは、コア1と3が「実際の」CPUになります。msconfigで2つのコアを選択すると、CPUの1と2が有効になり、物理および論理(HT)CPUがアクティブになります-これは、HTに問題のあるソフトウェアに問題がある場合には役立ちません。


はい。しかし...あなたは、CPUの1と3に設定された親和性にタスクマネージャを使用することができます
ベンフォークト

ダスティンG、それは私が考えたものですが、これに関する記事を見つけることはほぼ不可能です。ありがとう。
モアブ

0

Windowsで最も簡単な方法は、explorer.exeから起動されるすべてのプロセスがアフィニティマスクを継承するため、explorer.exeのアフィニティを変更することです。まだ完璧にはほど遠いですが、少なくともセッションごとに一度だけこれを行います。


プロセスの親和性はハイパースレッディングと同じではないため、これが質問に答えるかどうかはわかりません。
ドクトロライチャード

幸いなことに、物事はあなたが確かかそうでないものに基づいていないが、彼らは(例えば)MSDNで指定されているかmsdn.microsoft.com/en-us/library/windows/desktop/... GetLogicalProcessorInformation物理的/論理的に加工へのプロセスの親和性を与えますプロセッサ(これは正確な方法です)。2論理コアSMT(ハイパースレッディングなど)を使用するハイパースレッディングシステムでは、コア#0はビット0と1、コア#1はアフィニティマスクなどのビット2と3などです(これは経験的な方法です)。あなたは上のあなただけの直感を持っているものをdownvoting避けることができれば、私は感謝される...
E. Attia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.