关于 CPU 的多核和超线程技术

article/2025/8/23 16:19:02

1. 关于 CPU 的多核和超线程技术

CPU 的物理个数由主板上的插槽数量决定,每个 CPU 可以有多核心,每核心可能会有多线程。

多核 CPU 的每核(每核都是一个小芯片),在 OS 看来都是一个独立的 CPU

对于超线程 CPU 来说,每核 CPU 可以有多个线程(数量是两个,比如1核双线程,24线程,48线程),每个线程都是一个虚拟的逻辑 CPU (比如 Windows 下是以逻辑处理器的名称称呼的),而每个线程在 OS 看来也是独立的 CPU。.

这是欺骗操作系统的行为,在物理上仍然只有 1 核,只不过在超线程 CPU 的角度上看,它认为它的超线程会加速程序的运行。

请添加图片描述

CPU 的多线程和程序的多线程是不同的,CPU 的多线程是硬件多线程,程序的多线程是软件多线程,软件多线程定义的是多个并发执行的任务分支,硬件的多线程是可以被当作一个 CPU 核心来调度执行任务的 CPU 资源。

要发挥超线程优势,需要操作系统对超线程有专门的优化。

超线程的 CPU 在能力上,比非多线程的 CPU 核心要更强,但每个线程不足以与独立的 CPU 核心能力相比较。

每核上的多线程 CPU 都共享该核的 CPU 资源。例如,假设每核 CPU 都只有一个”发动机”资源,那么线程 1 这个虚拟 CPU 使用了这个”发动机”后,线程 2 就没法使用,只能等待。
所以,超线程技术的主要目的是为了增加流水线(参见前文对流水线的解释)上更多个独立的指令,这样线程 1 和线程 2 在流水线上就尽量不会争抢该核 CPU 资源。所以,超线程技术利用了 superscalar (超标量)架构的优点。
多线程意味着每核可以有多个线程的状态。比如某核的线程 1 空闲,线程 2 运行。

超线程没有提供完全意义上的并行处理,每核 CPU 在某一时刻仍然只能运行一个进程,因为线程 1 和线程 2 是共享某核 CPU 资源的。可以简单的认为每核 CPU 在独立执行进程的能力上,有一个资源是唯一的,线程 1 获取了该资源,线程 2 就没法获取。(稍后会深入解释超线程如何实现并行运行)
但是,线程 1 和线程 2 在很多方面上是可以并行执行的。比如可以并行取指、并行解码、并行执行指令等。所以虽然单核在同一时间只能执行一个进程,但线程 1 和线程 2 可以互相帮助,加速进程的执行。
并且,如果线程 1 在某一时刻获取了该核执行进程的能力,假设此刻该进程发出了 IO 请求,于是线程 1 掌握的执行进程的能力,就可以被线程 2 获取,即切换到线程 2 。这是在执行线程间的切换,是非常轻量级的。(WIKI: if resources for one process are not available, then another process can continue if its resources are available)

多线程可能会出现一种现象:假如 24 线程 CPU,有两个进程要被调度,那么只有两个线程会处于运行状态,如果这两个线程是在同一核上,则另一核完全空转,处于浪费状态。更期望的结果是每核上都有一个 CPU 分别调度这两个进程。

2. CPU多线程和程序多线程的关系和区别

程序的多线程,是软件多线程;多个软线程提供了多任务并发执行的可能性。

CPU 里的线程数是超线程,是硬件多线程。每个硬件多线程(超线程)可以看作是逻辑 cpu,但并非是完全意义上的 CPU

CPU 核心中的超线程共享该核心中的部分功能单元,比如超线程 1 执行加法运算时,超线程 2 可以执行乘法运算,但超线程 2 不能同时执行加法运算,只是举个例子来说明,并非合理,不过也由此可知,超线程这种逻辑 CPU 是不能当作一个完整核心的物理 CPU 来看待的。此外,由于每个超线程都是 CPU 资源,可以独立运行任务,所以每个超线程都具有自己的执行状态,比如要有自己的寄存器,有自己的 PC

另一方面,超线程因为都在核心内,它们共享该核心的 L1L2 高速缓存,所以每个核心内的 L1L2 需要有专门的缓存控制器,需要有专门的缓存策略。

再回头来说多进程以及软件多线程的调度问题。

无论是多进程还是软件多线程,它们所表示的含义都是可并发执行的多个任务分支,如果是在多处理器、多核、或超线程 CPU 下,这些并发任务就可以被并行执行,所以多进程、软件多线程都可以被调度分配到超线程上执行,因为超线程是可以独立执行任务的 CPU 资源。

3. 多颗CPU

对于多颗CPU的架构组织方式,有:

  • AMP(Asymmetric multiprocessing): 非对称多处理器结构
  • SMP(Symmetric multiprocessing): 对称多处理器结构
  • UMA(Uniform memory access): 一致存储访问结构
  • NUMA(Non-uniform memory access): 非一致存储访问结构
  • MPP(massively parallel processing): 大规模(海量)并行处理结构
    通常会拿来说明的是 SMPNUMAMPP 是海量并行处理结构。

4. SMP

对称多处理结构,认为所有 CPU 的角色是平等的,所有 CPU 都共享内存、总线等资源。其实单颗多核的 CPU 内部的多核组织方式也是 SMP 结构,所有的核心都共享内存、总线资源。

在这里插入图片描述对于 SMP 结构来说,由于每颗 CPU 都需要操作共享存储:内存,所以需要保证内存数据的一致性(即缓存一致性)。比如 CPU1 里的 Core1 修改数据 A,假如采用 bus snooping 缓存一致性策略,需要在总线发送广播通知所有 CPU 的所有 Core 使它们对数据 A 的缓存失效。如果 CPU 数量较少,问题并不大,但是随着 CPU 数量增多,因缓存一致性和共享对象导致的总线流量会暴增。

所以 SMP 结构并不利于扩展更多 CPU ,比如 2-4CPU 可考虑 SMP 架构,但 4CPU 以上便不适合使用 SMP

5. NUMA

NUMA(非一致存储访问结构)结构使得各个 CPU 有自己的内存资源,通过各 CPU 之间的互联模块,各 CPU 也可以访问其它 CPU 的内存资源。

请添加图片描述
因为 CPU 都有自己本地的内存,可以各自管理自己的内存保证自己的缓存一致性。但是,因为各 CPU 各自的内存分离开了,使得 CPU1 通过互联模块访问 CPU2 的内存速度很慢(因为通过中间数据传输介质且距离更远),所以使用 NUMA 结构时,程序应尽量避免 CPU 之间的交互并行。

此外,CPU 数量越多,跨 CPU 访问内存的距离可能会越远,速度会越差,所以 NUMA 结构的性能并不能随 CPU 数量的增加而线性增长。

下图是 4CPU 组成 NUMA 结构,总共 32 核,总共分配 32G 内存,每颗 CPU 分配 8G 内存作为自己的本地内存。

请添加图片描述

#原文地址

原文地址: https://www.junmajinlong.com/os/multi_cpu/


http://chatgpt.dhexx.cn/article/6DTkCJ3P.shtml

相关文章

手机的开机流程分析(pmic角度)

【前言】 电源是手机soc必不可缺的部分之一,那么开机的过程是怎么样的呢,接下来我会从硬件角度分析。 【开机源】

RK3588 PMIC/Power电路 PCB 设计指南

以下为RK3588 电源各供电电路 PCB 设计指南。 1、VDD_LOGIC,VDD_GPU,VDD_NPU,VDD_CPU电源的 DC-DC 远端反馈设计。 100ohm反馈电阻需要靠近输出电容放置,电阻一端连接到 DC-DC 输出电容,另一端连接到PMIC 的VOUT 反馈脚…

linux电源管理配置,Exynos 4412 电源管理芯片PMIC 的配置及使用方法

开发板:迅为4412精英版。 uboot:uboot-2014-10。 PMIC:SAMSUNG S5M8767A 在移植新版u-boot的时候,上网搜电源管理芯片的使用方法资料,发现几乎没有,就算是datasheet也很难下载得到,不知是何原因…

RK3399平台开发系列讲解(电源管理篇)11.10、PMIC(生产者)驱动数据结构体

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 一、结构描述二、约束结构三、初始化数据结构四、配置结构五、设备操作结构沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux调节器框架设计用于连接和控制电压和电流调节器。它分为以下…

camera 添加外挂pmic进行供电的涉及

凡是多问几个为什么? 当今camera设计为什么越来越喜欢用外接的pmic? 很多大厂的camera都用到了wl2864,wl2868这样的外接pmic芯片,为什么套片上自带的pmic在已经比较充足的情况下依然加大成本还要这样做呢? 在一个典…

SOC电源管理系统PMIC

SOC电源管理系统 版权声明: 本文作者: 烓围玮未 首发于知乎专栏:芯片设计进阶之路 转发无需授权,请保留这段声明。 随着SOC越来越复杂,包含的IP越来越多,单个SOC上实现了CPU, 射频模块,相机…

mtk-pmic

简单介绍了mtk6353这颗pmic各部分的功能 一.功能框图 6353主要由如下几部分组成 1.电平转换:LDO和buck 2.LED驱动current sink 3.RTC 4.电压检测AUXADC 5.控制信号:上下电时序,系统复位,异常处理 6.充电控制 7.audio codec 8.电量计fuel gauge 二.各部分介绍 1.电平转换 这…

高通Pmic闪光灯代码架构

msm-kernel 注册一个名为"leds-qti-flash"的驱动,驱动代码在"leds-qti-flash.c"文件中。 对下:实现对pmic芯片更新寄存器,也就是实际控制闪光灯的操作。 对上:提供led_classdev结构体,即flash/sw…

Qcom 平台 pmic adc读取代码实现

Qcom 平台读取pmic上 adc电压值的方法 如下图,可以通过平台提供的节点(参考高通文档将mpp配置为adc功能) cat对应的节点获取结果; 也可以通过自行实现的驱动中调用相关接口并转化结果; Kernel demo 参考代码&#x…

浅谈Linux PMIC驱动(一)

转眼间,从事PMIC驱动开发已将近4年,前后参与两款PMIC芯片研发,一款自研,一款Q公司PMIC,对PMIC有了一定的理解,将其总结归纳,算是这几年工作的收获吧? 读者对象:对PMIC感…

PMIC/SBC/PMU 电源管理芯片工作原理

目录 PMIC/SBC作用 DC转换的方式 PMIC 与ASIL PMIC 工作逻辑 PMIC与DDR的关系 PMIC与CPU PMIC/SBC/PMU作用 PMIC:power management IC的缩写,中文是电源管理集成电路。 SBC:…

PMIC 工作原理

1. PMIC芯片每个电压的输出可以通过外部EEPROM定制,若无EEPROM,使用默认的配置; 2. PMIC需要外部给一个使能信号开始工作 3. PMIC支持多种工作模式:BACKUP、ACTIVE、STANDBY 参考PMCI数据手册: BD9574MWF-M Power …

信号与系统--幅度谱和相位谱

周期信号的频谱 为了能既方便又明白地表示一个信号在不同频率下的幅值和相位,可以采用成为频谱图的表示方法。 在傅里叶分析中,把各个分量的幅度|Fn|或 Cn 随着频率nω1的变化称为信号的幅度谱。 而把各个分量的相位 φn 随角频率 nω1 变化称为信号的…

关于信号相位、信号阶段的解释

相位阶段(stage):  是根据交叉口通行权在一个周期内的更迭次数来划分的,一个信号周期内"通行权"的交接几次,就是几个信号阶段。也就是说只要信号灯色有变化(红、黄除外),相位阶段就发生了变化。…

基于stm32的两路正弦波相位差测量

利用stm32测量两路正弦波相位差,有四种主要思路: 1. 两路直接捕获信号直接得到时间差 即将正弦波过比较器变成方波(stm32直接测量正弦波也可以的,频率较大时误差基本上在忍受范围的),开启两路捕获得到上升…

信号控制基本概念(相位和阶段)

本科上课时都上过这些,但是后来做科研没做这个方向,时间一长就都忘了,最近实习做信号控制相关,得拾起来,要不然被人嘲笑了。内容主要参考这篇文章,写的挺好的,也很全面,接下来概括下…

相位调制

一天一个信号处理小知识 1.相位调制 引言 在通信系统中,当通信设备产生了需要发送的数据,这个数据为一长串比特流,如果使用示波器画出来,那么就是一连串的方波。要想进行通信,就必须得想办法通过空气将这串比特流发送…

求解一个序列的最小相位序列

求解一个序列的最小相位序列 什么是最小相位序列hmin(z)一个例子总结例子说明求解思路零点搬移规律由非最小相位系统构造全通系统和最小相位系统的过程原型 什么是最小相位序列hmin(z) 最小相位系统Hmin(z)是零、极点都在单位圆内的因果稳定系统。 最小相位系统Hmin(z)的逆z变…

1.7 全通滤波器与最小相位系统

1.7 全通滤波器与最小相位系统

最小相位图

概述 在实际的3D成像中,由于投影仪和摄像机的位置必然不同,这会使得打在被测物上的条纹宽度与投影仪投出来的条纹宽度不同,从而导致测量深度与实际深度不符。(例如当我们要测量x轴所在与纸面垂直平面的深度时,测量出的…