以 Core i9-13900HX 实例讲解CPU概念:物理CPU,内核,逻辑CPU

缘起

复制代码
# 完整代码见:https://github.com/luminousmen/grokking_concurrency/blob/master/Chapter%205/password_cracking_parallel.py

def crack_password_parallel(crypto_hash: str, length: int) -> None:
    """Orchestrate cracking the password between different processes"""
    # getting number of available processors
    num_cores = os.cpu_count()
   。。。

看书的时候看到一行代码加一句注释包含了三个概念:processorcpucore。因为之前没用过 os.cpu_count(),所以一下子有点懵,这个函数到底返回什么,为什么用了三个概念?

在梳理概念的过程中发现很多文章缺乏图,单纯的文字不大好理解。于是以自己电脑的 Core i9-13900HX 处理器为例,进行实例讲解,希望对那些对此也有困惑的人员有所帮助。

物理 CPU/处理器(processor)

定义

安装在主板插槽(socket)上的一个物理元件(物理的意思:看得见,摸得着)。称为:物理 CPU,处理器(processor)。我们平时去买电脑时会问"这台电脑是什么处理器?",其实就是问这台电脑的物理 CPU 是什么?老板可能会回答"这台联想拯救者(Y9000P)电脑的处理器是 Core i9-13900HX "。

实物图

Core i9-13900HX

如上图所示:我的联想拯救者(Y9000P)电脑有 1 个物理 CPU(处理器),型号是 Core i9-13900HX。

物理内核(Physical core)/内核(Cores)

定义

位于 CPU 内部的一个物理元件。称为:物理内核(physical core),内核(core)

实物图

sorry~ 因为核是封装在物理 CPU 内部的,具体长什么样我也不确定,待确定后再补充。

Core i9-13900HX


如上图所示:Core i9-13900HX 是大小核架构:性能核(Performance-core) + 能效核(Efficient-core)。性能核有 8 个,能效核有 16 个,总计:8 + 16 = 24。即一个物理 CPU Core i9-13900HX 有 24 个内核,或者说有"一个物理 CPU Core i9-13900HX 有 24 个物理内核"

逻辑CPU(logical CPUs)/线程(Threads)

定义

一个虚拟元件(虚拟的意思:逻辑上的,看不见,摸不着)。称为:逻辑 CPU(logical CPU),逻辑处理器(processor),逻辑内核(logical core),线程(thread)

Core i9-13900HX

如上图所示:每个性能核(Performance-core)有 2 个线程,能效核(Efficient-core)有 1 个线程,总计:8 x 2 + 16 x 1 = 32 。即 "一个物理 CPU Core i9-13900HX 有 24 个内核,32 个线程",或者说 "一个物理 CPU Core i9-13900HX 有 24 个内核,32 个逻辑 CPU"。

注:

1.这里的"线程"和"编程中多线程的线程"不是同一个概念。

2.编程中有些描述会直接用 CPU 表示 logical CPU,如:

复制代码
# 得到的也是 logial CPUs
multiprocessing.cpu_count()
    Return the number of CPUs in the system.

3.有些文章用 logical cores 表示 logical CPUs,个人觉得这样容易和 physical core 混淆,应该少用 logical cores , 多用 logical CPUs。

编程实战

psutil.cpu_count(logical=True)

复制代码
# 参考资料:https://psutil.readthedocs.io/en/latest/#psutil.cpu_count
psutil.cpu_count(logical=True)
    Return the number of logical CPUs in the system (same as os.cpu_count) or None if undetermined. "logical CPUs" means the number of physical cores multiplied by the number of threads that can run on each core (this is known as Hyper Threading). If logical is False return the number of physical cores only, or None if undetermined. On OpenBSD and NetBSD psutil.cpu_count(logical=False) always return None. 

如上所述:psutil.cpu_count(logical=True ) 获取的"逻辑CPU(logical CPUs) "的数量,psutil.cpu_count(logical=False ) 获取的"物理内核(Physical core)/内核(Cores)"的数量。

os.cpu_count()

复制代码
# 参考资料: https://docs.python.org/3/library/os.html
os.cpu_count()
    Return the number of logical CPUs in the system. Returns None if undetermined.

如上所述: os.cpu_count() 获取的是"逻辑CPU数(logical CPUs)"。

复制代码
import os

import psutil

num_cores = psutil.cpu_count(logical=False)
# Core i9-13900HX 电脑上输出为 24
print(f'CPU cores: {num_cores}')

# 也可以用 psutil.cpu_count(logical=True)
num_logical_cpus = os.cpu_count()
# Core i9-13900HX 电脑上输出为 32
print(f'logical CPUs: {num_logical_cpus}')

欢迎搜索及关注:编程人(a_codists)

相关推荐
大江东去浪淘尽千古风流人物8 分钟前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
Swift社区9 分钟前
Gunicorn 与 Uvicorn 部署 Python 后端详解
开发语言·python·gunicorn
Coinsheep13 分钟前
SSTI-flask靶场搭建及通关
python·flask·ssti
IT实战课堂小元酱14 分钟前
大数据深度学习|计算机毕设项目|计算机毕设答辩|flask露天矿爆破效果分析系统开发及应用
人工智能·python·flask
码农阿豪15 分钟前
Flask应用上下文问题解析与解决方案:从错误日志到完美修复
后端·python·flask
wqq631085517 分钟前
Python基于Vue的实验室管理系统 django flask pycharm
vue.js·python·django
Q_Q196328847519 分钟前
python大学生爱心校园互助代购网站_nyvlx_django Flask vue pycharm项目
python·django·flask
码农阿豪21 分钟前
Python Flask应用中文件处理与异常处理的实践指南
开发语言·python·flask
xcLeigh22 分钟前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
威迪斯特23 分钟前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构