一文搞懂多 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多平台发布

相关推荐
ajsbxi3 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
颜淡慕潇1 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
尘浮生2 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
尚学教辅学习资料2 小时前
基于SpringBoot的医药管理系统+LW示例参考
java·spring boot·后端·java毕业设计·医药管理
monkey_meng3 小时前
【Rust中的迭代器】
开发语言·后端·rust
余衫马3 小时前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng3 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
paopaokaka_luck8 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
码农小旋风9 小时前
详解K8S--声明式API
后端
Peter_chq9 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端