一文搞懂多 CPU、多核 CPU、超线程技术、SMP

1 多 CPU

CPU(multi-processor )指的是在计算机主板上有多个物理CPU,每一个物理CPU之间通过系统总线连接。

Architectual State: 包括通用数据寄存器、段寄存器、控制寄存器等。

Execution Engine: 执行引擎,用来执行CPU指令,包括算数逻辑单元ALU等。

Local APIC: APIC全称是Advanced Programmable Interrupt Controller,翻译过来就是高级可编程中断控制器,用来处理CPU中断。

2 多核 CPU

多核(multi-core processor )指的是在一个物理CPU内部,封装了多个物理核心。这些物理核心可能位于同一个Die上,也可能位于多个Die上。

关于Die可以参看《一文搞懂晶圆 Die CPU 之间的关系》

无论使用哪种方式,多核CPU的架构可以表示为下图:

从上图可以看到,每一个物理核心都有自己的Architectual StateExecution EngineLocal APIC。因此,每一个物理核心都可以看成是一个逻辑 CPU

从并行性(Parallel )的角度看,多CPU和多核CPU都可以在同一时间,同时执行多条指令流。

那既然这样,为什么还要研究出多核CPU呢?

如果单从性能角度看,多核CPU内部物理核心之间通过片内总线通信,速度会快于系统总线。换句话说,多核 CPU 的性能要高于多 CPU

有了多核CPU,那么要构造处拥有4个逻辑CPU的系统,那么就有2种方案:

1种就是使用2个物理CPU,每个物理CPU内部包含2个物理核心。

2中就是使用1个物理CPU,这个物理CPU内部包含4个物理核心。

3 超线程技术

超线程技术(Hyper-Threading Technology )简称HT或者HTT,它作用于物理CPU内部的物理核心上。

为了实现超线程技术,一个物理核心内部,会同时包含2Architectual StateLocal APIC,但是只有1Execution Engine

在运行的时候,会同时有2条不同的CPU指令流送入物理核心:

因此,一个物理核心内部,就好像有了2逻辑核心 或者逻辑 CPU:

表面上看,超线程技术使得一个物理核心可以当成2个使用,与不支持超线程技术的单核CPU相比,并行性应该翻倍。

但是,从上图看到,逻辑核心是共享Execution Engine的。

虽然同一时刻,有2条不同的CPU指令流送入了物理核,但同一时刻,Execution Engine只能执行1条指令流上的指令。

比如,当Execution Engine在执行指令流1的时候,需要等待指令需要的数据到达,那么,在这个等待的时间内,才可以切换到指令流2执行,避免Execution Engine处于空闲状态。

换句话说,超线程技术的并行性并不彻底,并行性并不能真正的翻倍

上面Execution Engine的运行方式,和在不支持超线程的单核CPU上运行多线程非常相似,但是两者有本质的区别。

在不支持超线程的单核CPU上运行多线程,是操作系统进行时间片调度造成的假象,任何同一时刻,其实都只有1条指令流在物理核上执行。

在支持超线程的单核CPU上运行多线程,硬件层面支持同一时刻送入2条不同指令流到物理核心,只是在Execution Engine内执行的时候需要轮转调度。

既然超线程技术本质上和多核CPU一样,增加了核心数(逻辑核心),但是并行性却不及多核CPU,那为什么还要设计出超线程技术呢?

答案是超线程技术可以提升CPU核心的利用率。

在多核CPU上,如果某个物理核心在执行指令流时需要等待指令数据,那么该核心就有一段时间处于空闲状态(虽然可能很短暂)。但是如果支持超线程技术,那么该核心可以用来处理另外的指令流。

综上所述,结合多核技术与超线程技术,逻辑CPU的计算公式为: <math xmlns="http://www.w3.org/1998/Math/MathML"> 逻辑 C P U 个数 = 物理 C P U 个数 ∗ 物理核心数 ∗ ( 超线程技术 ? 2 : 1 ) 逻辑 CPU 个数 = 物理 CPU 个数 * 物理核心数 * (超线程技术 ? 2 : 1) </math>逻辑CPU个数=物理CPU个数∗物理核心数∗(超线程技术?2:1)

4 SMP

SMP全称是 Symmetric Multi-Processing,翻译过来是对称多处理器,是一种多处理器架构。

对称多处理器中的对称,是指任何程序,不管运行在内核空间,还是用户空间,都可以运行在任意一个处理器上。

与之相反,ASMPAsymmetric Multi-Processing,非对称多处理器,指某些处理器用来运行特殊的程序,比如操作系统,而另外的处理器用来运行非特殊程序,比如用户程序。

现代计算机系统都使用的是SMP架构,ASMP架构已经几乎绝迹了。

早期的时候,SMP专指多个物理CPU的场景。后续由于多核与超线程技术的出现,SMP在多个逻辑CPU下也同样适用。

Symmetric Multi-Proccessing Wikipedia

In the case of multi-core processors, the SMP architecture applies to the cores, treating them as separate processors

Hyper-Threading Wikipedia

The minimum that is required to take advantage of hyper-threading is symmetric multiprocessing (SMP) support in the operating system, as the logical processors appear as standard separate processors.

本文由mdnice多平台发布

相关推荐
stevewongbuaa24 分钟前
一些烦人的go设置 goland
开发语言·后端·golang
花心蝴蝶.4 小时前
Spring MVC 综合案例
java·后端·spring
落霞的思绪4 小时前
Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)
数据库·spring boot·redis·后端·缓存
m0_748255654 小时前
环境安装与配置:全面了解 Go 语言的安装与设置
开发语言·后端·golang
SomeB1oody9 小时前
【Rust自学】14.6. 安装二进制crate
开发语言·后端·rust
患得患失94911 小时前
【Django DRF Apps】【文件上传】【断点上传】从零搭建一个普通文件上传,断点续传的App应用
数据库·后端·django·sqlite·大文件上传·断点上传
customer0812 小时前
【开源免费】基于SpringBoot+Vue.JS校园失物招领系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
中國移动丶移不动12 小时前
Java 反射与动态代理:实践中的应用与陷阱
java·spring boot·后端·spring·mybatis·hibernate
uzong14 小时前
Mybatis-plus 更新 Null 的策略踩坑记
java·后端
uzong14 小时前
mapStruct 使用踩坑指南
java·后端