课程
复习
单周期指令,先实现一个数据通路,然后把整个指令实现的过程分成五段:IF,ID,EX,MEM,WB,每两段之间加一个流水寄存器(实现方法不唯一)
流水线能够提升指令执行的效率(吞吐率),也就是说单位时间的任务数,理想流水线是没有任何阻塞,可以源源不断的放到流水线上执行,此时CPI是1,即每个周期完成一条指令 ,但是是不可能的,因为有冒险
冒险有三种:结构冒险,数据冒险,控制冒险。
结构冒险是由硬件冲突引起的,解决方法:加阻塞(是解决所有冒险的方法),重复设置资源(最典型实例:ld指令的取数据阶段和其他指令的取指令阶段在一个周期的时候没有办法同时访存,办法是把指令存储器和数据存储器分开,分成两个存储体或者两个cache)
数据冒险分成三种冒险:写后读,读后写,写后写。解决方法:1.旁路或者分支(用硬件解决)(从数据产生的地方直接送到需要该数据的地方),有三种情况:R-R指令相连(第一个R指令的EX和MEM段流水寄存器,直接送到ALU的输入) ,R-R指令之间间隔一条指令(MEM和WB的流水寄存器送到ALU的输入),L-R指令之间间隔一条指令(同R-R)。
2.阻塞,L-R指令相邻必须使用阻塞
控制冒险是由分支指令(有条件跳转)引起的,因为分支指令控制流方向不固定。解决方法:预测 ,算出分支地址和判断分支是否成功是EX阶段,如果预测错一定会有两个周期延迟,因为MEM阶段才会把真正的转向地址送给PC,可以在硬件上进行改进,把判断分支是否成功和计算分支目标地址提前到ID,最多有一个周期延迟,
上述计组中学的是用硬件、静态方法解决冒险,接下来学习的是动态方法解决冒险
IPS:每秒完成的指令条数
数据相关和控制相关必须保持(改不了)
题目会给
注意R是整数寄存器,指令延迟由浮点产生
要求:凡是存在数据相关的指令顺序不能变
分支延迟槽
修改寄存器名,修改下标,修改指针
循环展开的一个例子(面试)
上面都是静态,接下来是动态
注意,是解决数据冒险
顺序执行的五段流水线中名相关不可能发生
可以用换名技术
通过在保留站中的等待它需要的操作数就绪才能解决写后读
访存指令要按顺序,放进一个队列,不乱序
32个单精度浮点寄存器,十六个64位浮点寄存器
mips浮点数是IEEE754标准,一位符号,八位阶码,十八位尾数,阶码是移码,偏移量为127,因为有四种特殊情况,尾数是原码
加个阶段3访存,只用ld(和执行),st(和写结果)有
F0数据相关,F2反相关
Qi寄存器状态表,要是在浮点寄存器中能取到操作数,就说是就绪的,就把Qi赋值为0
名相关在流出时被处理,因为直接取出数据,和寄存器号没关系
add写到Qi中预约
写结果将结果写入寄存器,寄存器按上升沿触发
st还要判断rt
对ld来说还要访存,目的是在执行阶段结束后所有要写回寄存器的数都要出现到总线上
注意结构冲突add要等sub完成再进行
可能出现结构冲突的部分:1.保留站 2.功能部件 3.总线cbd
利用ROB建立数据相关指令的关联
确认的时候清寄存器状态表
写回之后清保留站
题
分析:
1.load指令,首先指令流出的进入条件:缓冲器有空闲单元,满足条件,检测第一操作数(R1)是否就绪,就绪,把操作数渠道当前缓冲单元的Vj,Qj置为0,设置busy,把符号位扩展后的偏移量放入A,把当前缓冲器单元的编号r,放入对应rt的状态表项,现在是流出步骤
接下来看执行的进入条件:Qj=0,且该指令在load/store指令头部,满足条件,计算有效地址送到A,从存储器中读数据(访存),现在是执行,与此同时第二条指令add流出,第一第二操作数是否就绪,busy,op,寄存器换名,访存与此同时第二条指令开始执行,检查两个源操作数是否就绪,没就绪,要等第一条指令写结果完成才进,与此同时第三条指令流出,判断同上,
最后看写结果的执行条件,保留站执行结束,cdb就绪,满足,则把结果写入等待的寄存器,等待的保留站的Vj,Qj置为零,等待保留站的Vk,Qk置为零,释放当前保留站现在是写结果(图片中LOAD那一行的Busy应该是N,其他是空的),与此同时第三条指令执行
不分析了先,直接做题
Q1 20 直接能写(看发不发生总线上的冲突)
Q2 20 39 40 第一空14就行但是要等ALU空闲,由第四条指令可知要等到20,20周期后是39 可以直接写结果
Q3 10 ADD保留站等第二条指令写结果之后才有空位
Q4 16
Q5 sub在add2
Q6 f6在mul1
Q7 f4,c3存的06
正确答案:
(1) 20
(2) 20 39 40
(3) 10
(4) 16
(5) ADD2
(6) MUL1
(7) 06
(8) ADD2
(9) MUL1
(10) MUL2
分析:Q1:R0对应C6,C6+00=C6,C6对应00
Q2: C6+08=CE,此时已经执行完毕,所以计算出地址了
Q3:F4
Q4:F4是第四条指令的结果
Q5: R0里面是C6
正确答案:
(1) 00
(2) CE
(3) F4
(4) ROB3
(5) C6
答案解析:实际上是第5周期结束时的状态。
10.请简述动态分支预测技术的三种方法。
我的答案:
分支预测缓存器,根据近几次的执行情况预测分支执行是否成功;
分支目标缓冲器,将分支成功的分支指令的地址和分支目标地址放到一个缓冲区保存;
基于硬件的前瞻执行,分支预测,将结果放至缓存器,待结果确定再决定缓存器内容的去留。