我已经注意到,如果在BIOS中禁用了超线程,则我的多个多线程计算运行速度会更快。

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

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

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

最佳答案

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

关于c# - 禁用超线程还是更改ProcessorAffinity?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10930822/

10-12 20:17