12

我有 Intel i7-2600K 四核,在 Ubuntu 12.04 上启用了超线程。我知道我可以用 找出我在 Python 中有多少个内核import multiprocessing; multiprocessing.cpu_count(),但这给了我 8 个内核,因为我在 4 个物理内核上启用了超线程。我很想知道我有多少物理内核。有没有办法在 Python 中做到这一点?或者,有没有办法在 Python 中找出是否启用了超线程?预先感谢您的帮助!

4

4 回答 4

7

要获取 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()

于 2013-03-01T02:00:08.717 回答
3

根据http://archive.richweb.com/cpu_info,确定一个 cpu 超线程有点复杂,但仍然有用。

请注意,该方法是特定于 linux 的。

于 2012-10-15T19:25:10.440 回答
1

在 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 类中获取的内容。

于 2013-09-27T19:01:45.857 回答
0

在 Windows 上,要查看是否启用了超线程,您可以使用 pywin32 做一些 WMI 魔术:

错误观念!在我的 Core2Due(没有任何过度刺激)上,它给出了相同的输出:

<on "CPU0", hyperthreading is active>

我认为您必须将代码中的字符串更改为:

if cpu.NumberOfCores < cpu.NumberOfLogicalProcessors

(没有LowerOrEqual 只是Lower)

于 2015-12-01T05:29:44.277 回答