2012-10-15 14 views
9

Ho un quadcore Intel i7-2600K, con hyperthreading abilitato su Ubuntu 12.04. So che posso scoprire quanti core ho in Python con import multiprocessing; multiprocessing.cpu_count(), ma questo mi dà 8 perché ho l'hyperthreading abilitato su 4 core fisici. Sono piuttosto interessato a scoprire quanti core fisici ho. C'è un modo per farlo in Python? In alternativa, c'è un modo per scoprire in Python se l'hyperthreading è abilitato? Grazie in anticipo per il vostro aiuto!python come scoprire se l'hyperthreading è abilitato

+1

possibile duplicato [Python: soluzione multipiattaforma per rilevare le CPU fisiche non HT?] (Http: // StackOverflow.it/questions/10152173/python-cross-platform-solution-to-detect-physical-non-ht-cpus) – Blender

+0

sei su linux o windows? La risposta sarà diversa, non credo esista una soluzione indipendente dalla piattaforma – pyCthon

risposta

6

per ottenere informazioni hyperthreading su Mac, è possibile utilizzare:

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

e confrontare il valore 'hw.activecpu' al valore 'hw.physicalcpu', il primo è il numero di CPU compreso hyperthreading. O potresti semplicemente confrontare 'hw.physicalcpu' con il valore restituito da multiprocessing.cpu_count().

su Linux si poteva fare qualcosa di simile utilizzando:

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

e moltiplicare il valore 'Socket(s)' e il valore 'Core(s) per socket' per ottenere il numero di CPU fisiche. Ancora una volta, è possibile controllare questo numero con multiprocessing.cpu_count().

Non uso di Windows, quindi non posso fare lì, ma sembra che altri hanno alcune idee in questa direzione

Un esempio relativo a questo può essere trovato qui hardware_info().

+0

lscpu -p fornisce l'output separato da virgole – edW

1

su Windows, per vedere se l'hyperthreading è enbabled si può fare un po 'di magia WMI con pywin32:

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') 

Sulla mia macchina, l'output è:

su "CPU0", hyperthreading è attivo

Vedere altro info at msdn che descrive cosa può essere prelevato dalla classe Win32_Processor.

0

su Windows, per vedere se l'hyperthreading è enbabled si può fare un po 'di magia WMI con pywin32:

idea sbagliata! Sul mio Core2Due (senza alcun hyperthrating) Dà stessa uscita:

<on "CPU0", hyperthreading is active> 

Penso che è necessario modificare stringa nel codice:

(senza LowerOrEqual appena inferiore)

Problemi correlati