指令流水线ppt课件

上传人:钟*** 文档编号:5845454 上传时间:2020-02-09 格式:PPT 页数:129 大小:4.96MB
返回 下载 相关 举报
指令流水线ppt课件_第1页
第1页 / 共129页
指令流水线ppt课件_第2页
第2页 / 共129页
指令流水线ppt课件_第3页
第3页 / 共129页
点击查看更多>>
资源描述
第一讲流水线数据通路和控制逻辑第二讲流水线冒险处理第三讲高级流水线技术 Ch7 InstructionPipeline指令流水线 第一讲流水线数据通路和控制 日常生活中的流水线处理例子 洗衣服单周期处理器模型和流水线性能比较什么样的指令集适合于流水线方式执行如何设计流水线数据通路以MIPS指令子集来说明如何设计流水线控制逻辑分析每条指令执行过程中的控制信号给出控制器设计过程流水线冒险的概念 主要内容 复习 ASingleCycleProcessor 32 ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 3232 bitRegisters Rs Rt Rt Rd RegDst Extender Mux Mux 32 16 imm16 ALUSrc ExtOp Mux MemtoReg Clk DataIn WrEn 32 Adr DataMemory 32 MemWr ALU Zero 0 1 0 1 0 1 InstructionFetchUnit Clk Instruction Jump Branch Imm16 Rd MainControl op ALUControl func ALUop 3 RegDst ALUSrc Instr Zero 3 复习 MultipleCycleProcessor MCP 一个功能部件在一个指令周期中可以被使用多次 IdealMemory WrAdr Din RAdr 32 32 32 Dout MemWr 32 32 ALUOp InstructionReg 32 IRWr 32 RegFile Ra Rw busW Rb 5 5 32 busA 32 busB RegWr Rs Rt Rt Rd PCWr ALUSelA RegDst 32 PC MemtoReg ExtOp 32 0 1 2 3 4 Imm 32 ALUSelB Mux 1 0 Zero Zero PCWrCond PCSrc BrWr 32 IorD 复习 TimingDiagramofaLoadInstruction Clk PC Rs Rt Rd Op Func Clk to Q ALUctr InstructionMemoryAccessTime OldValue NewValue RegWr OldValue NewValue DelaythroughControlLogic busA RegisterFileAccessTime OldValue NewValue busB ALUDelay OldValue NewValue OldValue NewValue NewValue OldValue ExtOp OldValue NewValue ALUSrc OldValue NewValue Address OldValue NewValue busW OldValue New DelaythroughExtender Mux DataMemoryAccessTime InstructionFetch InstrDecode Reg Fetch Address RegWr DataMemory RegisterFileWriteTime 1 3 2 LaundryExampleAnn Brian Cathy Daveeachhaveoneloadofclothestowash dry andfoldWashertakes30minutesDryertakes40minutes Folder takes20minutes Pipelining It sNatural 一个日常生活中的例子 洗衣服 如果让你来管理洗衣店 你会如何安排 SequentialLaundry 串行方式 串行方式下 4批衣服需要花费6小时 4x 30 40 20 360分钟 N批衣服 需花费的时间为Nx 30 40 20 90N如果用流水线方式洗衣服 则花多少时间呢 30 40 20 30 40 20 30 40 20 30 40 20 6PM 7 8 9 10 11 Midnight TaskOrder Time PipelinedLaundry StartworkASAP 串行为90分钟x4 6小时N批则为90 xN分钟 6PM 7 8 9 10 11 Midnight TaskOrder Time 流水线方式下 需30 4x40 20 210分 3 5小时 如果有N批衣服呢 30 Nx40 20分钟假定每一步时间均衡 则比串行方式提高约3倍 流水方式下 所用时间主要与最长阶段的时间有关 复习 Load指令的5个阶段 Ifetch 取指 取指令并计算PC 4 用到哪些部件 Reg Dec 取数和译码 取数同时译码 用到哪些部件 Exec 执行 计算内存单元地址 用到哪些部件 Mem 读存储器 从数据存储器中读 用到哪些部件 Wr 写寄存器 将数据写到寄存器中 用到哪些部件 指令存储器 Adder 寄存器堆读口 指令译码器 扩展器 ALU 数据存储器 寄存器堆写口 这里寄存器堆的读口和写口可看成两个不同的部件 指令的执行过程是否和 洗衣 过程类似 是否可以采用类似方式来执行指令呢 单周期指令模型与流水模型的性能比较 假定以下每步操作所花时间为 取指 2ns寄存器读 1nsALU操作 2ns存储器读 2ns寄存器写 1ns单周期模型每条指令在一个时钟周期内完成时钟周期等于最长的lw指令的执行时间 即 8ns串行执行时 N条指令的执行时间为 8Nns流水线性能时钟周期等于最长阶段所花时间为 2ns每条指令的执行时间为 2nsx5 10nsN条指令的执行时间为 4 N x2ns在N很大时 比串行方式提高约4倍若各阶段操作均衡 例如 各阶段都是2ns 则提高倍数为5倍 Load指令执行时间总计为 8ns 假定控制单元 PC访问 信号传递等没有延迟 流水线方式下 单条指令执行时间不能缩短 但能大大提高指令吞吐率 流水线指令集的设计 具有什么特征的指令集有利于流水线执行呢 长度尽量一致 有利于简化取指令和指令译码操作MIPS指令32位 下址计算方便 PC 4X86指令从1字节到17字节不等 使取指部件极其复杂格式少 且源寄存器位置相同 有利于在指令未知时就可取操作数MIPS指令的rs和rt位置一定 在指令译码时就可读rs和rt的值若位置随指令不同而不同 则需先确定指令类型才能取寄存器编号load Store指令才能访问存储器 有利于减少操作步骤 规整流水线lw sw指令的地址计算和运算指令的执行步骤规整在同一个周期X86运算类指令操作数可为内存数据 需计算地址 访存 执行内存中 对齐 存放 有利于减少访存次数和流水线的规整总之 规整 简单和一致等特性有利于指令的流水线执行 Load指令的流水线 Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 2ndlw 3rdlw 每个周期有五个功能部件同时在工作后面指令在前面完成取指后马上开始每个load指令仍然需要五个周期完成但是 吞吐率 throughput 提高许多 理想情况下 有 每个周期有一条指令进入流水线每个周期都有一条指令完成每条指令的有效周期 CPI 为1 R type指令的4个阶段 Ifetch 取指令并计算PC 4Reg Dec 从寄存器取数 同时指令在译码器进行译码Exec 在ALU中对操作数进行计算Wr ALU计算的结果写到寄存器 含R type和Load指令的流水线 上述流水线有个问题 两条指令试图同时写寄存器 因为Load在第5阶段用寄存器写口R type在第4阶段用寄存器写口把一个功能部件同时被多条指令使用的现象称为结构冒险 StrutureHazard 为了流水线能顺利工作 规定 每个功能部件每条指令只能用一次 如 写口不能用两次或以上 每个功能部件必须在相同的阶段被使用 如 写口总是在第五阶段被使用 R type R type Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 Cycle9 R type R type Load 或称为资源冲突 R type的Wr操作延后一个周期执行 加一个NOP阶段以延迟 写 操作 把 写 操作安排在第5阶段 这样使R Type的Mem阶段为空NOP 这样使流水线中的每条指令都有相同多个阶段 R type 1 2 3 4 5 Store指令的四个阶段 Ifetch 取指令并计算PC 4Reg Dec 从寄存器取数 同时指令在译码器进行译码Exec 16位立即数符号扩展后与寄存器值相加 计算主存地址Mem 将寄存器读出的数据写到主存 Wr 加一个空的写阶段 使流水线更规整 NOOP Beq的四个阶段 Ifetch 取指令并计算PC 4Reg Dec 从寄存器取数 同时指令在译码器进行译码Exec 执行阶段ALU中比较两个寄存器的大小 做减法 Adder中计算转移地址Mem 如果比较相等 则 转移目标地址写到PC NOOP Wr 加一个空写阶段 使流水线更规整 与多周期通路有什么不同 多周期通路中 在Reg Dec阶段投机进行了转移地址的计算 可以减少Branch指令的时钟数 为什么流水线中不进行 投机 计算 因为流水线中所有指令的执行阶段一样多 Branch指令无需节省时钟 因为有比它更复杂的指令 按照上述方式 把所有指令都按照最复杂的 load 指令所需的五个阶段来划分 不需要的阶段加一个 NOP 操作 APipelinedDatapath 五阶段流水线数据通路 IF IDRegister ID ExRegister Ex MemRegister Mem WrRegister PC DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw MemWr RegWr ExtOp ExecUnit busA busB Imm ALUOp ALUSrc MemtoReg 1 0 RegDst Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 1 0 下面看每条指令在流水线通路中的执行过程 Wr阶段没有DataPath吗 为什么需要这些Reg 保存每个周期执行的结果 属于内部寄存器 对程序员透明 不需作为现场保存 不包含控制逻辑 取指令 Ifetch 阶段 IF ID lw 1 100 2 ID ExRegister Ex MemRegister Mem WrRegister PC 14 DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw MemWr RegWr ExtOp ExecUnit busA busB Imm ALUOp ALUSrc MemtoReg 1 0 RegDst Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 1 0 Clk Ifetch Reg Dec Exec Mem 第10单元指令 lw 1 0 x100 2 功能 1 Mem 2 0 x100 有谁发现这里的一个假设有问题吗 下一目标 设计IUnit 功能是啥 MIPS指令的地址可能是10吗 先猜一下IUnit中有哪些功能部件 指令部件IUnit的设计 第10单元指令 lw 1 0 x100 2 随后的指令在14号单元中 IF ID lw 1 100 2 PC 14 1 0 10 InstructionMemory 4 Instruction Address Clk Ifetch Reg Dec 取指阶段有哪些控制信号 不需控制信号 因为每条指令执行功能一样 是确定的 无需根据指令的不同来控制执行不同的操作 指令部件功能 Instr Mem PC PC PC 4 应把哪些信息存到流水段寄存器IF ID中 应保存后面阶段用到的指令和PC 4的值 指令在随后阶段被送出译码 PC 4用来计算转移目标地址 译码 取数 Reg Dec 阶段 IF ID ID Ex Reg 2 0 x100 Ex MemRegister Mem WrRegister PC DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw MemWr RegWr ExtOp ExecUnit busA busB Imm ALUOp ALUSrc MemtoReg 1 0 RegDst Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 1 0 Clk Ifetch Reg Dec Exec Mem Location10 lw 1 0 x100 2 功能 1 Mem 2 0 x100 Reg Rs Reg Rt Rt Rd Imm16 PC 4等被保存在ID EXE中 该阶段有哪些控制信号 没有 因是所有指令的公共操作 故无控制信号 指令还要存ID EX中吗 不要 只要存相关信息 Load指令的地址计算阶段 IF ID ID ExRegister Ex Mem Load sAddress Mem WrRegister PC DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw MemWr RegWr ExecUnit busA busB Imm MemtoReg 1 0 Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 1 0 Clk Ifetch Reg Dec Exec Mem Location10 lw 1 0 x100 2 功能 1 Mem 2 0 x100 目的寄存器Rt不传递下去会怎样 连接到错误的目的地址 指令执行错误 猜有哪些部件 执行部件 ExecUnit 的设计 ID ExRegister Ex Mem Load sMemoryAddress ALUctr 32 busA 32 busB Extender Mux 16 imm ALUSrc ExtOp 3 ALU Zero 0 1 32 ALUout 32 3 ALUOp 2 32 PC 4 Target 32 Clk Exec Mem Adder用于计算分支指令的转移地址 RegDes 0 ALUSrc 1ALUop addu Extop 1 Load指令的各控制信号取值 执行部件功能 计算内存地址计算转移目标地址一般ALU运算 Branch指令呢 RegDes x ALUSrc 0ALUop subu Extop 1 Store指令呢 RegDes x ALUSrc 1ALUop addu Extop 1 Ori指令呢 RegDes 0 ALUSrc 1ALUop or Extop 0 R型指令呢 RegDes 1 ALUSrc 0ALUop func Extop x Load指令的存储器读 Mem 周期 IF ID ID ExRegister Ex MemRegister Mem Wr Load sData PC DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw MemWr 0 RegWr ExtOp ExecUnit busA busB Imm ALUOp ALUSrc MemtoReg 1 0 RegDst Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 0 1 0 Clk Ifetch Reg Dec Exec Mem Location10 lw 1 0 x100 2 功能 1 Mem 2 0 x100 周期以最长操作为准设计Cycle Tread 比较洗衣流水线 指令流水有什么不同 洗衣流程不能反向进行 但 该阶段有反向数据流 可能会引起冒险 以后介绍 Load指令的回写 WriteBack 阶段 IF ID ID ExRegister Ex MemRegister Mem WrRegister PC DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw MemWr RegWr 1 ExtOp ExecUnit busA busB Imm ALUOp ALUSrc MemtoReg 1 1 0 RegDst Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 1 0 Clk Ifetch Reg Dec Exec Mem Location10 lw 1 0 x100 2 功能 1 Mem 2 0 x100 Wr 各阶段所经DataPath已有 控制信号如何得到 该阶段有反向数据流 可能会引起冒险 以后介绍 流水线中的ControlSignals如何获得 主要考察 第N阶段的控制信号 它取决于是某条指令的某个阶段 N Exec Mem Wr 只有这三个阶段有控制信号 例 Load的Exec段的控制信号 Func Load sExec 为什么1st和2nd阶段没有控制信号 IF和ID阶段的功能对每条指令来说都一样 Load指令 流水线中的控制信号 在取数 译码 Reg Dec 阶段产生本指令每个阶段的所有控制信号Exec信号 ExtOp ALUSrc 在1个周期后使用Mem信号 MemWr Branch 在2个周期后使用Wr信号 MemtoReg RegWr 在3个周期后使用 各流水段部件在一个时钟内完成某条指令的某个阶段的工作 所以 控制信号也要保存在流水段寄存器中 在下个时钟到达时 把执行结果以及前面传递来的后面各阶段要用到的所有数据 如 指令 立即数 目的寄存器等 和控制信号保存到流水线寄存器中 流水线中的ControlSignals 通过对前面流水线数据通路的分析 得知 PC需要写使能吗 流水段寄存器需要写使能吗 Ifecth阶段和Dec Reg阶段都没有控制信号Exec阶段的控制信号有四个ExtOp 扩展器操作 1 符号扩展 0 零扩展ALUSrc ALU的B口来源 1 来源于扩展器 0 来源于BusBALUOp 主控制器输出 用于辅助局部ALU控制逻辑来决定ALUCtrl RegDst 指定目的寄存器 1 Rd 0 RtMem阶段的控制信号有两个MemWr DM的写信号 Store指令时为1 其他指令为0Branch 是否为分支指令 分支指令时为1 其他指令为0Wr阶段的控制信号有两个MemtoReg 寄存器的写入源 1 DM输出 0 ALU输出RegWr 寄存器堆写信号 结果写寄存器的指令都为1 其他指令为0 每个时钟都会改变PC 故不需要 每个时钟都会改变流水段寄存器 故不需要 控制逻辑Control 的设计 流水线控制逻辑的设计每条指令的控制信号在该指令执行期间变不变 谁记得单周期和多周期时各是怎样的情况 与单周期还是多周期的控制逻辑设计类似 谁记得单周期和多周期控制逻辑各是怎样设计的 设计过程控制逻辑分成两部分主控制逻辑 生成ALUop和其他控制信号局部ALU控制逻辑 根据ALUop和func字段生成ALUCtrl用真值表建立指令和控制信号之间的关系写出每个控制信号的逻辑表达式控制逻辑的输出 控制信号 在ID阶段生成 并存放在ID EX流水段寄存器中 然后每来一个时钟跟着指令传送到下一级流水段寄存器某时刻在不同阶段同时执行不同指令 不同的指令得到不同控制信号 忘记单周期和多周期控制器设计的同学 复习一下第六章 不变 单周期 蓝色部分是控制信号 Load指令 流水线中的控制信号 在取数 译码 Reg Dec 阶段产生本指令每个阶段的所有控制信号Exec信号 ExtOp ALUSrc 在1个周期后使用Mem信号 MemWr Branch 在2个周期后使用Wr信号 MemtoReg RegWr 在3个周期后使用 保存在流水段寄存器中的信息 包括前面阶段传递来或执行的结果及控制信号 一起被传递到下一个流水段 所以 控制信号也要保存在流水段寄存器中 Rt和Data在RegWr后到达咋办 Wr阶段的开始 存在一个实际的问题 在流水线中也存在地址和写使能之间的 竞争 问题Wr段开始时若RegAdr s Rd Rt Clk to Q RegWr sClk to Q 则错写寄存器 Mem阶段开始时若WrAdr sClk to Q MemWr sClk to Q 则错写存储器 不能用多周期中的方法 为什么 Ex Mem Mem Wr RegAdr RegWr MemWr Data WrAdr Data RegFile DataMemory Clk RegAdr RegWr RegWr sClk to Q RegAdr sClk to Q Clk WrAdr MemWr MemWr sClk to Q WrAdr sClk to Q 哪个同学记得多周期中是如何处理 竞争 问题的 流水线中的 竞争 问题 多周期中解决Addr和WrEn之间竞争问题的方法 在第N周期结束时 让Addr信号有效在第N 1周期让WrEn有效上述方法在流水线设计中不能用 因为 每个周期必须能够写Register每个周期必须能够写Memory Clock Store Store R type R type 如何解决 寄存器组的同步和存储器的同步 解决方案 将WriteEnable和时钟信号相 与 1 Addr Data和WrEn必须在Clk边沿到来后至少稳定一个set up时间2 Clk高电平时间大于写入时间 须由电路专家确保不会发生 定时错误 即 能合理设计 Clock 相当于单周期通路中的理想寄存器和理想存储器 流水线举例 考察流水线DataPath的数据流动情况 EndofCycle4 EndofCycle5 EndofCycle6 EndofCycle7 EndofCycle4 Load sMem R type sExec Store sReg Beq sIfetchEndofCycle5 Load sWr R type sMem Store sExec Beq sRegEndofCycle6 R type sWr Store sMem Beq sExecEndofCycle7 Store sWr Beq sMem 考察以下几个点的情况 说明 后面仅考察数据流动情况 控制信号随数据同步流动不再说明 第四周期结束时的状态 0 Load sMem4 R type sExec8 Store sReg12 Beq sIfetch IF ID BeqInstruction ID Ex Store sbusA B Ex Mem R type sResult Mem Wr Load sDout PC 16 DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw RegWr ExtOp x ExecUnit busA busB Imm ALUOp R type ALUSrc 0 MemtoReg 1 0 RegDst 1 Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 0 1 0 12 Beq sIfet 8 Store sReg 4 R type sExec 0 Load sMem MemWr 0 Clk 如果Mem阶段是Branch且Zero为1 会怎样 sWr 第五周期结束时的状态 0 Lw sWr4 R sMem8 Store sExec12 Beq sReg16 R sIfetch IF ID Instruction 16 ID Ex Beq sbusA B Ex Mem Store sAddress Mem Wr R type sResult PC 16 DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw RegWr 1 ExtOp 1 ExecUnit busA busB Imm ALUOp Addu ALUSrc 1 MemtoReg 1 1 0 RegDst x Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 0 1 0 16 R sIfet 12 Beq sReg 8 Store sExec 4 R type sMem MemWr 0 Clk 同一周期寄存器有读和写 可能吗 利用时钟上升和下降沿两次触发 能做到前半周期写 后半周期读 寄存器的写口和读口可看成是独立的两个部件 20 第六周期结束时的状态 4 R sWr8 Store sMem12 Beq sExec16 R sReg20 R sIfet IF ID Instruction 20 ID Ex R type sbusA B Ex Mem Beq sResults Mem Wr NothingforSt PC 24 DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw RegWr 1 ExtOp 1 ExecUnit busA busB Imm ALUOp Subu ALUSrc 0 MemtoReg 0 1 0 RegDst x Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 0 1 0 20 R type sIfet 16 R type sReg 12 Beq sExec 8 Store sMem 4 R type sWr MemWr 1 Clk Ifetch和Reg两个周期每条指令执行的都一样 第七周期结束时的状态 8 Store sWr12 Beq sMem16 R sExec20 R sReg24 R sIfet IF ID Instruction 24 ID Ex R type sbusA B Ex Mem Rtype sResults Mem Wr NothingforBeq PC 1000 DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw RegWr 0 ExtOp x ExecUnit busA busB Imm ALUOp R type ALUSrc 0 MemtoReg x 1 0 RegDst 1 Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 1 1 0 24 R type sIfet 20 R type sReg 16 R type sExec 12 Beq sMem 8 Store sWr MemWr 0 Clk 假定相等 则Zero 1转移目标地址送PC 这里出现反向数据流 转移目标地址反向送给PC可能会导致控制冒险 总结前面的流水线执行过程 回忆刚才的过程 回答以下问题 Branch指令何时确定是否转移 转移目标地址在第几周期计算出来 第六周期得到Zero和转移地址 第七周期控制转移地址送到PC输入端 第八周期开始才能根据转移地址取指令如果Branch指令执行结果是需要转移 称为taken 则流水线会怎样 Load指令何时能把数据写到寄存器 第几周期开始写数据 第五周期写入 第六周期开始才能使用如果后面R Type的操作数是load指令目标寄存器的内容 则流水线怎样 Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 0 Load 4 R type 8 Store 12 Beq targetis1000 16 R type 24 R type 20 R type 1000 TargetofBr 转移分支指令 Branch 引起的 延迟 现象 虽然Beq指令在第四周期取出 但 目标地址在第七周期才被送到PC的输入端第八周期才能取出目标地址处的指令执行结果 在取目标指令之前 已有三条指令被取出 取错了三条指令 这种现象称为控制冒险 ControlHazard 注 也称为分支冒险或转移冒险 BranchHazard Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 Cycle9 Cycle10 Cycle11 Clk 16 R type 24 R type 12 Beq targetis1000 20 R type 1000 TargetofBr BACK 装入指令 Load 引起的 延迟 现象 尽管Load指令在第一周期就被取出 但 数据在第五周期结束才被写入寄存器到第六周期写入的数据才能被用结果 如果随后指令要用到Load的数据的话 就需延迟三条指令 这种现象被称为数据冒险 DataHazard 或数据相关 DataDependency Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 0 Load Plus1 Plus2 Plus3 R Type 第一讲内容小结 指令的执行可以像洗衣服一样 用流水线方式进行均衡时指令吞吐率提高N倍 但不能缩短一条指令的执行时间流水段数以最复杂指令所需步骤数为准 有些指令的某些阶段为空操作 每个阶段的宽度以最复杂阶段所需时间为准 尽量调整使各阶段均衡 以Load指令为准 分为五个阶段取指令段 IF 取指令 计算PC 4 IUnit InstructionMemory Adder 译码 读寄存器 ID RF 段指令译码 读Rs和Rt 寄存器读口 执行 EXE 段计算转移目标地址 ALU运算 Extender ALU Adder 存储器 MEM 段读或写存储单元 DataMemory 写寄存器 Wr 段ALU结果或从DM读出数据写到寄存器 寄存器写口 流水线控制器的实现IF和ID RF段不需控制信号控制 只有EXE MEM和Wr需要ID段生成所有控制信号 并随指令的数据同步向后续阶段流动寄存器和存储器的竞争问题可利用时钟信号来解决流水线冒险 结构冒险 控制冒险 数据冒险 下一讲主要介绍解决流水线冒险的数据通路如何设计 第二讲流水线冒险的处理 流水线冒险的几种类型数据冒险的现象和对策数据冒险的种类相关的数据是ALU结果 可以通过转发解决相关的数据是DM读出的内容 随后的指令需被阻塞一个时钟数据冒险和转发转发检测 转发控制数据冒险和阻塞阻塞检测 阻塞控制控制冒险的现象和对策静态分支预测技术动态分支预测技术缩短分支延迟技术流水线中对异常和中断的处理访问缺失对流水线的影响 主要内容 Hazards 指流水线遇到无法正确执行后续指令或执行了不该执行的指令Structuralhazards hardwareresourceconflicts 现象 同一个部件同时被不同指令所使用一个部件每条指令只能使用1次 且只能在特定周期使用设置多个部件 以避免冲突 如指令存储器IM和数据存储器DM分开Datahazards datadependencies 现象 后面指令用到前面指令结果数据时 前面指令的结果还没产生采用转发 Forwarding Bypassing 技术Load use冒险需要一次阻塞 stall 编译程序优化指令顺序Control Branch hazards changesinprogramflow 现象 转移或异常改变执行流程 后继指令在目标地址产生前已被取出采用静态或动态分支预测编译程序优化指令顺序 分支延迟 总结 流水线的三种冲突 冒险 Hazard 情况 SKIP Mem StructuralHazard 结构冒险 现象 Time clockcycles Load Instr1 Instr2 Instr3 Instr4 Reg Mem Reg Reg Mem Reg Reg Mem Reg Reg Mem Reg Reg Mem Reg 只有一个存储器时 在Load指令取数据同时又取指令的话 则发生冲突 如果不对寄存器堆的写口和读口独立设置的话 则发生冲突 结构冒险也称硬件资源冲突 同一个执行部件被多条指令使用 Reg StructuralHazard的解决方法 Instr Order Time clockcycles Load Instr1 Instr2 Instr3 Instr4 ALU Im Reg Dm Reg Dm Reg Dm Reg ALU Reg Dm Reg Reg Dm Reg 将InstructionMemory Im 和DataMemory Dm 分开将寄存器读口和写口独立开来 Im 为了避免结构冒险 规定流水线数据通路中功能部件的设置原则为 每个部件在特定的阶段被用 如 ALU总在第三阶段被用 Reg BACK DataHazard现象 addr1 r2 r3 subr4 r1 r3 andr6 r1 r7 orr8 r1 r9 xorr10 r1 r11 想一下 哪条指令的r1是老的值 哪条是新的值 画出流水线图能很清楚理解 举例说明 以下指令序列中 寄存器r1会发生数据冒险 读r1时 add指令正在执行加法 EXE 老值 读r1时 add指令正在传递加法结果 MEM 老值 读r1时 add指令正在写加法结果到r1 WB 老值 读r1时 add指令已经把加法结果写到r1 新值 补充 三类数据冒险现象RAW 写后读 基本流水线中经常发生 如上例 WAR 读后写 基本流水线中不会发生 乱序执行时会发生 WAW 写后写 基本流水线中不会发生 乱序执行时会发生 本讲介绍基本流水线 所以仅考虑RAW冒险 DataHazardonr1 Instr Order Time clockcycles addr1 r2 r3 subr4 r1 r3 andr6 r1 r7 orr8 r1 r9 xorr10 r1 r11 IF ID RF EX MEM WB ALU Im Reg Dm Reg Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg Reg Dm Reg 最后一条指令的r1才是新的值 如何解决这个问题 数据冒险的解决方法 方法1 硬件阻塞 stall 方法2 软件插入 NOP 指令方法3 合理实现寄存器堆的读 写操作 不能解决所有数据冒险 前半时钟周期写 后半时钟周期读 若同一个时钟内前面指令写入的数据正好是后面指令所读数据 则不会发生数据冒险方法4 转发 Forwarding或Bypassing旁路 技术若相关数据是ALU结果 则如何 可通过转发解决若相关数据是上条指令DM读出内容 则如何 不能通过转发解决 随后指令需被阻塞一个时钟或加NOP指令方法5 编译优化 调整指令顺序 不能解决所有数据冒险 实现 转发 和 阻塞 要修改数据通路 1 检测何时需要 转发 并控制实现 转发 2 检测何时需要 阻塞 并控制实现 阻塞 称为Load use数据冒险 方案1 在硬件上采取措施 使相关指令延迟执行 Instr Order Time clockcycles addr1 r2 r3 subr4 r1 r3 andr6 r1 r7 IF ID RF EX MEM WB ALU Im Reg Dm Reg Reg Dm Reg stall stall stall Reg Dm 硬件上通过阻塞 stall 方式阻止后续指令执行 延迟到有新值以后 这种做法称为流水线阻塞 也称为插入 气泡Bubble 缺点 控制比较复杂 需要改数据通路 指令被延迟三个时钟执行 方案2 软件上插入无关指令 Instr Order Time clockcycles addr1 r2 r3 subr4 r1 r3 andr6 r1 r7 IF ID RF EX MEM WB ALU Im Reg Dm Reg Reg Dm Reg 由编译器插入三条NOP指令 浪费三条指令的空间和时间 是最差的做法 好处 数据通路简单 即无需改数据通路 nop nop nop Reg Dm Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg 与方案1比 哪个更快 一样 都是多三个时钟周期 方案3 同一周期内寄存器堆先写后读 Instr Order Time clockcycles addr1 r2 r3 subr4 r1 r3 andr6 r1 r7 orr8 r1 r9 xorr10 r1 r11 IF ID RF EX MEM WB ALU Im Reg Dm Reg Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg Reg Dm Reg 寄存器堆的读口和写口是相互独立的部件 寄存器写口 读口分别在前 后半周期进行操作 使写入数据被直接读出但是 只能解决部分数据冒险 方案4 利用DataPath中的中间数据 转发 阻塞 Instr Order Time clockcycles addr1 r2 r3 subr4 r1 r3 andr6 r1 r7 orr8 r1 r9 xorr10 r1 r11 IF ID RF EX MEM WB ALU Im Reg Dm Reg Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg Reg Dm Reg 仔细观察后发现 流水段寄存器中已有需要的值r1 把数据从流水段寄存器中直接取到ALU的输入端 在哪个流水段R中 第七周期结束时的状态 8 Store sWr12 Beq sMem16 R sExec20 R sReg24 R sIfet IF ID Instruction 24 ID Ex R type sbusA B Ex Mem Rtype sResults Mem Wr NothingforBeq PC 1000 DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw RegWr 0 ExtOp x ExecUnit busA busB Imm ALUOp R type ALUSrc 0 MemtoReg x 1 0 RegDst 1 Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 1 1 0 24 R type sIfet 20 R type sReg 16 R type sExec 12 Beq sMem 8 Store sWr MemWr 0 Clk 假定相等 则Zero 1转移目标地址送PC BACK 硬件上的改动以支持 转发 技术 加MUX 使流水段寄存器值返送ALU输入端 能用 转发 技术解决第1 2两条指令间的数据冒险吗 请看后面的幻灯片 DM ALU 复习 Load指令引起的延迟现象 Load指令最早在哪个流水线寄存器中开始有后续指令需要的值 Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 I0 Load Plus1 Plus2 Plus3 Plus4 实际上 在第四周期结束时 数据在流水段寄存器中已经有值 采用数据转发技术可以使load指令后面第二条指令得到所需的值但不能解决load指令和随后第一条指令间的数据冒险 要延迟执行一条指令 这种load指令和随后指令间的数据冒险 称为 装入 使用数据冒险 load useDataHazard 若不采用转发 在何时才能使用Load指令的结果 Forwarding 技术使Load use冒险只需延迟一个周期 Instr Order Time clockcycles lwr1 0 r2 subr7 r1 r3 andr6 r1 r7 orr8 r1 r9 IF ID RF EX MEM WB ALU Im Reg Dm Reg Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg 采用 转发 后仅第二条指令SUBr7 r1 r3不能按时执行 发生 装入 使用数据冒险 时 需要对load后的指令阻塞一个时钟周期 数据冒险处理最佳方案 转发 Load use阻塞 RAW 写后读 数据冒险的 转发 条件 后面指令需用ALU输出结果C1 目寄是后一条指令的源寄C2 目寄是后第二条指令的源寄 例如 R Type后跟R lw sw beq等 后面指令需用从DM读出的结果C3 目寄是后第二指令的源寄 例如 load指令后跟R Type beq等 用流水段寄存器来表示转发条件 C3以后考虑 C1 a EX MEM RegisterRd ID EX RegisterRsC1 b EX MEM RegisterRd ID EX RegisterRtC2 a MEM WB RegisterRd ID EX RegisterRsC2 b MEM WB RegisterRd ID EX RegisterRt 这里的RegisterRd是指目的寄存器实际上是R type的Rd或I Type的Rt 指令的回写 WriteBack 阶段 IF ID ID ExRegister Ex MemRegister Mem WrRegister PC DataMem WA Di RA Do IUnit A I RFile Di Ra Rb Rw MemWr RegWr 1 ExtOp ExecUnit busA busB Imm ALUOp ALUSrc MemtoReg 1 0 1 0 RegDst Rt Rd Imm PC 4 PC 4 Rs Rt PC 4 Zero Branch 1 0 Clk Ifetch Reg Dec Exec Mem Wr Rd还是Rt取决于是R 型指令 还是I 型指令 若是beq指令会怎样 beqr3 r2 100addr4 r3 r2subr5 r3 r2 因为beq指令无需写结果 故不能进行转发 转发条件的进一步完善 以下两种情况下 转发会发生错误指令的结果不写入目的寄存器Rd时例如 Beq指令只对rs和rt相减 不写结果到目的寄存器Rt即 EX MEM或MEM WB流水段寄存器的RegWr信号为0Rd等于 0时例如 指令sll 0 1 2的转发结果为 R 1 2 但实际上应该是0因此 修改转发条件为 C1 a EX MEM RegWrandEX MEM RegisterRd 0andEX MEM RegisterRd ID EX RegisterRsC1 b EX MEM RegWrandEX MEM RegisterRd 0andEX MEM RegisterRd ID EX RegisterRtC2 a MEM WB RegWrandMEM WB RegisterRd 0andMEM WB RegisterRd ID EX RegisterRsC2 b MEM WB RegWrandMEM WB RegisterRd 0andMEM WB RegisterRd ID EX RegisterRt beqr3 r2 100addr4 r3 r2subr5 r3 r2 转发路径和转发条件 加MUX 使流水段寄存器值返送ALU输入端 红线和兰线可以合并 在原数据通路中确实是合并在一起的 记得吗 由一个二路选择器 控制端为MemtoReg 合并输出到寄存器堆 所以 无需另有一个检测条件C3 C3就是C2 C1反映本条指令和随后指令间的相关关系C2反映本条指令和随后第二条指令间的相关关系 C1和C2分别反映哪两条指令的关系呢 转发路径和转发条件 转发检测 部件中缺何条件 MEM WB RegWr 1 EX MEM RegWr 1 带转发的流水线数据通路 ForwardA ForwardB 更加复杂的数据冒险问题 考察以下指令序列 采用前述转发条件会发生什么情况 add 1 1 2add 1 1 3add 1 1 4 可能会使转发到第3条指令的操作数是第1条指令结果 而不是第2条指令的结果 怎样改写 转发 检测条件 改C1还是改C2 需要改写 转发 条件C2 a 和C2 b 为 C2 a MEM WB RegWriteand MEM WB RegisterRd 0 and EX MEM RegisterRd ID EX RegisterRs and MEM WB RegisterRd ID EX RegisterRs C2 b MEM WB RegWriteand MEM WB RegisterRd 0 and EX MEM RegisterRd ID EX RegisterRt and MEM WB RegisterRd ID EX RegisterRt 上述公式相当于加了一个条件限制 如果本条指令源操作数和上条指令的目的寄存器一样 则不转发上上条指令的结果 而转发上条指令的结果 即 此时的C1 1而C2 0 至此 解决了RAW数据冒险的 转发 处理 对于左边的指令序列 C1和C2的值各是什么 C1 C2 1 使得Forward信号取值不确定 应该让C1 1 C2 0 所有RAW数据冒险都能通过转发来解决吗 Load useDataHazard 硬件阻塞方式 Instr Order Time clockcycles lwr1 0 r2 subr4 r1 r3 IF ID RF EX MEM WB ALU Im Reg Dm Reg Im andr6 r1 r7 orr8 r1 r9 Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg 需解决以下问题 1 判断什么条件下需要阻塞 Reg 2 如何修改数据通路来实现阻塞 subr4 r1 r3 Load useDataHazard 硬件阻塞方式 Time clockcycles IF ID EX MEM WB ALU Im Reg Dm Reg Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg Instr Order lwr1 0 r2 subr4 r1 r3 andr6 r1 r7 orr8 r1 r9 检测 阻塞 过程中 1 sub指令在IF ID寄存器中 并正被译码 控制信号和Rs Rt的值将被写到ID EX段寄存器2 and指令地址在PC中 正被取出 取出的指令将被写到IF ID段寄存器中在阻塞点 必须将上述两条指令的执行结果清除 并延迟一个周期执行这两条指令 阻塞前的情况 延迟一个周期执行后面指令 相当于把阻塞点前面一个周期的状态再保持一个周期lw指令还是继续正常执行下去 想想看 lw后面的指令如何做到继续保持状态 Load useDataHazard 硬件阻塞方式 在阻塞点 将上述两条指令的执行结果清除 并延迟一个周期执行这两条指令 将ID EX段寄存器中所有控制信号清0 插入一个 气泡 IF ID寄存器中的信息不变 还是sub指令 sub指令重新译码执行 PC中的值不变 还是and指令地址 and指令重新被取出执行 Instr Order Time clockcycles lwr1 0 r2 subr4 r1 r3 IF ID RF EX MEM WB ALU Im Reg Dm Reg Im andr6 r1 r7 orr8 r1 r9 Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg Reg 阻塞后的情况 带 转发 和 阻塞 检测的流水线数据通路 至此 硬件处理数据冒险 转发 阻塞 全部完成 写使能 信号为0 使PC和IF ID不变 使控制信号清0 阻塞指令执行 以下源程序可生成两种不同的代码 优化的代码可避免Load阻塞a b c d e f 假定a b c d e f在内存 方案5 编译器进行指令顺序调整来解决数据冒险 Fastcode lw 2 blw 3 clw 5 eadd 1 2 3lw 6 fsw 1 asub 4 5 6sw 4 d Slowcode lw 2 blw 3 cadd 1 2 3sw 1 alw 5 elw 6 fsub 4 5 6sw 4 d 编译器的优化很重要 如果硬件不支持阻塞处理的话 则编译器可以将顺序调整和插入NOP指令结合起来 在找不到可插入的指令时
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!