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
Trả lời
Theo http://archive.richweb.com/cpu_info, việc xác định siêu phân luồng CPU phức tạp một chút, nhưng vẫn hữu ích.
Lưu ý rằng phương pháp này là đặc trưng cho Linux.
OK. Cảm ơn bạn! Liên kết – Ray
bị hỏng. – user1938107
Để 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)'
và '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().
lscpu -p cho đầu ra được phân tách bằng dấu phẩy – edW
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.
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)
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
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