2012-10-15 33 views
9

Tôi có lõi tứ Intel i7-2600K, với tính năng siêu phân luồng được bật trên Ubuntu 12.04. Tôi biết rằng tôi có thể tìm ra bao nhiêu lõi tôi có trong Python với import multiprocessing; multiprocessing.cpu_count(), nhưng điều đó mang lại cho tôi 8 bởi vì tôi có siêu phân luồng được kích hoạt trên 4 lõi vật lý. Tôi khá hứng thú với việc tìm ra bao nhiêu lõi vật lý mà tôi có. Có cách nào để làm điều đó trong Python? Ngoài ra, có cách nào để tìm hiểu bằng Python cho dù siêu phân luồng có được bật không? Cảm ơn rất nhiều về sự trợ giúp của bạn!python cách tìm hiểu xem siêu phân luồng có được bật không

+1

thể trùng lặp của [Python: Giải pháp đa nền tảng để phát hiện các CPU không phải là HT không?] (Http: // stackoverflow.com/questions/10152173/python-cross-nền tảng-giải pháp-để-phát hiện-vật lý-không-ht-cpus) – Blender

+0

là bạn trên Linux hoặc cửa sổ? Câu trả lời sẽ khác, tôi không nghĩ rằng tồn tại một giải pháp nền tảng độc lập – pyCthon

Trả lời

6

Để có được thông tin hyperthreading trên mac, bạn có thể sử dụng:

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

và so sánh giá trị 'hw.activecpu' với giá trị 'hw.physicalcpu', cựu là số cpu bao gồm hyperthreading. Hoặc bạn chỉ có thể so sánh 'hw.physicalcpu' với giá trị được trả lại từ multiprocessing.cpu_count().

Trên Linux bạn có thể làm một cái gì đó tương tự như sử dụng:

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

và nhân giá trị 'Socket(s)''Core(s) per socket' giá trị để có được số lượng cpu vật lý. Một lần nữa, bạn có thể kiểm tra số này với số multiprocessing.cpu_count().

Tôi không sử dụng Windows, vì vậy tôi không thể giúp bạn ở đó, nhưng nó có vẻ như những người khác có một số ý tưởng theo hướng này

Một ví dụ liên quan đến điều này có thể được tìm thấy ở đây hardware_info().

+0

lscpu -p cho đầu ra được phân tách bằng dấu phẩy – edW

1

Trên cửa sổ, để xem nếu hyperthreading được enbabled bạn có thể làm một số phép thuật WMI với 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') 

Trên máy tính của tôi, đầu ra là:

vào "CPU0", hyperthreading là hoạt động

Xem thêm info at msdn mô tả những gì có thể được tìm nạp từ lớp Win32_Processor.

0

Trên cửa sổ, để xem nếu hyperthreading được enbabled bạn có thể làm một số phép thuật WMI với PyWin32:

ý tưởng sai! On Core2Due của tôi (mà không cần bất kỳ hyperthrating) nó mang lại cho cùng một kết quả:

<on "CPU0", hyperthreading is active> 

Tôi nghĩ rằng bạn phải thay đổi chuỗi trong mã để:

(không LowerOrEqual chỉ thấp hơn)