禁用超线程与更改ProcessorAffinity?

时间:2012-06-07 11:21:55

标签: c# performance affinity hyperthreading

我注意到如果我在BIOS中禁用超线程,我的多线程计算会运行得更快。

我还了解到,我可以通过修改当前进程的处理器关联来以编程方式禁用(逻辑)CPU:例如,在C#中这样:

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

至少从性能的角度来看,通过改变处理器亲和性来禁用每秒(逻辑)CPU与完全禁用超线程具有相同的效果吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用NUMA API,或使用CPUID指令手动发现CPU拓扑......但是IMHO的最佳解决方案是做一些理智的默认设置,并让最终用户调整线程设置。除非您有特定的硬件目标,否则可能需要处理多种情况 - 逻辑与物理内核,超线程与否,单插槽与多插槽系统,缓存和内存拓扑。