我有 Intel i7-2600K 四核,在 Ubuntu 12.04 上启用了超线程。我知道我可以用 找出我在 Python 中有多少个内核import multiprocessing; multiprocessing.cpu_count()
,但这给了我 8 个内核,因为我在 4 个物理内核上启用了超线程。我很想知道我有多少物理内核。有没有办法在 Python 中做到这一点?或者,有没有办法在 Python 中找出是否启用了超线程?预先感谢您的帮助!
4 回答
要获取 mac 上的超线程信息,可以使用:
os.popen('sysctl hw').readlines()[1:20]
并将该'hw.activecpu'
值与该'hw.physicalcpu'
值进行比较,前者是包括超线程在内的cpu数量。或者您可以只'hw.physicalcpu'
与从返回的值进行比较multiprocessing.cpu_count()
。
在 linux 上,您可以使用以下方法执行类似操作:
os.popen('lscpu').readlines()
'Socket(s)'
并将该值乘以该'Core(s) per socket'
值以获得物理cpu的数量。同样,您可以对照multiprocessing.cpu_count()
.
我不使用 Windows,所以我无法帮助你,但似乎其他人在这个方向上有一些想法
可以在此处找到与此相关的示例hardware_info()。
根据http://archive.richweb.com/cpu_info,确定一个 cpu 超线程有点复杂,但仍然有用。
请注意,该方法是特定于 linux 的。
在 Windows 上,要查看是否启用了超线程,您可以使用pywin32做一些 WMI 魔术:
from __future__ import print_function
from win32com.client import GetObject
winmgmts_root = GetObject("winmgmts:root\cimv2")
cpus = winmgmts_root.ExecQuery("Select * from Win32_Processor")
for cpu in cpus:
print('on "{}", hyperthreading is '.format(cpu.DeviceID), end='')
if cpu.NumberOfCores < cpu.NumberOfLogicalProcessors:
print('active')
else:
print('inactive')
在我的机器上,输出是:
在“CPU0”上,超线程处于活动状态
在 msdn 上查看更多信息,描述可以从 Win32_Processor 类中获取的内容。
在 Windows 上,要查看是否启用了超线程,您可以使用 pywin32 做一些 WMI 魔术:
错误观念!在我的 Core2Due(没有任何过度刺激)上,它给出了相同的输出:
<on "CPU0", hyperthreading is active>
我认为您必须将代码中的字符串更改为:
if cpu.NumberOfCores < cpu.NumberOfLogicalProcessors
(没有LowerOrEqual 只是Lower)