计算机组成与实现 课件 高小鹏 第6-9章- 流水线-集成MIPS微系统_第1页
计算机组成与实现 课件 高小鹏 第6-9章- 流水线-集成MIPS微系统_第2页
计算机组成与实现 课件 高小鹏 第6-9章- 流水线-集成MIPS微系统_第3页
计算机组成与实现 课件 高小鹏 第6-9章- 流水线-集成MIPS微系统_第4页
计算机组成与实现 课件 高小鹏 第6-9章- 流水线-集成MIPS微系统_第5页
已阅读5页,还剩423页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机组成流水线

北京航空航天大学计算机学院目录流水线概述流水线数据通路流水线控制流水线冒险流水线性能分析2种CPU模型对比2如何计算电路的最大时钟频率3个重要术语建立时间(SetupTime):输入信号在时钟上升沿之前就必须有效的时间保持时间(HoldTime):输入信号在时钟上升沿之后仍然必须保持有效的时间输出延迟(CLK-to-Q):输出信号在时钟上升沿之后输出有效值的时间最大频率取决于最大延迟;最大延迟取决于为了确保寄存器的正确输入所需要的时间组合逻辑寄存器输出输入次态现态T=

建立时间

+

输出延迟+

组合逻辑延迟fmax

=1/T关键路径关键路径:电路中的任意2个寄存器之间的最大延迟电路的时钟周期必须大于关键路径,否则信号将不能正确的传递到下一个寄存器组合逻辑1组合逻辑2组合逻辑3012寄存器寄存器T1T2T3T4CLK关键路径

=

组合逻辑延迟1+

组合逻辑延迟2+

组合逻辑延迟3+MUX延迟Add指令执行延迟分析执行延迟:覆盖从PC输出到RF写入的全路径ClkPCRs,Rt,Rd,Op,FuncRFWr旧值新值ALUOp旧值新值控制器输出延迟RD1,RD2RF访问延迟旧值新值ALU延迟WD旧值新值IM读延迟旧值新值新值旧值寄存器输出延迟建立时间RF写入时刻单周期性能假设:RF的读写延迟均为100ps,其他部件延迟为200ps最大时钟频率是多少?lw延迟最大,即关键路径为800ns。因此,最大时钟频率为1.25GHz如何提高时钟频率?指令读取指令读寄存器ALU数据存取写寄存器理想执行时间实际执行时间addu200100200

100600800subu200100200

100600800ori200100200

100600800lw200100200200100800800sw200100200200

700800beq200100200

500800jal200

100300800jr200100

300800示例:简单的流水线电路以下是R1在3个连续时钟周期分别输入100、200、300的电路时序图7CL1CL2Y=X+1Y=X+1R1R2R3100、200、300102、202、302流水线工作过程的形式表示为清晰的表示流水线的工作过程,采用表格化的描述方式8CL1CL2CLKR1R2R31XXX1002100200101310030020110243012025302水平方向:按流水线执行顺序布局由于寄存器值的保存与传递是分析要点,同时为了简化分析过程,不单独记录组合逻辑计算结果垂直方向:寄存器在相应时钟上升沿后的值CL1CL2Y=X+1Y=X+1R1R2R3100、200、300102、202、302101、201、301回顾:MIPS数据通路的5个阶段1)取指令:IF,InstructionFetch从IM中读取指令驱动NPC更新PC2)译码:ID,InstructionDecode指令驱动RF读取寄存器值(包括立即数扩展)控制器对指令的op和funct进行译码3)执行:EX,EXecutionALU计算(load/store计算地址;其他指令则为计算)4)访存:MEM,MEMory读(或写)存储器5)回写:WB,WriteBack将ALU结果或存储器读出的数据写回寄存器堆9单周期及多周期的特点单周期所有指令的执行周期数都为1,即CPI=1存在一条非常明显的关键路径,CPU的时钟频率很低结果导致每条指令的执行时间都等最慢的那条指令的执行时间多周期通过插入寄存器,解决了单周期时钟频率低的的不足数据通路每次只执行一条指令,功能部件利用率低示例:add进行到执行阶段时,IM和RF都处于空闲状态CPI:CyclePerInstruction10流水线架构模型单周期数据通路架构模型流水线架通过插入多个寄存器,从而在物理上将单周期的关键路径切割为若干段单周期数据通路ALU寄存器堆

数据存储器

指令存储器寄存器堆PC取指令译码/读操作数执行访存回写IFIDEXMEMWB

RF再次出现的目的在于为了更醒目的表达回写阶段ALU寄存器堆

数据存储器流水线数据通路

指令存储器寄存器堆PC取指令译码/读操作数执行访存回写IFIDEXMEMWB关键路径11流水线执行特点理论上,流水线每个cycle都从IM中读取一条新指令,同时将已在流水线里的指令向前推进一个阶段多条指令在数据通路中,但同一时刻占用不同的资源(即处于不同阶段)对于N级流水线,单条指令执行周期数均为N少数控制流指令除外(如分支类指令、跳转类指令)理论上,当流水线充满后,每个cycle可以执行完一条指令123456789指令N取指令读操作数执行访存回写指令N+1取指令读操作数执行访存回写指令N+2取指令读操作数执行访存回写。。。时钟周期指令序列12流水线性能假设采用单周期时的性能参数,流水线的时钟频率是多少?单周期:lw是关键路径,延迟为800ps,因此时钟频率上限为1.25GHz流水线:各段最大延迟为200ps,即因此时钟频率上限为5GHz指令读取指令读寄存器ALU数据存取写寄存器addu200100200

100subu200100200

100ori200100200

100lw200100200200100sw200100200200

beq200100200

jal200

100jr200100

13流水线性能单周期:每个时钟周期800ps,主频1.25GHz流水线:每个时钟周期200ps,主频5GHz时间指令序列200400600800100012001400lw取指令RegALU访存Reglw200ps取指令Reg执行访存Reglw200ps取指令Reg执行访存Reg1000ps时间指令序列2004006008001000120014001600lw取指令RegALU访存Reglw800ps取指令RegALU访存Reglw800ps取指令...14指令级并行15流水线使得CPU可以在同一时刻执行多条指令多条指令同时运行各功能部件利用率高大幅度提高了CPU的吞吐率这种技术被称为指令级并行ILP:InstructionLevelParallelism流水线的基本特性理想加速比=流水线级数假设单周期数据通路均匀切分为N段,则流水线性能是单周期的N倍!流水线特点流水线改善的是吞吐率理论上,当流水线充满后,每个时钟周期可以执行完一条指令流水线不改善单条指令执行周期数如果各流水段执行时间不平衡,则加速比下降流水线时钟频率受限于最慢的流水段填充流水线和排放流水线,均会影响吞吐率,也会导致加速比下降

16指令集对流水线设计的影响MIPS指令集是面向流水线架构设计的所有的指令都是32位取指和译码都能在一个周期内完成指令格式种类少且规整,2个源寄存器的位置保持不变这使得读取操作数和译码可以同时执行存储器操作只有load和store第3拍计算地址,第4拍访存存储器操作是地址对齐的有利于与主存的协同设计,且访存周期数固定17目录流水线概述流水线数据通路准备工作流水线控制流水线冒险流水线性能分析2种CPU模型对比18MIPS-C0指令集加减法指令addurd,rs,rtsuburd,rs,rt立即数指令orirt,rs,imm16存储访问指令lwrt,rs,imm16swrt,rs,imm16分支指令beqrs,rt,imm16函数调用指令jaltarget函数返回指令jrrs312625212016151110650oprsrtrdshamtfunct312625212016151110650oprsrtimm16312625212016151110650oprsrtimm163126250opimm26312625212016151110650oprsrtimm1631262521201110650oprs000000000000000funct19单周期数据通路技术处理1:将RF分为读出和写入两个环节来表示RF(R)代表RF用于读出数据;RF(W)代表RF用于写入数据技术处理2:NPC设置了Imm16和Imm26两个输入,分别对应beq和jal的PC计算需求不合并两个输入信号,有助于后续的分析ALUZeroEXT01AB20:1625:2101201215:0015:1120:161F25:0015:00A3RF(R)RD1RD2A1A2A3WDIMADPCNPCPC4PCNPCPC4BrImm16RAImm26RF(W)RD1RD2A1A2A3WDDMARDWD20方法1:采用相邻两级名字组合的方式优点:各级寄存器的位置非常清晰缺点:当需要标记位于各级寄存器的指令某些信息时,名字会非常的长流水线寄存器命名ALU寄存器堆

数据存储器

指令存储器寄存器堆PC取指令译码/读操作数执行访存回写IFIDEXMEMWBIF/IDID/EXEX/MEMMEM/WB21方法2:用各级功能的某个字母命名优点:当需要标记位于各级寄存器的指令某些信息时,名字非常简洁流水线寄存器命名ALU寄存器堆

数据存储器

指令存储器寄存器堆PC取指令译码/读操作数执行访存回写IFIDEXMEMWBDEMW22流水线信号命名命名规范:信号名的末尾添加特定字母这种命名方式既保留了信号的基本语义,又清晰的区分了信号所在阶段示例:1)NPC输出的PC4;2)指令[20:16]与[15:11]产生的目的寄存器编号A3NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDEMWDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3W23时钟驱动的流水线时空图24用于精确分析指令/周期/寄存器3者关系指令何时处于何阶段理想情况下,在clk5后流水线全部充满所有部件都在执行指令:不同指令位于不同部件相对PC的地址偏移IF级ID级EX级MEM级WB级指令CLKPCIMDEMWRF0Instr1

104Instr1Instr14Instr2248Instr2Instr2Instr18Instr331212Instr3Instr3Instr2Instr112Instr441216Instr4Instr4Instr3Instr2Instr

116Instr5

51620Instr5Instr5Instr4Instr3Instr2Instr120Instr6

61620Instr6Instr6Instr5Instr4Instr3Instr2目录流水线概述流水线数据通路lw的流水线执行过程流水线控制流水线冒险流水线性能分析2种CPU模型对比25示例:lw执行过程1/5第1个后PC驱动IM读取指令,lw写入DPC驱动NPC计算,将PC+4写入PCNPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDEMWPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WD寄存器被写入组合逻辑正在工作地址指令CLKPCDEMWRF00lw10004lw26示例:lw执行过程2/5第2个后D驱动RF读取操作数,结果写入ED驱动EXT计算扩展的立即数,结果写入入ENPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDMWPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WDE地址指令CLKPCDEMWRF00lw10004lw0420408lw27示例:lw执行过程3/5第3个后E驱动ALU计算,结果写入MNPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDWPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WDEM地址指令CLKPCDEMWRF00lw10004lw0420408lw0830812lw28示例:lw执行过程4/5第4个后M驱动DM读取数据,结果写入WNPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WDEMW地址指令CLKPCDEMWRF00lw10004lw0420408lw0830812lw1241216lw29示例:lw执行过程5/5第5个后W将结果写入RFNPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WDEMW寄存器被写入组合逻辑正在工作30地址指令CLKPCDEMWRF00lw10004lw0420408lw0830812lw1241216lw1651620I5更新目录流水线概述流水线数据通路D级能否读出W级写入RF的值?流水线冒险流水线性能分析2种CPU模型对比31程序员视角的指令执行结果考察如下指令序列假设1:$1初值为7,lw执行后$1值为8假设2:除lw外,其他指令均与$1无关从程序员视角,add与sub读取$1时,所读取的结果均应为8NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWD0lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6

$1的初值为7

lw执行后$1为8addI3I2lw32第1个

前的初始状态1)PC为00,指向lw2)IM输出指令lw3)各级流水寄存器均为空4)$1的值为7NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWD空空空空0lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6假设$1的初值为7假设lw执行后$1为800lw733CLKPCDEMW$1007第1个后1)PC自增变为042)IM输出指令I23)lw进入D级NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWDlw空空空0lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6假设$1的初值为7假设lw执行后$1为804I2734CLKPCDEMW$110004lw72345第2个后1)PC变为082)IM输出指令I33)lw进入E级,I2进入DNPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWDI2lw空空0lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6假设$1的初值为7假设lw执行后$1为808I3735CLKPCDEMW$110004lw720408I2lw7345第3个后1)PC变为122)IM输出指令add3)lw进入M级,I3进入D由于lw进入M后就开始读取DM,因此DM的输出值为8NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWDI3I2lw空0lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6假设$1的初值为7假设lw执行后$1为812add8736CLKPCDEMW$110004lw720408I2lw730812I3I2lw745第4个后1)PC变为162)IM输出指令sub3)lw进入W级,add进入D由于add进入D后就开始读取RF,因此RF输出的$1值为7NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWDaddI3I2lw0lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6假设$1的初值为7假设lw执行后$1为816sub78737CLKPCDEMW$110004lw720408I2lw730812I3I2lw7412167@addI3I28@lw75第4个后,第5个前观察RF内部1)$1的D输入为lw的回写数据,即82)由于没来到,因此$1尚未被写入,add读出的$1仍然输出7NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWDaddI3I2lw0lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6假设$1的初值为7假设lw执行后$1为816sub78写入读出7787lwadd38CLKPCDEMW$110004lw720408I2lw730812I3I2lw7412167@addI3I28@lw75CLKPCDEMW$110004lw720408I2lw730812I3I2lw7412167@addI3I28@lw7516208@sub7@addI3I28第5个后到来时,3个行为同时发生:1)$1写入82)add读出的7写入E3)sub进入Dsub读出的是正确的8NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWDsubaddI3I20lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6假设$1的初值为7假设lw执行后$1为820I67写入读出X88839结论:多条指令同时读写同一个寄存器时,会产生一致性问题出错原因:后发R操作在先发W操作之前完成解决问题的方法:转发(在数据冒险部分介绍)0lw$1,0(XX)4I28I312addXX,$1,XX16subXX,$1,XX20I6假设$1的初值为7假设lw执行后$1为8NPCPC4IMADPCRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WEMWDadd空空lw修改RF设计判断条件:写入寄存器与读出寄存器相同A3==A1或者A3==A2执行操作:RD1/RD2输出WD(而不是寄存器值)本质:内部转发问题:是否有遗漏条件?提示:虽然没有RF的写入操作,但是A3恰好等A1/A2!41R1R31013101310131&&ENENA3WDWEA1A2XCLK0101RD1RD2==A3A3&A3=A1WE增加WE由于后续流水线冒险分析方法能以统一的方式来处理此类问题,因此本课程建议不采用该方法。目录流水线概述流水线数据通路信息同步流水线控制流水线冒险流水线性能分析2种CPU模型对比42示例:Beq错误的计算地址第3个

后beq进入M级,add进入D级,PC变为12NPC计算地址时会用到3种完全无关的信息beq的Zero、add的偏移、ori指令的PC4FNPCPC4IMADRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4WA3DA3EA3MA3WDEWbeqsubaddPC地址指令CLKPCDEMWRF00beq10004beq04sub20408subbeq08add30812addsubbeqMQ:PC4F的值是多少?PC4M0beq4sub8add12ori43确保同步:修正beq的数据通路出错原因:指令的多个相关信息没有同步传递为了确保beq正确计算地址,必须做到2点1)beq的所有相关信息(包括16位偏移)必须同步传递2)必须使用同级的相关信息计算地址NPCPC4IMADRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WDEMWbeqsubaddPC15:00M0beq4sub8add12ori目录流水线概述流水线数据通路性能流水线控制流水线冒险流水线性能分析2种CPU模型对比45目录流水线概述流水线数据通路流水线控制流水线冒险流水线性能分析2种CPU模型对比46流水的主控制信号与寄存器值与编号类似,主控制信号也是指令的一部分,必须同步传递主控制信号产生方式与单周期完全相同NPCPC4IMADRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4MPC4WA3DA3EA3MA3WDEMWPCop,funct主控制器RFWrDRFWrERFWrMRFWrWDMWrDDMWrEDMWrMALUOpDALUOpE控制信号的额外含义单周期控制信号只是用于控制功能部件执行正确的功能示例:RFWr有效意味着可以当前指令需要写RF流水线除了具有单周期的相同意义外,控制信号在各级寄存器中流水传递,还代表了指令执行到哪个阶段示例:RFWrW有效,表明load类、R型计算类、I型计算类等指令已经进入W级流水线寄存器了,即指令执行到最后一个流水段了Q:为什么需要了解指令进入到哪个阶段了?已经在流水线中的多条指令,彼此之间可能会发生冲突。为此,需要了解各条指令在流水线中的所处位置。48目录流水线概述流水线数据通路流水线控制流水线冒险流水线性能分析2种CPU模型对比49概述结构冒险需要的资源被占用数据冒险指令之间存在数据依赖后继指令需要等待前序指令执行结束控制冒险指令流的方向选择依赖于前序指令执行结果50目录流水线概述流水线数据通路流水线控制流水线冒险结构冒险流水线性能分析2种CPU模型对比51后继指令需要的资源被前序指令占用,导致资源冲突第3个后/第4个前:PC驱动IM以读指令;M级lw驱动DM以读数据如果IM与DM不分离(即只有一个存储器),则必然导致资源冲突为此,流水线要求数据和指令必须分离存储这种结构实际上对应了分离的一级指令cache和一级数据cache(相关内容参见后续存储系统)结构冒险:取指令与访存相对PC的地址偏移IMRFALUDM指令CLKPCDEMWRF0lw10004lw4add20408addlw8sub308

12subaddlw12or412

16orsubaddlw16and516

20andorsubaddlw后继指令需要的资源被前序指令占用,导致资源冲突第4个后/第5个前:D级or驱动RF要读数据;W级lw驱动RF要写数据RF设计:读端口与写端口分离(当前的设计方案)结论:RF不会成为瓶颈结构冒险:读寄存器与写寄存器相对PC的地址偏移IMRFALUDM指令CLKPCDEMWRF0lw10004lw4add20408addlw8sub308

12subaddlw12or412

16orsubaddlw16and516

20andorsubaddlw目录流水线概述流水线数据通路流水线控制流水线冒险数据冒险流水线性能分析2种CPU模型对比54基于寄存器的数据相关当2条指令都读写同一个寄存器时,这就产生了数据相关程序中各语句通过变量完成信息传递对变量的读写转变为对寄存器的读写读写对寄存器的影响读(Read):不会改变寄存器的值写(Write):会改变寄存器的值(破坏性操作)对于同一个寄存器,有4种读写组合:R-R,W-W,R-W,W-R字母先后代表读写的先后顺序示例lw-sub:在$t0上是W-Radd-sub:在$t2上是W-Wlw$t0,0($t1)sub$t3,$t0,$t2and$t5,$t0,$t4or$t7,$t0,$t6add$t1,$t2,$t3lw$t0,0($t1)W:写$t0add$t2,0($s0)W:写$t2sub$t2,$t0,$t4R:读$t0W:写$t255流水线带来的数据一致性问题程序员逻辑:后续指令必须获取到前序指令的结果1)前序指令未执行,后继指令不执行2)前序指令执行结束,后继指令才执行单周期:数据通路每次只能执行一条指令由于数据通路不能同时执行多条指令,因此必然是前序指令全部执行结束后才会执行后继指令CPU执行逻辑与程序员逻辑完全一致流水线:数据通路同时执行多条指令流水线产生一致性问题:后执行的指令是否一定能获取先执行的指令的结果?56流水线执行指令与程序正确性案例分析add-sub:sub第2周期时要读取$1,但add在第5周期才完成回写结果add-or:or第3周期时要读取$1,但add在第5周期才完成回写结果add-and:两条指令在同一周期访问$1(一个读一个写),and能否读出正确结果?add-xor:add第5个

写入结果,xor第5周期(第5个之后)读取结果,因此执行正确

57偏移IMRFALUDM指令CLKPCDEMWRF0add$1,$2,$310004add4sub$4,$1,$220408subadd8or$5,$1,$2308

12orsubadd12and$6,$1,$2412

16andorsubadd16xor$7,$1,$2516

20xorandorsubadd事实1:计算结果在回写前已经产生了新的计算结果:先出现在流水线寄存器,然后才会保存到RF示例:add进入D级后计算结果需要4个周期写入寄存器堆但2个周期后,计算结果已经出现在M级了计算结果add1234地址指令0add$1,$2,$34sub$4,$1,$28or$5,$1,$212and$6,$1,$216xor$7,$1,$2ALU寄存器堆

数据存储器

指令存储器寄存器堆PC58事实2:功能部件是寄存器值的最终使用者如何理解sub的正确性?示例:假设RF中的$1值为5,add的计算结果为4读取寄存器值是手段,目的是服务于后续的使用当sub进入E后,只要ALU使用的是M级的结果而非E级的值,则正确性就能保证add计算结果sub地址指令0add$1,$2,$34sub$4,$1,$28or$5,$1,$212and$6,$1,$216xor$7,$1,$2ALU寄存器堆

数据存储器

指令存储器寄存器堆PC54459从计算结果产生角度观察1/3示例:周期1~add进入流水线2个时钟周期后,ALU的计算结果(4)将保存在M级寄存器(意味着add进入M级寄存器)RF(读)ALUDM地址指令CLKPCIMDEMWRF0add$1,$2,$310addadd4写$122个周期后,$1的最新值将产生ALU寄存器堆

数据存储器指令存储器寄存器堆PCadd周期34add周期15

假设:$1的值为5,add的计算结果为460从功能部件使用寄存器值角度观察2/3示例:周期2~add进入E级经过1个时钟周期后,结果产生的时间减少1个周期RF(读)ALUDM地址指令CLKPCIMDEMWRF0add$1,$2,$310addadd4sub写$124sub$4,$1,$224subadd8or写$11ALU寄存器堆

数据存储器指令存储器寄存器堆PCadd61从功能部件使用寄存器值角度观察3/3示例:周期2~sub进入流水线当sub进入D级后,其将在下个周期(周期3)进入E级从ALU角度,意味着再经过1个周期就要用$1的值RF(读)ALUDM地址指令CLKPCIMDEMWRF0add$1,$2,$310addadd4sub写$124sub$4,$1,$224subsubadd8or读$11写$111个周期后:sub进入E,ALU要用$1值ALU寄存器堆

数据存储器指令存储器寄存器堆PCsubadd62数据冒险解决策略—转发1/2转发(或旁路):将尚未写入RF但已经暂存在流水线寄存器中的计算结果传递给相关功能部件(或流水线寄存器)的技术示例:M级向ALU的A输入端的转发这个转发电路就能很好的解决add-sub间的数据冒险转发的2个基本要点将M级(后级)保存的计算结果向E级(前级)的ALU(功能单元)传递如果E级指令(sub)读的寄存器与M级指令(add)写的寄存器是同一寄存器时,则选择转发的计算结果,否则选择E级传递的寄存器值ALU寄存器堆

数据存储器指令存储器寄存器堆PCsubadd0163数据冒险解决策略—转发2/2在设计转发时,要考虑完备性示例:ALU的A输入端ALU处于E级,因此M级和W级均可能保存有前序指令的计算结果只有将M级和W级均转发到E级,才确保了相关组合指令的正确执行M

E转发:能够解决的相关例子W

E转发:能够解决的相关例子ALU寄存器堆

数据存储器指令存储器寄存器堆PCadd$1,$2,$3XXXor$5,$1,$2add$1,$2,$3sub

$4,$1,$664Load导致的数据冒险周期1:lw进入流水线3个周期后,W级将保存lw从DM中读出的数据RF(读)ALUDM地址指令CLKPCIMDEMWRF0lw$t0,0($t1)10lwlw4sub写t034sub$t3,$t0,$t228and$t5,$t0,$t4312or$t7,$t0,$t6416add$t1,$t2,$t3565Load导致的数据冒险周期2:sub进入流水线sub再过1个周期到达E时,ALU要用$t0而lw还需要2个周期才能产生结果结论:新值产生太晚!除暂停sub,无任何办法能消除这个冲突RF(读)ALUDM地址指令CLKPCIMDEMWRF0lw$t0,0($t1)10lwlw4sub写t034sub$t3,$t0,$t224subsublw8and读t01写t028and$t5,$t0,$t4312or$t7,$t0,$t6416add$t1,$t2,$t3566Load导致的数据冒险周期3:插入NOP所谓的NOP,就是清空E级,相当于插入空拍注意,除了清空E级,还需要冻结PC(即PC必须保持不变)由于插入了NOP,因此冲突解除;转发机制将在周期4发挥作用RF(读)ALUDM地址指令CLKPCIMDEMWRF0lw$t0,0($t1)10lwlw4sub写t034sub$t3,$t0,$t224subsublw8and读t01写t028and$t5,$t0,$t438andsubnoplw8and读t01写t0112or$t7,$t0,$t6416add$t1,$t2,$t3567Load导致的数据冒险周期4-1:sub到达Elw:从DM中读出的数据($t0新值)被写入Wsub:选择来自W级转发的计算结果RF(读)ALUDM地址指令CLKPCIMDEMWRF0lw$t0,0($t1)10lwlw4sub写t034sub$t3,$t0,$t224subsublw8and读t01写t028and$t5,$t0,$t438andsubnoplw8and读t01写t0112or$t7,$t0,$t648subnoplw12读t00新t0016add$t1,$t2,$t35计算结果68Load导致的数据冒险周期4-2:and进入流水线lw-xxx-and同样需要转发,用W级计算结果替代and读出的$1注意:这个转发的目的地不是功能单元,而是E级流水线寄存器RF(读)ALUDM地址指令CLKPCIMDEMWRF0lw$t0,0($t1)10lwlw4sub写t034sub$t3,$t0,$t224subsublw8and读t01写t028and$t5,$t0,$t438andsubnoplw8and读t01写t0112or$t7,$t0,$t648andandsubnoplw12or读t01读t00新t0016add$t1,$t2,$t35计算结果69Load导致的数据冒险周期5:or进入流水线由于流水线中没有写$t0的指令了,这意味着RF中的$t0是最新值or指令可以安全的从RF中读取$t0RF(读)ALUDM地址指令CLKPCIMDEMWRF0lw$t0,0($t1)10lwlw4sub写t034sub$t3,$t0,$t224subsublw8and读t01写t028and$t5,$t0,$t438andsubnoplw8and读t01写t0112or$t7,$t0,$t648andandsubnoplw12or读t01读t00写t0016add$t1,$t2,$t3512ororandsubnop更新t016add读t0170详细的转发电路及其控制最新结果:可能出现在M和W使用结果:D、E、M各级可能的位置D级:RS寄存器值、RT寄存器值E级:ALU的A、B;RT寄存器值M级:DM的WDRFA1A2A3WDRD1RD2ALUDMARDWDABDEMWM级ALU计算结果W级回写结果D级被转发RS寄存器值RT寄存器值RS寄存器值RT寄存器值E级被转发ALU的AALU的BRT寄存器值ALU的AALU的BRT寄存器值M级被转发DM的WD71冒险控制器基本功能:检测和分析各类冒险,并控制流水线的执行先讨论应对数据冒险的基本控制方法RsRtRdRFA1A2A3WDRD1RD2ALUDMARDWDABDstW冒险控制器DstDRsERtEDstERtMDstM流水线控制信号...72数据冒险的检测与控制基本策略RFA1A2A3WDRD1RD2ALUDMARDWDABDEMWD级分析与E/M/W的相关性。若转发无法解决则暂停,直至转发可以解决相关E级E级已无暂停问题,只需要分析与M/W的相关性,决定是否转发即可M级M级已无暂停问题,只需要分析与W的相关性,决定是否转发即可73数据冒险的检测与控制:暂停(以RS为例)1/10对于D级指令来说,哪些前序指令会导致暂停?类别1:计算类指令(如add,addi)如果由E级指令产生计算结果,则通道

可以提供转发如果由M级指令产生计算结果,则通道可以提供转发如果由W级指令产生计算结果,则通道3可以提供转发RFA1A2A3WDRD1RD2ALUDMARDWDABDEMW

74数据冒险的检测与控制:暂停(以RS为例)2/10对于D级指令来说,哪些前序指令会导致暂停?类别2:Load指令(如lw/lh/lhu/lb/lbu)Load在E级:当D级指令进入E时,Load进入M,结果尚未产生,只能暂停RFA1A2A3WDRD1RD2ALUDMARDWDABDLoadMW暂停1个周期后,转发就可以发挥作用了75数据冒险的检测与控制:暂停(以RS为例)3/10对于D级指令来说,哪些前序指令会导致暂停?类别2:Load指令(如lw/lh/lhu/lb/lbu)Load在W级:由于结果已经在W级了,因此通道

转发Load在M级:当D级指令进入E时,Load的结果存入W,通道

转发Load在E级:暂停1个周期RFA1A2A3WDRD1RD2ALUDMARDWDABD

XMWELoad3Load2Load176数据冒险的检测与控制:暂停(以RS为例)4/10Load导致的暂停有哪些条件?条件1:D级为要读寄存器的指令条件2:E级为load类指令条件3:读的寄存器==写的寄存器RFA1A2A3WDRD1RD2ALUDMARDWDABDLoadMWQ1:哪些指令读寄存器?Q2:哪些指令是load类指令?77数据冒险的检测与控制:暂停(以RS为例)5/10暂停的检测:表达式RFA1A2A3WDRD1RD2ALUDMARDWDABDLoadMWStall=(add+sub+…+lw)&lwE&(A1==A3E)寄存器编号相同E级为Load类D级会读rs寄存器的指令78数据冒险的检测与控制:暂停(以RS为例)6/10暂停的执行动作

冻结D:sub停留在D,不得前进

清除E:E级整体清0,等价于插入NOP

禁止PC:防止PC继续计数,PC应保持为PC+479RFA1A2A3WDRD1RD2ALUDMARDWDABsubLoadMWIMADPCNPC地址指令0lw

$t0,0($t1)4sub$t3,$t0,$t28and$t5,$t0,$t412or$t7,$t0,$t616add$t1,$t2,$t3and812数据冒险的检测与控制:暂停(以RS为例)7/10暂停的执行动作

冻结D:sub停留在D,不得前进

清除E:E级整体清0,等价于插入NOP

禁止PC:防止PC继续计数,PC应保持为PC+480RFA1A2A3WDRD1RD2ALUDMARDWDABMWIMADPCNPCEN寄存器:使能功能D.en数据通路将D寄存器修改为使能型寄存器控制器增加D寄存器使能信号D.en数据冒险的检测与控制:暂停(以RS为例)8/10暂停的执行动作

冻结D:sub停留在D,不得前进

清除E:E级整体清0,等价于插入NOP

禁止PC:防止PC继续计数,PC应保持为PC+481RFA1A2A3WDRD1RD2ALUDMARDWDABMWIMADPCNPCCLR寄存器:清除功能E.clr数据通路将E寄存器修改为复位型寄存器控制器增加E寄存器清除信号E.clr数据冒险的检测与控制:暂停(以RS为例)9/10暂停的执行动作

冻结D:sub停留在D,不得前进

清除E:E级整体清0,等价于插入NOP

禁止PC:防止PC继续计数,PC应保持为PC+482RFA1A2A3WDRD1RD2ALUDMARDWDABMWIMADPCNPCEN寄存器:清除功能PC.en数据通路将PC修改为使能型寄存器控制器增加PC使能信号PC.en数据冒险的检测与控制:暂停(以RS为例)10/10暂停的执行动作:控制信号表达式

冻结D:sub停留在D,不得前进

清除E:E级整体清0,等价于插入NOP

禁止PC:防止PC继续计数,PC应保持为PC+483RFA1A2A3WDRD1RD2ALUDMARDWDABMWPC.en=!StallD.en=!StallE.clr=StallDEIMADPCNPC编译优化编译优化:重排序指令序列从而避免load类相关C代码:A=B+E;C=B+F;#优化前:lw $t1,0($t0)lw $t2,4($t0)add $t3,$t1,$t2sw $t3,12($t0)lw $t4,8($t0)add $t5,$t1,$t4sw $t5,16($t0)#优化后:lw $t1,0($t0)lw $t2,4($t0)lw $t4,8($t0)add $t3,$t1,$t2sw $t3,12($t0)add $t5,$t1,$t4sw $t5,16($t0)Stall!Stall!13周期11周期84编译优化如果load的后继指令与load相关,则需要暂停1个周期这个暂停周期被称为加载延迟槽(loaddelayslot)如果将与load无关的指令放置在load类指令后,则就不需要暂停了这就是编译优化调度的指令,不仅要考虑load无关性,还需要确保程序员视角的正确性85目录流水线概述流水线数据通路流水线控制流水线冒险控制冒险流水线性能分析2种CPU模型对比86控制冒险分支指令(beq,bne)影响控制流顺序取指还是转移取指取决于ALU的比较结果在比较结果产生以前,D级取指无法确保是正确的简单方案:暂停分支指令直至产生正确的PC值新的问题:需要等待多长时间?87B指令冒险造成的停顿代价简单暂停导致3个NOPZero、PC4、偏移均在M级,故PC在clk4才能加载正确值D级在clk5才能存入转移指令(即lw)NPCPC4IMADRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4WA3DA3EA3MA3WDEMWPCRF(读)ALUDM地址指令CLKPCIMDEMWRF0beq$1,$3,24104beqandbeq4and$12,$2,$5244andandnop(1)beq8or$13,$6,$2344andandnop(2)nop(1)beq12add$14,$2,$24428andlwnop(3)nop(2)nop(1)52832lwXXXlwnop(3)nop(2)nop(1)28lw$4,100($7)PC4Mbeq15:00MB指令冒险造成的停顿代价简单暂停导致3个NOPZero、PC4、偏移均在M级,故PC在clk4才能加载正确值D级在clk5才能存入转移指令(即lw)NPCPC4IMADRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4WA3DA3EA3MA3WDEMWPCRF(读)ALUDM地址指令CLKPCIMDEMWRF0beq$1,$3,24104beqandbeq4and$12,$2,$5244andandnop(1)beq8or$13,$6,$2344andandnop(2)nop(1)beq12add$14,$2,$24428andlwnop(3)nop(2)nop(1)52832lwXXXlwnop(3)nop(2)nop(1)28lw$4,100($7)PC4Mbeq15:00MCLRClr表达式?方案1:假定分支不发生措施1:即使在D级发现是B指令也不停顿措施2:然后根据B指令结果,决定是否清除3条后继指令清除,即使得and/or/add不能前进NPCPC4IMADRF(R)RD1RD2EXT01DMARDWDALUZeroAB20:1625:21012012PC15:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm26A1A2A3WDRF(W)RD1RD2A1A2A3WDPC4FPC4DPC4EPC4WA3DA3EA3MA3WDEMWPCPC4Mbeq15:00MCLRClr表达式?地址指令0beq$1,$3,244and$12,$2,$58or$13,$6,$212add$14,$2,$228lw$4,50($7)andoradd+12完整流水数据通路1)结果在W级:向D、E、M的各处进行转发2)结果在M级:向D、E的各处进行转发NPCPC4IMADPCRF(R)RD1RD2ALUZeroEXT01DMARDWDAB20:1625:21012012PC01201215:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm2601201201A3A1A2A3WDRF(W)RD1RD2A1A2A3WD完整版数据通路:beq前移Beq前移NPCPC4IMADPCRF(R)A1A2A3WDRD1RD2ALUZeroEXT01DMARDWDAB20:1625:21012012PCRF(W)A1A2A3WDRD1RD2=01201215:0015:1120:161F25:0015:00NPCPC4BrImm16RAImm2601201201A3方案2:缩短分支延迟1/3在D级放置比较器,尽快得到B指令结果B指令结果可以提前2个clock得到B指令后继可能被废弃的指令减少为1条当需要转移时,清除D级即可RF(读)ALUDM地址指令CLKPCIMDEMWRF0beq$1,$3,24104beqandbeq4and$12,$2,$5244andandnop(1)beq8or$13,$6,$2344andandnop(2)nop(1)beq12add$14,$2,$24428andlwnop(3)nop(2)nop(1)52832lwXXXlwnop(3)nop(2)nop(1)28lw$4,100($7)93RF(读)ALUDM地址指令CLKPCIMDEMWRF0beq$1,$3,24104beqandbeq4and$12

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论