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

相关推荐
陈随易2 分钟前
VSCode v1.102发布,AI体验大幅提升
前端·后端·程序员
生无谓15 分钟前
什么是跨域,如何处理跨域
后端
Smilejudy17 分钟前
极具特色的位置运算
后端
码出极致18 分钟前
支付线上问题复盘的“5W”框架
后端
ezl1fe26 分钟前
RAG 每日一技(三):不止文本,代码和Markdown如何优雅地分块?
后端
jack_yin27 分钟前
手把手教你玩转 telegram-deepseek-bot 的 Admin 管理后台!
后端
浮游本尊28 分钟前
Java学习第8天 - Spring框架入门与依赖注入
后端
bcbnb28 分钟前
iOS App 安全加固实战:如何满足合规审计与选对加固工具
后端
00后程序员30 分钟前
WebView 调试太难?用远程调试工具这样搭建可控环境
后端
泉城老铁31 分钟前
SpringBoot对接微信公众号并实现消息发送功能详解
后端·微信