Python如何查看超线程是否已启用

13

我有一台搭载 Ubuntu 12.04 的 Intel i7-2600K 四核心处理器,并启用了超线程技术。我知道可以通过 Python 中的 import multiprocessing; multiprocessing.cpu_count() 命令查看我的 CPU 核心数,但是由于超线程技术已经在四个物理核心上启用,因此这个命令返回的结果是 8。我更想知道我实际上拥有多少个物理核心。是否有办法用 Python 找到这个信息?或者是否有办法在 Python 中找出超线程技术是否被启用?非常感谢您的帮助!


你使用的是Linux还是Windows操作系统?答案会不同,我认为不存在一个平台无关的解决方案。 - pyCthon
4个回答

8
要在 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)' 值和 '每个套接字的核心数' 值相乘,以获取物理 CPU 的数量。同样,您可以将此数字与 multiprocessing.cpu_count() 进行比较。

我不使用 Windows,所以无法帮助您,但看起来其他人在这个方向上有一些想法。

相关示例可以在此处找到:hardware_info()


lscpu -p 给出逗号分隔的输出。 - JayS

3

好的,那很有帮助。谢谢! - Ray

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类中获取什么。

0
在Windows上,要查看是否启用了超线程,可以使用pywin32中的一些WMI魔法来实现。 错误的想法! 在我的Core2Due上(没有任何超线程),它会给出相同的输出。
<on "CPU0", hyperthreading is active>

我认为你必须在代码中更改字符串为:

if cpu.NumberOfCores < cpu.NumberOfLogicalProcessors

(不是LowerOrEqual,而是Lower)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接