数据相关分类 ·写后读(RAW) -的执行要用到的计算结果,但可能在写入其计算结果之前 就先行对保存该结果的寄存器进行读操作。 类型:ID段依赖于EXE或MEM段 读后写(WAR):反依赖 一可能在读取某个源寄存器的内容之前就先对该寄存器进行 写操作,导致读出的是错误的数据。 ·写后写(WAW):输出依赖 -和的目的操作数一样,写入顺序错误,在目标寄存器中留 下的是的值而不是的值。 哪些真会发生? in-order,out-of-order? 1 add ro,r2,r1 2 and r2,r0,r3 3 Sub2,r3,#1;
12 数据相关分类 • 写后读(RAW) – j的执行要用到i的计算结果,但j可能在i写入其计算结果之前 就先行对保存该结果的寄存器进行读操作。 – 类型:ID段依赖于EXE或MEM段 • 读后写(WAR):反依赖 –j可能在i读取某个源寄存器的内容之前就先对该寄存器进行 写操作,导致i读出的是错误的数据。 • 写后写(WAW):输出依赖 –j和i的目的操作数一样,写入顺序错误,在目标寄存器中留 下的是i的值而不是j的值。 • 哪些真会发生? – in-order, out-of-order? 1 add r0,r2,r1 2 and r2,r0,r3 3 sub r2,r3,#1;
哪些数据依赖会发生? 。 共享资源:Reg,mem IM ·程序中存在 Reg -真依赖:RAW,生产者-消费者 Reg -假依赖(名字依赖):p233 Reg ·寄存器不够用:寄存器重命名技术 -逻辑寄存器/体系结构寄存器(32个) -物理寄存器(128个): 物理上:“简单流水线中不存在WAR、WAW”!!! 一“每条指令只写一个结果,且只在WB段写RF” -RV第二版p350;xx“这三点是充要条件”? ·按序执行,且 ·Reg-Reg指令仅在最后流水段写回,且 ·load/store指令在相同的流水段访存
哪些数据依赖会发生? • 共享资源:Reg,mem • 程序中存在 – 真依赖:RAW,生产者-消费者 – 假依赖(名字依赖):p233 • 寄存器不够用:寄存器重命名技术 – 逻辑寄存器/体系结构寄存器(32个) – 物理寄存器(128个): • 物理上:“简单流水线中不存在WAR、WAW”!!! – “每条指令只写一个结果,且只在WB段写RF” – RV第二版p350;llxx“这三点是充要条件”? • 按序执行,且 • Reg-Reg指令仅在最后流水段写回,且 • load/store指令在相同的流水段访存
RAW(哪个周期数据可用?) Time(in clock cycles) Value of CC1 CC 2 CC3 CC4 CC5 CC6 CC7 CC8 CC 9 register x2: 10 10 10 10 10/-20 -20 -20 -20 -20 Program execution 依赖类型: order (in instructions) EXE段,MEM段,WB段 “三有四无”: sub x2,x1,x3 设寄存器“先写”: “内推”:cc5就可用! “延迟槽”=2 and x12,x2,x5 Reg eg or x13,x6,x2 add x14,x2,x2 X sd×15,100(x2) 图4-50:蓝线“依赖
14 RAW(哪个周期数据可用?) 依赖类型: EXE段,MEM段,WB段 “三有四无”: 设寄存器“先写”: “内推”:cc5就可用! “延迟槽”=2 图4-50:蓝线“依赖” x √ √
RegFile同时读写操作约定 ·不同寄存器读写:在一个周期中,RF支持两读一写 。 同一寄存器读写:add$t0,$s2,$t0 不能同时进行读和写:写控制RegWrite.与clk同步,两种写方式: ·后写(late write):前半周期读,后半周期写。一一单周期版? -在一个周期内完成读写操作,但读出的是上一个周期写入的值。图4-7 ·先写(early write):与后写相反。一一流水线版? -在一个周期内完成读写操作,读出的是当前周期写入的值。图4-32,4-50 Registers Read register 1 “三有四无” Read Read data 1 register 2 Write Read register data 2 Write data RegWrite 15
RegFile同时读写操作约定 • 不同寄存器读写:在一个周期中,RF支持两读一写 • 同一寄存器读写: –不能同时进行读和写:写控制RegWrite与clk同步,两种写方式: • 后写(late write):前半周期读,后半周期写。——单周期版? – 在一个周期内完成读写操作,但读出的是上一个周期写入的值。图4-7 • 先写(early write):与后写相反。——流水线版? – 在一个周期内完成读写操作,读出的是当前周期写入的值。图4-32,4-50 15 “三有四无