繁体   English   中英

python如何找出是否启用了超线程

[英]python how to find out whether hyperthreading is enabled

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

要在mac上获取超线程信息,您可以使用:

os.popen('sysctl hw').readlines()[1:20]

并将'hw.activecpu'值与'hw.physicalcpu'值进行比较,前者是包括超线程在内的cpus数。 或者您可以将'hw.physicalcpu'multiprocessing.cpu_count()返回的值进行比较。

在linux上你可以做类似的事情:

os.popen('lscpu').readlines()

并将'Socket(s)'值和'Core(s) per socket' 'Socket(s)'值相乘以获得物理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只是降低)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM