计算机系统结构总结_Scoreboard and Tomasulo
Textbook:
《计算机组成与设计——硬件/软件接口》 HI
《计算机体系结构——量化研究方法》 QR
超标量
前面讲过超标量的概念。超标量的目的就是实现指令级并行(Instruction Level Parallelism),来解决stall太多的问题。
超标量(Super Scalar) 将一条指令分成若干个周期处理以达到多条指令重叠处理,从而提高cpu部件利用率的技术叫做标量流水技术。 超级标量是指cpu内一般能有多条流水线,借助硬件资源重复(例如有两套译码器和ALU等)来实现空间的并行操作。在单流水线结构中,指令虽然能够重叠执行,但仍然是顺序的,每个周期只能发射(issue)或退休(retire)一条指令。
超级标量结构的cpu支持指令级并行,一个周期可以发射多条指令(2-4条居多,也叫做多发射[multiple issue])。这样可以使得cpu的IPC(Instruction Per Clock)>1 (也就是CPI<1咯),从而提高cpu处理速度。超级标量机能同时对若干条指令进行译码,将可以并行执行的指令送往不同的执行部件(也就是说执行过程可以是乱序的)。我们熟知的pentium系列(可能是p-II开始),还有SUNSPARC系列的较高级型号,以及MIPS若干型号等都采用了超级标量技术。
实现多发射处理器也有两种方式,其区别是将主要工作分给编译器来做还是硬件来做。由千不同的实现方式将导致某些决策是静态进行的(在编译时)还是动态进行的(在执行时),所以这两种方式有时也被称为静态多发射( s tatic mul ti pl e issue) 和动态多发射(dynamic multiple issue) 。
理想情况下我们希望能有这么一个pipeline:

其中IF ID肯定只能是顺序执行(in order)的。MEM WB这部分也要顺序执行,毕竟指令的完成顺序不能乱嘛。
但是中间功能单元执行的环节其实可以乱序执行(out of order execution)。假设依次有指令A、B、C。A和B存在依赖,而C和前面的都没有依赖。因为A和B的依赖关系会导致流水线停顿,进而导致C也不能执行。如果指令可以乱序执行,就可以先执行C(指令在所需数据可用时立即开始执行),提高效率。
scoreboard system
scoreboard是一种古老的方法了...但其实现在在GPU的thread scheduling中仍然在用
......
Tomasulo Algorithm
这是目前的CPU中在广泛使用的方法。 QR P143
Tomasulo的核心思想是通过寄存器重命名来消除冒险,寄存器重命名功能由保留站(Reservation Station)提供。每个功能单元会有一个保留站。
- 每个保留站保存一条已经被发射,正在等待功能单元(EX)执行的指令。如果该指令的操作数值已经被算出了,也放到保留站里,否则保留站先记录这些操作数值对应的保留站名称。
- 保留站在一个操作数可用时马上缓冲一份,这样就可以为等待发射的指令缓冲操作数。
- 待执行的指令也会指定某个保留站作为自己的输入,并在发射指令是将寄存器更名为对应的保留站的名字,而不再依赖寄存器了。
- 在对寄存器进行连续写入时,只会用最后一个操作(也就是最终的值)来更新寄存器。
- 保留站的数量多于寄存器
一个使用了Tomasulo算法的浮点计算单元的结构如下:
- 保留站相当于“虚拟寄存器”,来make copies of data。用于解决乱序执行时,不同指令公用同一个寄存器带来的冒险。解决Write After Write和Write After Read的依赖。
- Common Data Bus能够将数据同时Forward到多个位置,同时需要数据的保留站也能及时从Common Data Bus上得到自己需要的数据。解决Read After Write的依赖。
每个保留站会记录以下字段:
- Op:要执行的运算
- Qj, Qk:对于还没生成的源操作数,这里记录将生成源操作数的保留站号。
- Vj, Vk:对于已经available的源操作数,这里记录源操作数的值。
- A:记录load/store指令所需的地址
- Busy:表示该保留站在用
另外在每个寄存器中,也要加一个字段来记录 哪个保留站中的指令要修改当前寄存器。
之前提到过有三种数据冒险,我们来分别看看它们是如何被消除的:
1. Read after Write PPT P5-7
假设有这样的指令:
: R2:=R0*R4
: R3:=R0+R2
: R0:=R1*R2
...
2. Write after Read(比如 r4=r1+r0 和 r0=r3+4) PPT P7-10
假设有这样的指令:
: R3:=R0*R4
: R4:=R3+R1
: R1:=R0+R2
...
3. Write after Write(2个指令write the same register) PPT P11-15
假设有这样的指令:
: R3:=R0*R4
: R1:=R3+R1
: R3:=R0+R2
: R0:=R3*R2
...
Memory System Dependency
[PPT P15]
Tomasulo解决了寄存器中的依赖问题,但有些奇怪的指令(比如Load/Store)还可能造成内存的依赖,比如对同一个内存地址的RAW / WAR / WAW。这种用Tomasulo就搞不定了。因为有些情况下虽然内存地址不同,但实际上落到了同一个block(前面讲过),还是不能同时access。这种用Tomasulo就搞不定了。我们可以定义两个人工规则:
- Load:Proceed only when no prior instruction store to the same address
- Store:Proceed only when no prior instruction load/store to the same location
但是在load/store中也会设计地址的计算(也就是前面的ALU指令了)。因此我们把这个规则套用到tomasulo里面:

如图,Addr Unit负责计算地址,送入Store buffer和Load buffer。
以一个RAW的例子为例:
i1: R1 := load (R0) //write R1
i2: (R1) := store R2 //Read R1 when calculating address 0[R1]
...
...
计算机系统结构总结_Scoreboard and Tomasulo的更多相关文章
- 【5分钟+】计算机系统结构:CPU性能公式
计算机系统结构:CPU性能公式 基础知识 CPU 时间:一个程序在 CPU 上运行的时间.(不包括I/O时间) 主频.时钟频率:CPU 内部主时钟的频率,表示1秒可以完成多少个周期. 例如,主频为 4 ...
- 计算机系统结构总结_Branch prediction
Textbook:<计算机组成与设计——硬件/软件接口> HI<计算机体系结构——量化研究方法> QR Branch Prediction 对于下面的指令: ...
- 计算机系统结构总结_Multiprocessor & cache coherence
Textbook:<计算机组成与设计——硬件/软件接口> HI<计算机体系结构——量化研究方法> QR 最后一节来看看如何实现parallelism 在多处 ...
- 计算机系统结构总结_Instruction Set Architecture
Textbook:<计算机组成与设计——硬件/软件接口> HI<计算机体系结构——量化研究方法> QR 这节我们来看CPU内部的一些东西. Instruct ...
- 计算机系统结构总结_Memory Hierarchy and Memory Performance
Textbook: <计算机组成与设计——硬件/软件接口> HI <计算机体系结构——量化研究方法> QR 这是youtube上一个非常好的memory syst ...
- 计算机系统结构总结_Cache Optimization
Textbook: <计算机组成与设计——硬件/软件接口> HI <计算机体系结构——量化研究方法> QR Ch4. Cache Optimization 本章要 ...
- 计算机系统结构总结_Memory Review
这次就边学边总结吧,不等到最后啦 Textbook: <计算机组成与设计——硬件/软件接口> HI <计算机体系结构——量化研究方法> QR Ch3. Memor ...
- 计算机体系结构——CH1基本概念
CH1基本概念 右键点击查看图像,查看清晰图像 CH1基本概念 目的与内容 了解计算机系统的完整概念 学习计算机系统的分析方法与设计方法 编写程序所必需了解的计算机属性 计算机系统结构简介 为什么要研 ...
- linux高级编程补充知识
F: 计算机系统结构: ------------------------------- 应用程序 ----------------- | 库函数 -------------------------- ...
随机推荐
- 树状数组(Binary Indexed Tree)
树状数组(Binary Indexed Tree,BIT) 是能够完成下述操作的数据结构. 给一个初始值全为 0 的数列 a1, a2, ..., an (1)给定 i,计算 a1+a2+...+ai ...
- pyinstaller打包的exe太大?你需要嵌入式python玄学 探索篇
上篇我们讲到pip的安装以及普通库用pip的安装方法 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 拓展篇zhuanlan.zhihu.com 问题纷沓而 ...
- hook C++
Intercepting Calls to COM Interfaces(hook com接口) 通过COM组件IFileOperation越权复制文件 代码注入之远程线程篇 使用VC++通过远程进程 ...
- RotateZoom.cpp 20180622
20180622代码加入随意变换图像大小 批处理框架先不看:-B src3.bmp 10 1 30 2 0.1 3 tar.bmp src2.bmp 37.5 2.1 tar // RotateZo ...
- java网络通信:伪异步I/O编程(PIO)
缺点:避免了线程资源耗尽的问题,但是根本上来说,serversocket的accept方法和inputstream的输入流方法都是阻塞型方法. 服务端:加了一个线程池,实现线程复用.客户端不变 pub ...
- 非GUI模式运行Jmeter脚本
一.应用场景 日常测试过程中发现,在大数量并发时,jmeterGUI界面经常宕机.卡死,在这种情况下我们就需要使用命令行来执行脚本了(非GUI模式). 二.命令行模式优点 1.节约系统资源,无需启动界 ...
- 【AOP】操作相关术语---【Spring】的【AOP】操作(基于aspectj的xml方式)
[AOP]操作相关术语 Joinpoint(连接点):类里面哪些方法可以被增强,这些方法称为连接点. Pointcut(切入点):在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add ...
- Shadow安装
1.Shadow插件的安装 http://shadow.github.io/ 这是shadow主页的网址,Shadow是一个开源的网络模拟器/仿真器,我们用它模拟Tor网络的运行状况. 1.1安装 ...
- 将Unix时间戳转换为Date、Json属性动态生成反序列化、序列化指定属性
实体类 public class Test { [JsonIgnore] public string GetDate { get { return GetTime.ToString("yyy ...
- 项目测试完成后,总结典型性bug,以测试的角度,应该怎么筛选bug
一个wap端改版项目完结了,总结下测试过程中的典型性bug:应该从哪个角度去总结? 有点疑问?不知道是以bug的影响度去总结,还是以优先级去总结(好像优先级和影响度是成正比的,优先级比较高的bug,影 ...