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,这种场景下就没办法获得超线程带来的受益了。

相关推荐
是上好佳佳佳呀7 小时前
【机器学习|DAY03】K近邻算法(KNN)笔记
笔记·机器学习·近邻算法
圣光SG17 小时前
Servlet学习笔记
笔记·学习·servlet
奋发向前wcx17 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
@Mike@19 小时前
02-数据库学习笔记(SQL引擎)
数据库·笔记·学习
六点_dn20 小时前
RabbitMQ学习笔记-定义与作用
笔记·学习·rabbitmq
香辣牛肉饭1 天前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
迷途呀1 天前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
依然范特东1 天前
动手学深度学习笔记--卷积层、微调
人工智能·笔记·深度学习
金伟API10241 天前
SQL Server基础学习笔记
笔记·学习
砚凝霜1 天前
软考网络工程师|第 1 章 计算机网络基础 完整备考笔记
网络·笔记·计算机网络