7

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

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

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

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

4

1 回答 1

2

您可以尝试使用 NUMA API,或使用 CPUID 指令手动发现 CPU 拓扑......但恕我直言,最好的解决方案是做一些合理的默认设置,并让最终用户调整线程设置。除非您有特定的硬件目标,否则有相当多的可能场景需要处理——逻辑与物理内核、超线程与否、单路与多路系统、缓存和内存拓扑。

于 2012-06-07T14:10:05.603 回答