指令流水線ppt課件
《指令流水線ppt課件》由會員分享,可在線閱讀,更多相關(guān)《指令流水線ppt課件(129頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
第一講流水線數(shù)據(jù)通路和控制邏輯第二講流水線冒險(xiǎn)處理第三講高級流水線技術(shù) Ch7 InstructionPipeline指令流水線 第一講流水線數(shù)據(jù)通路和控制 日常生活中的流水線處理例子 洗衣服單周期處理器模型和流水線性能比較什么樣的指令集適合于流水線方式執(zhí)行如何設(shè)計(jì)流水線數(shù)據(jù)通路以MIPS指令子集來說明如何設(shè)計(jì)流水線控制邏輯分析每條指令執(zhí)行過程中的控制信號給出控制器設(shè)計(jì)過程流水線冒險(xiǎn)的概念 主要內(nèi)容 復(fù)習(xí) 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 復(fù)習(xí) MultipleCycleProcessor MCP 一個(gè)功能部件在一個(gè)指令周期中可以被使用多次 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 復(fù)習(xí) 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 一個(gè)日常生活中的例子 洗衣服 如果讓你來管理洗衣店 你會如何安排 SequentialLaundry 串行方式 串行方式下 4批衣服需要花費(fèi)6小時(shí) 4x 30 40 20 360分鐘 N批衣服 需花費(fèi)的時(shí)間為Nx 30 40 20 90N如果用流水線方式洗衣服 則花多少時(shí)間呢 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小時(shí)N批則為90 xN分鐘 6PM 7 8 9 10 11 Midnight TaskOrder Time 流水線方式下 需30 4x40 20 210分 3 5小時(shí) 如果有N批衣服呢 30 Nx40 20分鐘假定每一步時(shí)間均衡 則比串行方式提高約3倍 流水方式下 所用時(shí)間主要與最長階段的時(shí)間有關(guān) 復(fù)習(xí) Load指令的5個(gè)階段 Ifetch 取指 取指令并計(jì)算PC 4 用到哪些部件 Reg Dec 取數(shù)和譯碼 取數(shù)同時(shí)譯碼 用到哪些部件 Exec 執(zhí)行 計(jì)算內(nèi)存單元地址 用到哪些部件 Mem 讀存儲器 從數(shù)據(jù)存儲器中讀 用到哪些部件 Wr 寫寄存器 將數(shù)據(jù)寫到寄存器中 用到哪些部件 指令存儲器 Adder 寄存器堆讀口 指令譯碼器 擴(kuò)展器 ALU 數(shù)據(jù)存儲器 寄存器堆寫口 這里寄存器堆的讀口和寫口可看成兩個(gè)不同的部件 指令的執(zhí)行過程是否和 洗衣 過程類似 是否可以采用類似方式來執(zhí)行指令呢 單周期指令模型與流水模型的性能比較 假定以下每步操作所花時(shí)間為 取指 2ns寄存器讀 1nsALU操作 2ns存儲器讀 2ns寄存器寫 1ns單周期模型每條指令在一個(gè)時(shí)鐘周期內(nèi)完成時(shí)鐘周期等于最長的lw指令的執(zhí)行時(shí)間 即 8ns串行執(zhí)行時(shí) N條指令的執(zhí)行時(shí)間為 8Nns流水線性能時(shí)鐘周期等于最長階段所花時(shí)間為 2ns每條指令的執(zhí)行時(shí)間為 2nsx5 10nsN條指令的執(zhí)行時(shí)間為 4 N x2ns在N很大時(shí) 比串行方式提高約4倍若各階段操作均衡 例如 各階段都是2ns 則提高倍數(shù)為5倍 Load指令執(zhí)行時(shí)間總計(jì)為 8ns 假定控制單元 PC訪問 信號傳遞等沒有延遲 流水線方式下 單條指令執(zhí)行時(shí)間不能縮短 但能大大提高指令吞吐率 流水線指令集的設(shè)計(jì) 具有什么特征的指令集有利于流水線執(zhí)行呢 長度盡量一致 有利于簡化取指令和指令譯碼操作MIPS指令32位 下址計(jì)算方便 PC 4X86指令從1字節(jié)到17字節(jié)不等 使取指部件極其復(fù)雜格式少 且源寄存器位置相同 有利于在指令未知時(shí)就可取操作數(shù)MIPS指令的rs和rt位置一定 在指令譯碼時(shí)就可讀rs和rt的值若位置隨指令不同而不同 則需先確定指令類型才能取寄存器編號load Store指令才能訪問存儲器 有利于減少操作步驟 規(guī)整流水線lw sw指令的地址計(jì)算和運(yùn)算指令的執(zhí)行步驟規(guī)整在同一個(gè)周期X86運(yùn)算類指令操作數(shù)可為內(nèi)存數(shù)據(jù) 需計(jì)算地址 訪存 執(zhí)行內(nèi)存中 對齊 存放 有利于減少訪存次數(shù)和流水線的規(guī)整總之 規(guī)整 簡單和一致等特性有利于指令的流水線執(zhí)行 Load指令的流水線 Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 2ndlw 3rdlw 每個(gè)周期有五個(gè)功能部件同時(shí)在工作后面指令在前面完成取指后馬上開始每個(gè)load指令仍然需要五個(gè)周期完成但是 吞吐率 throughput 提高許多 理想情況下 有 每個(gè)周期有一條指令進(jìn)入流水線每個(gè)周期都有一條指令完成每條指令的有效周期 CPI 為1 R type指令的4個(gè)階段 Ifetch 取指令并計(jì)算PC 4Reg Dec 從寄存器取數(shù) 同時(shí)指令在譯碼器進(jìn)行譯碼Exec 在ALU中對操作數(shù)進(jìn)行計(jì)算Wr ALU計(jì)算的結(jié)果寫到寄存器 含R type和Load指令的流水線 上述流水線有個(gè)問題 兩條指令試圖同時(shí)寫寄存器 因?yàn)長oad在第5階段用寄存器寫口R type在第4階段用寄存器寫口把一個(gè)功能部件同時(shí)被多條指令使用的現(xiàn)象稱為結(jié)構(gòu)冒險(xiǎn) StrutureHazard 為了流水線能順利工作 規(guī)定 每個(gè)功能部件每條指令只能用一次 如 寫口不能用兩次或以上 每個(gè)功能部件必須在相同的階段被使用 如 寫口總是在第五階段被使用 R type R type Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 Cycle9 R type R type Load 或稱為資源沖突 R type的Wr操作延后一個(gè)周期執(zhí)行 加一個(gè)NOP階段以延遲 寫 操作 把 寫 操作安排在第5階段 這樣使R Type的Mem階段為空NOP 這樣使流水線中的每條指令都有相同多個(gè)階段 R type 1 2 3 4 5 Store指令的四個(gè)階段 Ifetch 取指令并計(jì)算PC 4Reg Dec 從寄存器取數(shù) 同時(shí)指令在譯碼器進(jìn)行譯碼Exec 16位立即數(shù)符號擴(kuò)展后與寄存器值相加 計(jì)算主存地址Mem 將寄存器讀出的數(shù)據(jù)寫到主存 Wr 加一個(gè)空的寫階段 使流水線更規(guī)整 NOOP Beq的四個(gè)階段 Ifetch 取指令并計(jì)算PC 4Reg Dec 從寄存器取數(shù) 同時(shí)指令在譯碼器進(jìn)行譯碼Exec 執(zhí)行階段ALU中比較兩個(gè)寄存器的大小 做減法 Adder中計(jì)算轉(zhuǎn)移地址Mem 如果比較相等 則 轉(zhuǎn)移目標(biāo)地址寫到PC NOOP Wr 加一個(gè)空寫階段 使流水線更規(guī)整 與多周期通路有什么不同 多周期通路中 在Reg Dec階段投機(jī)進(jìn)行了轉(zhuǎn)移地址的計(jì)算 可以減少Branch指令的時(shí)鐘數(shù) 為什么流水線中不進(jìn)行 投機(jī) 計(jì)算 因?yàn)榱魉€中所有指令的執(zhí)行階段一樣多 Branch指令無需節(jié)省時(shí)鐘 因?yàn)橛斜人鼜?fù)雜的指令 按照上述方式 把所有指令都按照最復(fù)雜的 load 指令所需的五個(gè)階段來劃分 不需要的階段加一個(gè) NOP 操作 APipelinedDatapath 五階段流水線數(shù)據(jù)通路 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 下面看每條指令在流水線通路中的執(zhí)行過程 Wr階段沒有DataPath嗎 為什么需要這些Reg 保存每個(gè)周期執(zhí)行的結(jié)果 屬于內(nèi)部寄存器 對程序員透明 不需作為現(xiàn)場保存 不包含控制邏輯 取指令 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 有誰發(fā)現(xiàn)這里的一個(gè)假設(shè)有問題嗎 下一目標(biāo) 設(shè)計(jì)IUnit 功能是啥 MIPS指令的地址可能是10嗎 先猜一下IUnit中有哪些功能部件 指令部件IUnit的設(shè)計(jì) 第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 取指階段有哪些控制信號 不需控制信號 因?yàn)槊織l指令執(zhí)行功能一樣 是確定的 無需根據(jù)指令的不同來控制執(zhí)行不同的操作 指令部件功能 Instr Mem PC PC PC 4 應(yīng)把哪些信息存到流水段寄存器IF ID中 應(yīng)保存后面階段用到的指令和PC 4的值 指令在隨后階段被送出譯碼 PC 4用來計(jì)算轉(zhuǎn)移目標(biāo)地址 譯碼 取數(shù) 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中嗎 不要 只要存相關(guān)信息 Load指令的地址計(jì)算階段 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不傳遞下去會怎樣 連接到錯(cuò)誤的目的地址 指令執(zhí)行錯(cuò)誤 猜有哪些部件 執(zhí)行部件 ExecUnit 的設(shè)計(jì) 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用于計(jì)算分支指令的轉(zhuǎn)移地址 RegDes 0 ALUSrc 1ALUop addu Extop 1 Load指令的各控制信號取值 執(zhí)行部件功能 計(jì)算內(nèi)存地址計(jì)算轉(zhuǎn)移目標(biāo)地址一般ALU運(yùn)算 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 周期以最長操作為準(zhǔn)設(shè)計(jì)Cycle Tread 比較洗衣流水線 指令流水有什么不同 洗衣流程不能反向進(jìn)行 但 該階段有反向數(shù)據(jù)流 可能會引起冒險(xiǎn) 以后介紹 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 各階段所經(jīng)DataPath已有 控制信號如何得到 該階段有反向數(shù)據(jù)流 可能會引起冒險(xiǎn) 以后介紹 流水線中的ControlSignals如何獲得 主要考察 第N階段的控制信號 它取決于是某條指令的某個(gè)階段 N Exec Mem Wr 只有這三個(gè)階段有控制信號 例 Load的Exec段的控制信號 Func Load sExec 為什么1st和2nd階段沒有控制信號 IF和ID階段的功能對每條指令來說都一樣 Load指令 流水線中的控制信號 在取數(shù) 譯碼 Reg Dec 階段產(chǎn)生本指令每個(gè)階段的所有控制信號Exec信號 ExtOp ALUSrc 在1個(gè)周期后使用Mem信號 MemWr Branch 在2個(gè)周期后使用Wr信號 MemtoReg RegWr 在3個(gè)周期后使用 各流水段部件在一個(gè)時(shí)鐘內(nèi)完成某條指令的某個(gè)階段的工作 所以 控制信號也要保存在流水段寄存器中 在下個(gè)時(shí)鐘到達(dá)時(shí) 把執(zhí)行結(jié)果以及前面?zhèn)鬟f來的后面各階段要用到的所有數(shù)據(jù) 如 指令 立即數(shù) 目的寄存器等 和控制信號保存到流水線寄存器中 流水線中的ControlSignals 通過對前面流水線數(shù)據(jù)通路的分析 得知 PC需要寫使能嗎 流水段寄存器需要寫使能嗎 Ifecth階段和Dec Reg階段都沒有控制信號Exec階段的控制信號有四個(gè)ExtOp 擴(kuò)展器操作 1 符號擴(kuò)展 0 零擴(kuò)展ALUSrc ALU的B口來源 1 來源于擴(kuò)展器 0 來源于BusBALUOp 主控制器輸出 用于輔助局部ALU控制邏輯來決定ALUCtrl RegDst 指定目的寄存器 1 Rd 0 RtMem階段的控制信號有兩個(gè)MemWr DM的寫信號 Store指令時(shí)為1 其他指令為0Branch 是否為分支指令 分支指令時(shí)為1 其他指令為0Wr階段的控制信號有兩個(gè)MemtoReg 寄存器的寫入源 1 DM輸出 0 ALU輸出RegWr 寄存器堆寫信號 結(jié)果寫寄存器的指令都為1 其他指令為0 每個(gè)時(shí)鐘都會改變PC 故不需要 每個(gè)時(shí)鐘都會改變流水段寄存器 故不需要 控制邏輯Control 的設(shè)計(jì) 流水線控制邏輯的設(shè)計(jì)每條指令的控制信號在該指令執(zhí)行期間變不變 誰記得單周期和多周期時(shí)各是怎樣的情況 與單周期還是多周期的控制邏輯設(shè)計(jì)類似 誰記得單周期和多周期控制邏輯各是怎樣設(shè)計(jì)的 設(shè)計(jì)過程控制邏輯分成兩部分主控制邏輯 生成ALUop和其他控制信號局部ALU控制邏輯 根據(jù)ALUop和func字段生成ALUCtrl用真值表建立指令和控制信號之間的關(guān)系寫出每個(gè)控制信號的邏輯表達(dá)式控制邏輯的輸出 控制信號 在ID階段生成 并存放在ID EX流水段寄存器中 然后每來一個(gè)時(shí)鐘跟著指令傳送到下一級流水段寄存器某時(shí)刻在不同階段同時(shí)執(zhí)行不同指令 不同的指令得到不同控制信號 忘記單周期和多周期控制器設(shè)計(jì)的同學(xué) 復(fù)習(xí)一下第六章 不變 單周期 藍(lán)色部分是控制信號 Load指令 流水線中的控制信號 在取數(shù) 譯碼 Reg Dec 階段產(chǎn)生本指令每個(gè)階段的所有控制信號Exec信號 ExtOp ALUSrc 在1個(gè)周期后使用Mem信號 MemWr Branch 在2個(gè)周期后使用Wr信號 MemtoReg RegWr 在3個(gè)周期后使用 保存在流水段寄存器中的信息 包括前面階段傳遞來或執(zhí)行的結(jié)果及控制信號 一起被傳遞到下一個(gè)流水段 所以 控制信號也要保存在流水段寄存器中 Rt和Data在RegWr后到達(dá)咋辦 Wr階段的開始 存在一個(gè)實(shí)際的問題 在流水線中也存在地址和寫使能之間的 競爭 問題Wr段開始時(shí)若RegAdr s Rd Rt Clk to Q RegWr sClk to Q 則錯(cuò)寫寄存器 Mem階段開始時(shí)若WrAdr sClk to Q MemWr sClk to Q 則錯(cuò)寫存儲器 不能用多周期中的方法 為什么 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 哪個(gè)同學(xué)記得多周期中是如何處理 競爭 問題的 流水線中的 競爭 問題 多周期中解決Addr和WrEn之間競爭問題的方法 在第N周期結(jié)束時(shí) 讓Addr信號有效在第N 1周期讓W(xué)rEn有效上述方法在流水線設(shè)計(jì)中不能用 因?yàn)?每個(gè)周期必須能夠?qū)慠egister每個(gè)周期必須能夠?qū)慚emory Clock Store Store R type R type 如何解決 寄存器組的同步和存儲器的同步 解決方案 將WriteEnable和時(shí)鐘信號相 與 1 Addr Data和WrEn必須在Clk邊沿到來后至少穩(wěn)定一個(gè)set up時(shí)間2 Clk高電平時(shí)間大于寫入時(shí)間 須由電路專家確保不會發(fā)生 定時(shí)錯(cuò)誤 即 能合理設(shè)計(jì) Clock 相當(dāng)于單周期通路中的理想寄存器和理想存儲器 流水線舉例 考察流水線DataPath的數(shù)據(jù)流動情況 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 考察以下幾個(gè)點(diǎn)的情況 說明 后面僅考察數(shù)據(jù)流動情況 控制信號隨數(shù)據(jù)同步流動不再說明 第四周期結(jié)束時(shí)的狀態(tài) 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 第五周期結(jié)束時(shí)的狀態(tài) 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 同一周期寄存器有讀和寫 可能嗎 利用時(shí)鐘上升和下降沿兩次觸發(fā) 能做到前半周期寫 后半周期讀 寄存器的寫口和讀口可看成是獨(dú)立的兩個(gè)部件 20 第六周期結(jié)束時(shí)的狀態(tài) 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兩個(gè)周期每條指令執(zhí)行的都一樣 第七周期結(jié)束時(shí)的狀態(tài) 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轉(zhuǎn)移目標(biāo)地址送PC 這里出現(xiàn)反向數(shù)據(jù)流 轉(zhuǎn)移目標(biāo)地址反向送給PC可能會導(dǎo)致控制冒險(xiǎn) 總結(jié)前面的流水線執(zhí)行過程 回憶剛才的過程 回答以下問題 Branch指令何時(shí)確定是否轉(zhuǎn)移 轉(zhuǎn)移目標(biāo)地址在第幾周期計(jì)算出來 第六周期得到Zero和轉(zhuǎn)移地址 第七周期控制轉(zhuǎn)移地址送到PC輸入端 第八周期開始才能根據(jù)轉(zhuǎn)移地址取指令如果Branch指令執(zhí)行結(jié)果是需要轉(zhuǎn)移 稱為taken 則流水線會怎樣 Load指令何時(shí)能把數(shù)據(jù)寫到寄存器 第幾周期開始寫數(shù)據(jù) 第五周期寫入 第六周期開始才能使用如果后面R Type的操作數(shù)是load指令目標(biāo)寄存器的內(nèi)容 則流水線怎樣 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 轉(zhuǎn)移分支指令 Branch 引起的 延遲 現(xiàn)象 雖然Beq指令在第四周期取出 但 目標(biāo)地址在第七周期才被送到PC的輸入端第八周期才能取出目標(biāo)地址處的指令執(zhí)行結(jié)果 在取目標(biāo)指令之前 已有三條指令被取出 取錯(cuò)了三條指令 這種現(xiàn)象稱為控制冒險(xiǎn) ControlHazard 注 也稱為分支冒險(xiǎn)或轉(zhuǎn)移冒險(xiǎn) 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 引起的 延遲 現(xiàn)象 盡管Load指令在第一周期就被取出 但 數(shù)據(jù)在第五周期結(jié)束才被寫入寄存器到第六周期寫入的數(shù)據(jù)才能被用結(jié)果 如果隨后指令要用到Load的數(shù)據(jù)的話 就需延遲三條指令 這種現(xiàn)象被稱為數(shù)據(jù)冒險(xiǎn) DataHazard 或數(shù)據(jù)相關(guān) DataDependency Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 0 Load Plus1 Plus2 Plus3 R Type 第一講內(nèi)容小結(jié) 指令的執(zhí)行可以像洗衣服一樣 用流水線方式進(jìn)行均衡時(shí)指令吞吐率提高N倍 但不能縮短一條指令的執(zhí)行時(shí)間流水段數(shù)以最復(fù)雜指令所需步驟數(shù)為準(zhǔn) 有些指令的某些階段為空操作 每個(gè)階段的寬度以最復(fù)雜階段所需時(shí)間為準(zhǔn) 盡量調(diào)整使各階段均衡 以Load指令為準(zhǔn) 分為五個(gè)階段取指令段 IF 取指令 計(jì)算PC 4 IUnit InstructionMemory Adder 譯碼 讀寄存器 ID RF 段指令譯碼 讀Rs和Rt 寄存器讀口 執(zhí)行 EXE 段計(jì)算轉(zhuǎn)移目標(biāo)地址 ALU運(yùn)算 Extender ALU Adder 存儲器 MEM 段讀或?qū)懘鎯卧?DataMemory 寫寄存器 Wr 段ALU結(jié)果或從DM讀出數(shù)據(jù)寫到寄存器 寄存器寫口 流水線控制器的實(shí)現(xiàn)IF和ID RF段不需控制信號控制 只有EXE MEM和Wr需要ID段生成所有控制信號 并隨指令的數(shù)據(jù)同步向后續(xù)階段流動寄存器和存儲器的競爭問題可利用時(shí)鐘信號來解決流水線冒險(xiǎn) 結(jié)構(gòu)冒險(xiǎn) 控制冒險(xiǎn) 數(shù)據(jù)冒險(xiǎn) 下一講主要介紹解決流水線冒險(xiǎn)的數(shù)據(jù)通路如何設(shè)計(jì) 第二講流水線冒險(xiǎn)的處理 流水線冒險(xiǎn)的幾種類型數(shù)據(jù)冒險(xiǎn)的現(xiàn)象和對策數(shù)據(jù)冒險(xiǎn)的種類相關(guān)的數(shù)據(jù)是ALU結(jié)果 可以通過轉(zhuǎn)發(fā)解決相關(guān)的數(shù)據(jù)是DM讀出的內(nèi)容 隨后的指令需被阻塞一個(gè)時(shí)鐘數(shù)據(jù)冒險(xiǎn)和轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)檢測 轉(zhuǎn)發(fā)控制數(shù)據(jù)冒險(xiǎn)和阻塞阻塞檢測 阻塞控制控制冒險(xiǎn)的現(xiàn)象和對策靜態(tài)分支預(yù)測技術(shù)動態(tài)分支預(yù)測技術(shù)縮短分支延遲技術(shù)流水線中對異常和中斷的處理訪問缺失對流水線的影響 主要內(nèi)容 Hazards 指流水線遇到無法正確執(zhí)行后續(xù)指令或執(zhí)行了不該執(zhí)行的指令Structuralhazards hardwareresourceconflicts 現(xiàn)象 同一個(gè)部件同時(shí)被不同指令所使用一個(gè)部件每條指令只能使用1次 且只能在特定周期使用設(shè)置多個(gè)部件 以避免沖突 如指令存儲器IM和數(shù)據(jù)存儲器DM分開Datahazards datadependencies 現(xiàn)象 后面指令用到前面指令結(jié)果數(shù)據(jù)時(shí) 前面指令的結(jié)果還沒產(chǎn)生采用轉(zhuǎn)發(fā) Forwarding Bypassing 技術(shù)Load use冒險(xiǎn)需要一次阻塞 stall 編譯程序優(yōu)化指令順序Control Branch hazards changesinprogramflow 現(xiàn)象 轉(zhuǎn)移或異常改變執(zhí)行流程 后繼指令在目標(biāo)地址產(chǎn)生前已被取出采用靜態(tài)或動態(tài)分支預(yù)測編譯程序優(yōu)化指令順序 分支延遲 總結(jié) 流水線的三種沖突 冒險(xiǎn) Hazard 情況 SKIP Mem StructuralHazard 結(jié)構(gòu)冒險(xiǎn) 現(xiàn)象 Time clockcycles Load Instr1 Instr2 Instr3 Instr4 Reg Mem Reg Reg Mem Reg Reg Mem Reg Reg Mem Reg Reg Mem Reg 只有一個(gè)存儲器時(shí) 在Load指令取數(shù)據(jù)同時(shí)又取指令的話 則發(fā)生沖突 如果不對寄存器堆的寫口和讀口獨(dú)立設(shè)置的話 則發(fā)生沖突 結(jié)構(gòu)冒險(xiǎn)也稱硬件資源沖突 同一個(gè)執(zhí)行部件被多條指令使用 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 分開將寄存器讀口和寫口獨(dú)立開來 Im 為了避免結(jié)構(gòu)冒險(xiǎn) 規(guī)定流水線數(shù)據(jù)通路中功能部件的設(shè)置原則為 每個(gè)部件在特定的階段被用 如 ALU總在第三階段被用 Reg BACK DataHazard現(xiàn)象 addr1 r2 r3 subr4 r1 r3 andr6 r1 r7 orr8 r1 r9 xorr10 r1 r11 想一下 哪條指令的r1是老的值 哪條是新的值 畫出流水線圖能很清楚理解 舉例說明 以下指令序列中 寄存器r1會發(fā)生數(shù)據(jù)冒險(xiǎn) 讀r1時(shí) add指令正在執(zhí)行加法 EXE 老值 讀r1時(shí) add指令正在傳遞加法結(jié)果 MEM 老值 讀r1時(shí) add指令正在寫加法結(jié)果到r1 WB 老值 讀r1時(shí) add指令已經(jīng)把加法結(jié)果寫到r1 新值 補(bǔ)充 三類數(shù)據(jù)冒險(xiǎn)現(xiàn)象RAW 寫后讀 基本流水線中經(jīng)常發(fā)生 如上例 WAR 讀后寫 基本流水線中不會發(fā)生 亂序執(zhí)行時(shí)會發(fā)生 WAW 寫后寫 基本流水線中不會發(fā)生 亂序執(zhí)行時(shí)會發(fā)生 本講介紹基本流水線 所以僅考慮RAW冒險(xiǎn) 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才是新的值 如何解決這個(gè)問題 數(shù)據(jù)冒險(xiǎn)的解決方法 方法1 硬件阻塞 stall 方法2 軟件插入 NOP 指令方法3 合理實(shí)現(xiàn)寄存器堆的讀 寫操作 不能解決所有數(shù)據(jù)冒險(xiǎn) 前半時(shí)鐘周期寫 后半時(shí)鐘周期讀 若同一個(gè)時(shí)鐘內(nèi)前面指令寫入的數(shù)據(jù)正好是后面指令所讀數(shù)據(jù) 則不會發(fā)生數(shù)據(jù)冒險(xiǎn)方法4 轉(zhuǎn)發(fā) Forwarding或Bypassing旁路 技術(shù)若相關(guān)數(shù)據(jù)是ALU結(jié)果 則如何 可通過轉(zhuǎn)發(fā)解決若相關(guān)數(shù)據(jù)是上條指令DM讀出內(nèi)容 則如何 不能通過轉(zhuǎn)發(fā)解決 隨后指令需被阻塞一個(gè)時(shí)鐘或加NOP指令方法5 編譯優(yōu)化 調(diào)整指令順序 不能解決所有數(shù)據(jù)冒險(xiǎn) 實(shí)現(xiàn) 轉(zhuǎn)發(fā) 和 阻塞 要修改數(shù)據(jù)通路 1 檢測何時(shí)需要 轉(zhuǎn)發(fā) 并控制實(shí)現(xiàn) 轉(zhuǎn)發(fā) 2 檢測何時(shí)需要 阻塞 并控制實(shí)現(xiàn) 阻塞 稱為Load use數(shù)據(jù)冒險(xiǎn) 方案1 在硬件上采取措施 使相關(guān)指令延遲執(zhí)行 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 方式阻止后續(xù)指令執(zhí)行 延遲到有新值以后 這種做法稱為流水線阻塞 也稱為插入 氣泡Bubble 缺點(diǎn) 控制比較復(fù)雜 需要改數(shù)據(jù)通路 指令被延遲三個(gè)時(shí)鐘執(zhí)行 方案2 軟件上插入無關(guān)指令 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指令 浪費(fèi)三條指令的空間和時(shí)間 是最差的做法 好處 數(shù)據(jù)通路簡單 即無需改數(shù)據(jù)通路 nop nop nop Reg Dm Reg Dm Reg Reg Dm Reg Im ALU Reg Dm Reg 與方案1比 哪個(gè)更快 一樣 都是多三個(gè)時(shí)鐘周期 方案3 同一周期內(nèi)寄存器堆先寫后讀 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 寄存器堆的讀口和寫口是相互獨(dú)立的部件 寄存器寫口 讀口分別在前 后半周期進(jìn)行操作 使寫入數(shù)據(jù)被直接讀出但是 只能解決部分?jǐn)?shù)據(jù)冒險(xiǎn) 方案4 利用DataPath中的中間數(shù)據(jù) 轉(zhuǎn)發(fā) 阻塞 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 仔細(xì)觀察后發(fā)現(xiàn) 流水段寄存器中已有需要的值r1 把數(shù)據(jù)從流水段寄存器中直接取到ALU的輸入端 在哪個(gè)流水段R中 第七周期結(jié)束時(shí)的狀態(tài) 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轉(zhuǎn)移目標(biāo)地址送PC BACK 硬件上的改動以支持 轉(zhuǎn)發(fā) 技術(shù) 加MUX 使流水段寄存器值返送ALU輸入端 能用 轉(zhuǎn)發(fā) 技術(shù)解決第1 2兩條指令間的數(shù)據(jù)冒險(xiǎn)嗎 請看后面的幻燈片 DM ALU 復(fù)習(xí) Load指令引起的延遲現(xiàn)象 Load指令最早在哪個(gè)流水線寄存器中開始有后續(xù)指令需要的值 Clock Cycle1 Cycle2 Cycle3 Cycle4 Cycle5 Cycle6 Cycle7 Cycle8 I0 Load Plus1 Plus2 Plus3 Plus4 實(shí)際上 在第四周期結(jié)束時(shí) 數(shù)據(jù)在流水段寄存器中已經(jīng)有值 采用數(shù)據(jù)轉(zhuǎn)發(fā)技術(shù)可以使load指令后面第二條指令得到所需的值但不能解決load指令和隨后第一條指令間的數(shù)據(jù)冒險(xiǎn) 要延遲執(zhí)行一條指令 這種load指令和隨后指令間的數(shù)據(jù)冒險(xiǎn) 稱為 裝入 使用數(shù)據(jù)冒險(xiǎn) load useDataHazard 若不采用轉(zhuǎn)發(fā) 在何時(shí)才能使用Load指令的結(jié)果 Forwarding 技術(shù)使Load use冒險(xiǎn)只需延遲一個(gè)周期 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 采用 轉(zhuǎn)發(fā) 后僅第二條指令SUBr7 r1 r3不能按時(shí)執(zhí)行 發(fā)生 裝入 使用數(shù)據(jù)冒險(xiǎn) 時(shí) 需要對load后的指令阻塞一個(gè)時(shí)鐘周期 數(shù)據(jù)冒險(xiǎn)處理最佳方案 轉(zhuǎn)發(fā) Load use阻塞 RAW 寫后讀 數(shù)據(jù)冒險(xiǎn)的 轉(zhuǎn)發(fā) 條件 后面指令需用ALU輸出結(jié)果C1 目寄是后一條指令的源寄C2 目寄是后第二條指令的源寄 例如 R Type后跟R lw sw beq等 后面指令需用從DM讀出的結(jié)果C3 目寄是后第二指令的源寄 例如 load指令后跟R Type beq等 用流水段寄存器來表示轉(zhuǎn)發(fā)條件 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是指目的寄存器實(shí)際上是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 因?yàn)閎eq指令無需寫結(jié)果 故不能進(jìn)行轉(zhuǎn)發(fā) 轉(zhuǎn)發(fā)條件的進(jìn)一步完善 以下兩種情況下 轉(zhuǎn)發(fā)會發(fā)生錯(cuò)誤指令的結(jié)果不寫入目的寄存器Rd時(shí)例如 Beq指令只對rs和rt相減 不寫結(jié)果到目的寄存器Rt即 EX MEM或MEM WB流水段寄存器的RegWr信號為0Rd等于 0時(shí)例如 指令sll 0 1 2的轉(zhuǎn)發(fā)結(jié)果為 R 1 2 但實(shí)際上應(yīng)該是0因此 修改轉(zhuǎn)發(fā)條件為 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 轉(zhuǎn)發(fā)路徑和轉(zhuǎn)發(fā)條件 加MUX 使流水段寄存器值返送ALU輸入端 紅線和蘭線可以合并 在原數(shù)據(jù)通路中確實(shí)是合并在一起的 記得嗎 由一個(gè)二路選擇器 控制端為MemtoReg 合并輸出到寄存器堆 所以 無需另有一個(gè)檢測條件C3 C3就是C2 C1反映本條指令和隨后指令間的相關(guān)關(guān)系C2反映本條指令和隨后第二條指令間的相關(guān)關(guān)系 C1和C2分別反映哪兩條指令的關(guān)系呢 轉(zhuǎn)發(fā)路徑和轉(zhuǎn)發(fā)條件 轉(zhuǎn)發(fā)檢測 部件中缺何條件 MEM WB RegWr 1 EX MEM RegWr 1 帶轉(zhuǎn)發(fā)的流水線數(shù)據(jù)通路 ForwardA ForwardB 更加復(fù)雜的數(shù)據(jù)冒險(xiǎn)問題 考察以下指令序列 采用前述轉(zhuǎn)發(fā)條件會發(fā)生什么情況 add 1 1 2add 1 1 3add 1 1 4 可能會使轉(zhuǎn)發(fā)到第3條指令的操作數(shù)是第1條指令結(jié)果 而不是第2條指令的結(jié)果 怎樣改寫 轉(zhuǎn)發(fā) 檢測條件 改C1還是改C2 需要改寫 轉(zhuǎn)發(fā) 條件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 上述公式相當(dāng)于加了一個(gè)條件限制 如果本條指令源操作數(shù)和上條指令的目的寄存器一樣 則不轉(zhuǎn)發(fā)上上條指令的結(jié)果 而轉(zhuǎn)發(fā)上條指令的結(jié)果 即 此時(shí)的C1 1而C2 0 至此 解決了RAW數(shù)據(jù)冒險(xiǎn)的 轉(zhuǎn)發(fā) 處理 對于左邊的指令序列 C1和C2的值各是什么 C1 C2 1 使得Forward信號取值不確定 應(yīng)該讓C1 1 C2 0 所有RAW數(shù)據(jù)冒險(xiǎn)都能通過轉(zhuǎn)發(fā)來解決嗎 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 如何修改數(shù)據(jù)通路來實(shí)現(xiàn)阻塞 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段寄存器中在阻塞點(diǎn) 必須將上述兩條指令的執(zhí)行結(jié)果清除 并延遲一個(gè)周期執(zhí)行這兩條指令 阻塞前的情況 延遲一個(gè)周期執(zhí)行后面指令 相當(dāng)于把阻塞點(diǎn)前面一個(gè)周期的狀態(tài)再保持一個(gè)周期lw指令還是繼續(xù)正常執(zhí)行下去 想想看 lw后面的指令如何做到繼續(xù)保持狀態(tài) Load useDataHazard 硬件阻塞方式 在阻塞點(diǎn) 將上述兩條指令的執(zhí)行結(jié)果清除 并延遲一個(gè)周期執(zhí)行這兩條指令 將ID EX段寄存器中所有控制信號清0 插入一個(gè) 氣泡 IF ID寄存器中的信息不變 還是sub指令 sub指令重新譯碼執(zhí)行 PC中的值不變 還是and指令地址 and指令重新被取出執(zhí)行 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 阻塞后的情況 帶 轉(zhuǎn)發(fā) 和 阻塞 檢測的流水線數(shù)據(jù)通路 至此 硬件處理數(shù)據(jù)冒險(xiǎn) 轉(zhuǎn)發(fā) 阻塞 全部完成 寫使能 信號為0 使PC和IF ID不變 使控制信號清0 阻塞指令執(zhí)行 以下源程序可生成兩種不同的代碼 優(yōu)化的代碼可避免Load阻塞a b c d e f 假定a b c d e f在內(nèi)存 方案5 編譯器進(jìn)行指令順序調(diào)整來解決數(shù)據(jù)冒險(xiǎn) 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 編譯器的優(yōu)化很重要 如果硬件不支持阻塞處理的話 則編譯器可以將順序調(diào)整和插入NOP指令結(jié)合起來 在找不到可插入的指令時(shí)- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
30 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 指令 流水線 ppt 課件
鏈接地址:http://weibangfood.com.cn/p-5845454.html