CPU基础知识(1)

  1. 超线程

先上定义吧,超线程是指 采用同一流水线,同一套数据寄存器,但是各个线程各自对应一套上下文状态寄存器(来对线程切换进行上下文切换),然后利用不同的交织粒度同时运行多个线程指令的设计。

因此,看起来超线程相比于传统单线程的区别:

a. 增加了一套上下文状态寄存器;

b. 在同一时刻,整个流水线上可能存在多个线程的指令任务;

c. 运行多线程的交织粒度不同,

粗粒度的就诸如基于一定时间窗或者一定指令数,或者基于某些事件,比如cache miss等进行线程切换;

细粒度就是时间窗较短,或者是在指令执行上是以单条指令为基准进行切换;

因此,超线程其实就是在分时复用流水线,来填补或者说利用cpu 流水的一些idle窗口来提升指令IPC。

这里面其实比较麻烦的地方在于交织粒度和策略的选择:

基于静态的策略,比如时间窗或者指令乒乓的方式在实现上会比较简单,但是因为静态,所以依旧存在无法完全利用流水的问题;

基于动态的策略,比如线程A因为cache miss之后去外部取值,或者是某个指令的执行时间很长,此时将流水线完全授予B线程,直到A线程完成,或者B线程也出现了类似的场景,这种动态的策略会更好的利用流水线的能力,但是实现上会更加复杂一点。

  1. 同时多线程(SMT)

同时多线程是指,在取指令级上进行线程切换,同时,在指令进入保留站后再发射阶段,允许同时发射多个线程的指令,而不是像传统的超线程,发射阶段只能发射某一线程的指令。

SMT实现了真正意义上的并行。

  1. 资源

在硬件设计中不存在完全正向受益的设计, 那么超线程上对设计上有什么effort呢?

  1. 寄存器资源的开销

正如前面描述的,需要一套额外的上下文状态寄存器;

  1. 硬件资源开销

这里的硬件资源包含了流水线各个阶段的资源,比如fetch queue,rs queue, BP queue等等,因此在多线程中,对流水线各个阶段资源的使用包含两种,一种是增加资源的数目变为两倍,一种就是分时复用,前者很容易理解,就是通过增加资源来不影响线程的执行,后者是说对于现有的资源应该采用什么样的策略和方式能达到最好的利用率,比如二分,动态调整,预测调整等等。

这些都会带来额外的资源消耗。

  1. 指令级并行和线程级并行

指令级并行是指,利用流水线和多发射技术实现单个线程内部多个指令可以并行执行(多发射);

线程级并行是指,利用超线程技术实现了多个线程的指令流级别的并行;

  1. 超线程一定是好的么?

并不是,超线程并不是任何时候都可以提升性能,比如同一个流水线上多个线程都由于访存或者RAW等引起流水stall,这种场景下就没办法获得超线程带来的受益了。

相关推荐
RainCity10 小时前
Java Swing 自定义组件库分享(四)
java·笔记·后端
d111111111d11 小时前
MQTT+STM32+云平台+AT命令的编写
服务器·笔记·stm32·单片机·嵌入式硬件·算法
九思十安11 小时前
HNU2026-计算机系统-笔记 6 整数
笔记
宵时待雨11 小时前
linux笔记归纳5:进程控制
linux·运维·笔记
中屹指纹浏览器12 小时前
2026浏览器缓存指纹持久化溯源机制与多层级缓存隔离优化方案
经验分享·笔记
羊群智妍12 小时前
2026 AI搜索优化技术实践:GEO监测工具选型报告
笔记
Tutankaaa12 小时前
从单场到多场并发:知识竞赛平台的弹性扩展能力
服务器·笔记·学习·职场和发展
sheeta199812 小时前
LeetCode 每日一题笔记 日期:2026.05.11 题目:2553. 分割数组中数字的数位
笔记·算法·leetcode
九思十安13 小时前
HNU2026-计算机系统-笔记 5 汇编进阶
汇编·笔记
奋斗的小乌龟13 小时前
langchain4j笔记-05
笔记