楚河汉界

你只可至此,不可再逾越 | Designed by Mr.wisdom

计算机体系结构-记分牌ScoreBoard

1.什么是记分牌

首先需要认识到一个事实:顺序执行的处理器有瑕疵

比如说lw指令后面跟着一连串与它无关的指令,但是lw指令发生了 data cache miss 的情况,导致了必须访问主存,所以就很慢,但是它卡在访存阶段几十上百个周期,如果是顺序执行,后面的指令会等他结束在执行,效率太低,如果想要实现“继续执行”,即后面的指令“绕过” lw 指令继续执行,那么就需要处理器支持乱序

1.1 乱序执行

顺序执行的效率太慢,如果有一条指令阻塞,那么后面所有的指令都会阻塞,所以设计师开了几条近道,让后面的指令可以绕过前面的指令,从而继续执行。

在乱序情况下,只要一条指令所需要的数据准备好了,那么就执行这条指令,而不用像顺序执行一样既要准备好数据,又要前面的指令把”路“让出来。

1.2 多配置流水

传统的五级流水线中,所有的指令都要走完运算通路,计算指令不需要访问存储器,所以完全可以绕开存储器,但正是因为这样的规定,导致前面的lw指令卡在了访存环节中,导致计算指令只能等lw指令把存储器让出来。

所以就有了多配置流水,针对不同的计算指令的不同的要求,为之开辟不同的道路,有这些路指令就可以实现超车。多配置流水的处理器可以实现乱序执行。

1.3 记分牌算法

下面是CDC 6600 的结构示意:

可以看到有两个浮点乘法器(FP mult),一个浮点除法器(FP divide),一个浮点加法器(FP add),一个整型单元(Integer unit:用于计算存储地址),和记分牌(Scoreboard),记分牌是信息存储单元,接下来两张图解释它究竟什么功能。

上图是记分牌存储的信息-功能单元状态,可以得知记分牌掌控着各个功能单元的功能

Busy表明单元是否被使用

Op则表示现在执行的哪一种指令

Fi是目的寄存器

Fj,Fk是源寄存器

Qj,Qk在确定源寄存器中没有准备好的后,表明源寄存器的值要从哪一个单元的目的寄存器中得到。

Rj,Rk标志Fj,Fk是否就绪,是否已经被使用

上图是记分牌存储的信息-寄存器结果状态,专门用于记录哪个寄存器要作为某功能部件的目的寄存器。如图:F4就要作为MULT部件的目的寄存器

2、工作流程解读

在用记分牌实现乱序执行的处理器中(这里特指 CDC 6600 处理器了),一条指令分四个阶段执行,分别是发射、读数、执行、写回。本节会逐阶段解读工作过程。

对示意图做一点补充,黄色方框表示流水段寄存器,分别有指令寄存器、部件寄存器(即 MUL_1 这一列)、操作数寄存器( OPRAND )、结果寄存器( RESULT )。蓝色部分是解码单元和运算单元。红色部分是寄存器堆。绿色部分是记分牌。解码单元和记分牌的交互是指解码单元要“问”记分牌当前指令是否有“ WAW 冒险”和“ Structure 结构冒险”,如果没有,指令就可以顺利渡过当前的阶段,后面的 RAW、WAR 也都是这个意思。

ID段

流水线ID段被分为两级

流出-解析指令,检查结构相关

读操作数一直到不存在数据相关时,才读取操作数

如果存在WAR或者WRW相关,记分牌会暂时暂停该指令的执行,知道相关消除后才继续执行

流出(Issue)

1.本指令所需要的功能部件有空闲

2.正在执行指令使用的目的寄存器与本指令不同

保证WAW相关

读操作数(Read operands)

1.前面已经流出的还在运行的指令不对本指令的源操作数寄存器进行写操作

2.一个正在工作的功能部件已经完成了对这个寄存器的写操作

3.动态解决RAW相关

前面两步完成原来ID段的功能

执行(Execution)

1.开始于取到操作数后

2.当结果产生后,修改记分牌

3.FP流水部件会占用多个周期

写结果(Write result)

检查WAR相关

出现以下情况时,不允许指令写结果:

1.前面的某条指令没有读取操作数

2.其中的某个源操作数寄存器与本指令的目的寄存器相同

记分牌的优缺点

记分牌算法是 CDC 公司提出的一个优秀的乱序执行算法,不过记分牌本身还是有一些不小的缺点,所以在 IBM 提出 Tomasulo 算法之后,业界普遍更青睐 Tomasulo 算法。

记分牌算法的优点是实现了指令的乱序执行,解决了乱序执行过程中的数据冒险问题,实现了指令的数据流式运行(即数据一旦准备好就开始运行,这区别于传统五级流水线中控制运行方式),并且实现起来并不复杂。

但是记分牌算法还是会因为 WAR 和 WAW 冒险而产生阻塞,且一旦产生阻塞,后续相同类型的指令就没办法继续发射(在乱序执行过程中,记分牌规定每一条配置路线都只能同时存在一条指令),即图中所列的“ Limited waiting space at functional units ”,如果后续相同类型的指令没法发射,那么更后面的也许可以立马执行的指令也会被阻塞到,这对性能有很大的影响。

而且记分牌算法在指令完成时不是顺序的(即写回的时候不按顺序),不按顺序完成指令会对程序的调试提出挑战

总结

记分牌算法由 CDC 公司在上个世纪六十年代提出,是一个实现方式简单的乱序执行算法,应用多配置流水和记分牌算法,就可以实现一个乱序执行的处理器。但是记分牌又有一些缺点,这些缺点给了 IBM 提出的 Tomasulo 算法后来居上的机会。随着学习的深入,我后面会继续更新 Tomasulo 算法的原理和算法流程。

钟永龙打钱!