我正在尝试使用跨平台方法检测机器上非超线程内核的数量。
Multiprocessing 的cpu_count只检测处理器总数,我可以在 Linux 机器上 grep /proc/cpuinfo 找到答案。但是,我正在寻找 Windows 解决方案。
这个新闻组线程有点帮助,但我仍然没有找到答案。
平台独立且在 python 标准库中:
psutil.cpu_count(逻辑=假)
您可以使用 Tim Golden 的 WMI 绑定来访问有关 Windows 上 CPU 的 wmi 信息。请参阅Tim 的 wmi 模块食谱。您可能想要使用Win32_Processor
该类 - 请参阅
Microsoft 文档。
请注意,在备注部分中,Microsoft 文档指出:
要确定是否为处理器启用了超线程,请比较 NumberOfLogicalProcessors 和 NumberOfCores。如果在 BIOS 中为处理器启用了超线程,则 NumberOfCores 小于 NumberOfLogicalProcessors。例如,包含两个启用超线程的处理器的双处理器系统可以运行四个线程或程序或同时运行。在这种情况下,NumberOfCores 为 2,NumberOfLogicalProcessors 为 4。
Dag Wieer 的/proc/cpuinfo
博客展示了一种从Linux上提取超线程信息的方法。
我认为,如果第一行和第二行的输出
cat /proc/cpuinfo | egrep 'physical|processor' | grep -v sizes | \
tail -n2 | cut -d : -f 2`
不同的是,启用了超线程。
对于独立于平台的方法,请参阅 python 绑定到 hwloc:
#!/usr/bin/env python
import hwloc
topology = hwloc.Topology()
topology.load()
print topology.get_nbobjs_by_type(hwloc.OBJ_CORE)
hwloc 旨在跨操作系统和体系结构移植。