2012-06-07 10 views
7

私は、BIOSでハイパースレッディングを無効にすると、私のマルチスレッド計算のいくつかが速く実行されることに気付きました。HyperTreadingとProcessorAffinityの変更を無効にしますか?

Iはまた、I、プログラム(論理)CPUを無効にすることができることを学んだ

:Sの現在のプロセスのプロセッサアフィニティを変更することによって、例えば、このようなC#で:

// using System.Diagnostics; 
var current = Process.GetCurrentProcess(); 
var affinity = current.ProcessorAffinity.ToInt32(); 
current.ProcessorAffinity = new IntPtr(affinity & 0x5555); 

少なくともパフォーマンスの点からプロセッサアフィニティを変更して2番目(論理)のCPUをすべて無効にすると、ハイパースレッディングを無効にするのと同じ効果が得られますか?

+1

うーん、重要な問題は、あなたのソフトウェアと一緒にあなたの開発マシンを出荷するつもりですか? –

+2

別の考慮事項は、オペレーティング・システム・プロセスかもしれません。 BIOSでハイパースレッディングを無効にし、ソフトウェアがすべてのコアを使用しようとすると、オペレーティングシステム(または他のバックグラウンド)プロセスが実行しようとすると、プロセッサアクセス用のソフトウェアと競合します。ベスト・ベットは、両方のオプションをベンチマークして試してみて、プロセス時間にどのような違いがあるかを確認することです。その違いは、ハイパースレッディングを無効にしないことを容易にするために重要ではないかもしれない。注記:ハードウェア制御がない場合は、ハイパースレッディングのない専用コアを搭載したAMDプロセッサを確認してください。 –

+0

ありがとう、クリス、非常に役に立つ答え。標準的なユーザー環境でオプションのいずれかが真の違いを生むかどうかを確認するために、さらにベンチマークを行います。 –

答えて

2

NUMA APIを利用したり、CPUID命令でCPUトポロジを手動で検出したりすることはできます...しかし、最良の解決策はいくつかの正常なデフォルトを行い、エンドユーザがスレッド設定を調整できるようにすることです。特定のハードウェアをターゲットにしていない限り、論理的または物理的なコア、ハイパースレッディング、シングル/マルチソケットシステム、キャッシュおよびメモリトポロジなど、処理できるシナリオはかなりあります。

+0

ありがとう、snemarch。 [NUMA](http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access)について知りたいことは面白かったですが、これは私にとって初めてのことでした。あなたは間違いないでしょうが、一般的な解決法を提供し、エンドユーザにパフォーマンスの調整を任せておくのがおそらく最良です。しかし、主な視点から、私の元の質問には「はい、いいえ」という答えはありませんか? –

+0

あなたのコードと実行するハードウェアの性質によって異なります:) - コードが実行ユニットと戦い、HTコアで実行されていない場合(必ずしも2番目になる必要はありません) 。しかし、P4、Core2とAMDが何をしているのかにはかなりの違いがあります。 – snemarch

関連する問題