版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一講流水線數(shù)據(jù)通路和控制邏輯第二講流水線冒險(xiǎn)處理第三講高級(jí)流水線技術(shù)
Ch7:InstructionPipeline指令流水線第一講流水線數(shù)據(jù)通路和控制日常生活中的流水線處理例子:洗衣服單周期處理器模型和流水線性能比較什么樣的指令集適合于流水線方式執(zhí)行如何設(shè)計(jì)流水線數(shù)據(jù)通路以MIPS指令子集來說明詳細(xì)設(shè)計(jì)取指令部件詳細(xì)設(shè)計(jì)執(zhí)行部件分析每條指令在流水線中的執(zhí)行過程,遇到各種問題:資源沖突寄存器和存儲(chǔ)器的信號(hào)競(jìng)爭(zhēng)分支指令的延遲指令間數(shù)據(jù)相關(guān)如何設(shè)計(jì)流水線控制邏輯分析每條指令執(zhí)行過程中的控制信號(hào)給出控制器設(shè)計(jì)過程流水線冒險(xiǎn)的概念主要內(nèi)容復(fù)習(xí):ASingleCycleProcessor32ALUctrClkbusWRegWr3232busA32busB555RwRaRb3232-bitRegistersRsRtRtRdRegDstExtenderMuxMux3216imm16ALUSrcExtOpMuxMemtoRegClkDataInWrEn32AdrDataMemory32MemWrALUZero010101InstructionFetch
UnitClkInstruction<31:0>JumpBranch<21:25><16:20><11:15><0:15>Imm16RdMainControlopALUControlfuncALUop3RegDstALUSrc:<5:0><31:26>Instr<15:0>Zero3復(fù)習(xí):MultipleCycleProcessorMCP:一個(gè)功能部件在一個(gè)指令周期中可以被使用多次。IdealMemoryWrAdrDinRAdr323232DoutMemWr32ALU3232ALUOpALUControlInstructionReg32IRWr32Reg
FileRaRwbusWRb5532busA32busBRegWrRsRtMux01RtRdPCWrALUSelAMux01RegDstMux0132PCMemtoRegExtendExtOpMux01320123416Imm32<<2ALUSelBMux10Target32ZeroZeroPCWrCondPCSrcBrWr32IorD復(fù)習(xí):?jiǎn)沃芷谥衛(wèi)w指令的定時(shí)ClkPCRs,Rt,Rd,Op,FuncClk-to-QALUctrInstructionMemoryAccessTimeOldValueNewValueRegWrOldValueNewValueDelaythroughControlLogicbusARegisterFileAccessTimeOldValueNewValuebusBALUDelayOldValueNewValueOldValueNewValueNewValueOldValueExtOpOldValueNewValueALUSrcOldValueNewValueAddressOldValueNewValuebusWOldValueNewDelaythroughExtender&MuxDataMemoryAccessTimeInstructionFetchInstrDecode/Reg.FetchAddressRegWrDataMemoryRegisterFileWriteTime132LaundryExampleA,B,C,D四個(gè)人,每人都有一批衣服需要
wash,dry,foldWash階段:30minutesDry階段:40minutesFold階段:
20minutesABCDPipelining:It’sNatural!一個(gè)日常生活中的例子—洗衣服如果讓你來管理洗衣店,你會(huì)如何安排?SequentialLaundry(串行方式)串行方式下,4批衣服需要花費(fèi)6小時(shí)(4x(30+40+20)=360分鐘)N批衣服,需花費(fèi)的時(shí)間為Nx(30+40+20)=90N如果用流水線方式洗衣服,則花多少時(shí)間呢?ABCD3040203040203040203040206PM7891011MidnightTaskOrderTimePipelinedLaundry:(StartworkASAP)串行為6小時(shí),N批則為90N分鐘ABCD6PM7891011MidnightTaskOrderTime304040404020流水線方式下,需30+4x40+20=210分(3.5小時(shí))如果有N批衣服呢?30+Nx40+20分鐘假定每一步時(shí)間均衡,則比串行方式提高約3倍!流水方式下,所用時(shí)間主要與最長(zhǎng)階段的時(shí)間有關(guān)!復(fù)習(xí):Load指令的5個(gè)階段Ifetch(取指):取指令并計(jì)算PC+4(用到哪些部件?)Reg/Dec(取數(shù)和譯碼):取數(shù)同時(shí)譯碼(用到哪些部件?)Exec(執(zhí)行):計(jì)算內(nèi)存單元地址(用到哪些部件?)Mem(讀存儲(chǔ)器):從數(shù)據(jù)存儲(chǔ)器中讀(用到哪些部件?)Wr(寫寄存器):將數(shù)據(jù)寫到寄存器中(用到哪些部件?)階段1階段2階段
3階段4階段5IfetchReg/DecExecMemWr指令存儲(chǔ)器、Adder寄存器堆讀口、指令譯碼器擴(kuò)展器、ALU數(shù)據(jù)存儲(chǔ)器寄存器堆寫口這里寄存器堆的讀口和寫口可看成兩個(gè)不同的部件。指令的執(zhí)行過程中,每個(gè)階段使用不同的部件。是否和“洗衣”過程類似?是否可以采用類似方式來執(zhí)行指令呢?單周期指令模型與流水線性能假定以下每步操作所花時(shí)間為:取指:2ns寄存器讀:1nsALU操作:2ns存儲(chǔ)器讀:2ns寄存器寫:1ns單周期模型每條指令在一個(gè)時(shí)鐘周期內(nèi)完成時(shí)鐘周期等于最長(zhǎng)的lw指令的執(zhí)行時(shí)間,即:8ns串行執(zhí)行時(shí),N條指令的執(zhí)行時(shí)間為:8Nns流水線性能時(shí)鐘周期等于最長(zhǎng)階段所花時(shí)間為:2ns每條lw指令的執(zhí)行時(shí)間為:2nsx5=10nsN條指令的執(zhí)行時(shí)間為:(5+(N-1))x2ns在N很大時(shí)約為2Nns,比串行方式提高約4倍若各階段操作均衡(例如,各階段都是2ns,則串行需10Nns,流水線仍為2Nns),提高倍數(shù)為5倍。Load指令執(zhí)行時(shí)間總計(jì)為:8ns
(假定控制單元、PC訪問、信號(hào)傳遞等沒有延遲)流水線方式下,單條指令執(zhí)行時(shí)間不能縮短,但能大大提高指令吞吐率!222222222222222流水線指令集的設(shè)計(jì)具有什么特征的指令集有利于流水線執(zhí)行呢?長(zhǎng)度盡量一致,有利于簡(jiǎn)化取指令和指令譯碼操作MIPS指令32位,下址計(jì)算方便:PC+4X86指令從1字節(jié)到17字節(jié)不等,使取指部件極其復(fù)雜格式少,且源寄存器位置相同,有利于在指令未知時(shí)就可取操作數(shù)MIPS指令的Rs和Rt位置一定,在指令譯碼時(shí)就可讀Rs和Rt的值(若位置隨指令不同而不同,則需先確定指令后才能取寄存器編號(hào))load/Store指令才能訪問存儲(chǔ)器,有利于減少操作步驟,規(guī)整流水線lw/sw指令的地址計(jì)算和運(yùn)算指令的執(zhí)行步驟規(guī)整在同一個(gè)周期X86運(yùn)算類指令操作數(shù)可為內(nèi)存數(shù)據(jù),需計(jì)算地址、訪存、執(zhí)行內(nèi)存中”對(duì)齊”存放,有利于減少訪存次數(shù)和流水線的規(guī)整總之,規(guī)整、簡(jiǎn)單和一致等特性有利于指令的流水線執(zhí)行流水線執(zhí)行方式能大大提高指令吞吐率,現(xiàn)代計(jì)算機(jī)都采用流水線方式!Load指令的流水線ClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7IfetchReg/DecExecMemWr1stlwIfetchReg/DecExecMemWr2ndlwIfetchReg/DecExecMemWr3rdlw每個(gè)周期最多有五個(gè)功能部件同時(shí)在工作后面指令在前面完成取指后馬上開始每個(gè)load指令仍然需要五個(gè)周期完成但是吞吐率(throughput)提高許多,理想情況下,有:每個(gè)周期有一條指令進(jìn)入流水線每個(gè)周期都有一條指令完成每條指令的有效周期(CPI)為1IfetchReg/DecExecMemWr4thlwIfetchReg/DecExecMemWr5thlwIfetchReg/DecExec…R-type指令的4個(gè)階段Ifetch:
取指令并計(jì)算PC+4Reg/Dec:
從寄存器取數(shù),同時(shí)指令在譯碼器進(jìn)行譯碼Exec:
在ALU中對(duì)操作數(shù)進(jìn)行計(jì)算Wr:ALU計(jì)算的結(jié)果寫到寄存器Cycle1Cycle2Cycle3Cycle4IfetchReg/DecExecWrR-type含R-type和Load指令的流水線上述流水線有個(gè)問題:兩條指令試圖同時(shí)寫寄存器,因?yàn)長(zhǎng)oad在第5階段用寄存器寫口R-type在第4階段用寄存器寫口把一個(gè)功能部件同時(shí)被多條指令使用的現(xiàn)象稱為結(jié)構(gòu)冒險(xiǎn)(StrutureHazard)為了流水線能順利工作,規(guī)定:每個(gè)功能部件每條指令只能用一次(如:寫口不能用兩次或以上)每個(gè)功能部件必須在相同的階段被使用(如:寫口總是在第五階段被使用)IfetchReg/DecExecWrR-typeIfetchReg/DecExecWrR-typeClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7Cycle8Cycle9IfetchReg/DecExecWrR-typeIfetchReg/DecExecWrR-typeIfetchReg/DecExecMemWrLoadWehaveaproblem!或稱為資源沖突!解決方案:R-type的Wr操作延后一個(gè)周期執(zhí)行加一個(gè)NOP階段以延遲“寫”操作:把“寫”操作安排在第5階段,這樣使R-Type的Mem階段為空NOP這樣使流水線中的每條指令都有相同多個(gè)階段!IfetchReg/DecExecWrR-type12345MemClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7Cycle8Cycle9IfetchReg/DecWrR-typeIfetchReg/DecWrR-typeIfetchReg/DecExecMemWrLoadIfetchReg/DecWrR-typeIfetchReg/DecWrR-typeMemExecExecExecExecMemMemMemNOOP!Store指令的四個(gè)階段Ifetch:取指令并計(jì)算PC+4Reg/Dec:從寄存器取數(shù),同時(shí)指令在譯碼器進(jìn)行譯碼Exec:16位立即數(shù)符號(hào)擴(kuò)展后與寄存器值相加,計(jì)算主存地址Mem:將寄存器讀出的數(shù)據(jù)寫到主存Cycle1Cycle2Cycle3Cycle4IfetchReg/DecExecMemStoreWrWr:
加一個(gè)空的寫階段,使流水線更規(guī)整!NOOP!Beq的四個(gè)階段Ifetch:取指令并計(jì)算PC+4Reg/Dec:從寄存器取數(shù),同時(shí)指令在譯碼器進(jìn)行譯碼Exec:
執(zhí)行階段ALU中比較兩個(gè)寄存器的大?。ㄗ鰷p法)Adder中計(jì)算轉(zhuǎn)移地址Mem:
如果比較相等,則:轉(zhuǎn)移目標(biāo)地址寫到PCCycle1Cycle2Cycle3Cycle4IfetchReg/DecExecMemBeqWrNOOP!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ù)雜的“l(fā)oad”指令所需的五個(gè)階段來劃分,不需要的階段加一個(gè)“NOP”操作APipelinedDatapath(五階段流水線數(shù)據(jù)通路)IF/ID
RegisterID/ExRegisterEx/Mem
RegisterMem/Wr
RegisterPCDataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExtOpExecUnitbusAbusBImmALUOpALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetch(IF)Reg/Dec(ID)Exec(Ex)MemWrClock-to-Qdelay下面看每條指令在流水線通路中的執(zhí)行過程Wr階段沒有Data-Path嗎?有!寄存器寫口流水段寄存器的作用?保存每個(gè)周期執(zhí)行的結(jié)果!屬于內(nèi)部寄存器,對(duì)程序員透明,不需作為現(xiàn)場(chǎng)保存取指令(Ifetch)階段——開始時(shí)IF/ID:???????ID/ExRegisterEx/Mem
RegisterMem/Wr
RegisterPC=10DataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExtOpExecUnitbusAbusBImmALUOpALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemYouarehere!第10單元指令:lw$1,0x100($2)功能:$1<-Mem[($2)+0x100]有誰發(fā)現(xiàn)這里有一個(gè)假設(shè)有問題?MIPS指令的地址可能是10嗎?取指令(Ifetch)階段——結(jié)束后IF/ID:lw$1,100($2)ID/ExRegisterEx/Mem
RegisterMem/Wr
RegisterPC=14DataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExtOpExecUnitbusAbusBImmALUOpALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemYouarehere!第10單元指令:lw$1,0x100($2)功能:$1Mem[($2)+0x100]下一目標(biāo):設(shè)計(jì)IUnit(功能是啥?)指令部件IUnit的設(shè)計(jì)第10單元指令::lw$1,0x100($2)隨后的指令在14號(hào)單元中!IF/ID:lw$1,100($2)PC=1410AdderInstructionMemory“4”InstructionAddressClkIfetchYouarehere!Reg/Dec開始從14號(hào)單元取指!PC新值(14)≠舊輸出(10)流水段寄存器用來存放各階段的執(zhí)行結(jié)果總是在下個(gè)時(shí)鐘到來后的Clock-to-Q寫入取指階段有哪些控制信號(hào)?不需控制信號(hào),因?yàn)槊織l指令執(zhí)行功能一樣,是確定的,無需根據(jù)指令的不同來控制執(zhí)行不同的操作!指令部件功能InstrMem[PC]PCPC+4這里MUX的控制信號(hào)由其他階段產(chǎn)生!應(yīng)把哪些信息存到流水段寄存器IF/ID中?應(yīng)保存后面階段用到的指令和PC+4的值!指令在隨后階段被送出譯碼!PC+4用來計(jì)算轉(zhuǎn)移目標(biāo)地址譯碼/取數(shù)(Reg/Dec)階段IF/ID:ID/Ex:Reg.2&0x100Ex/MemRegisterMem/Wr
RegisterPC
DataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExtOpExecUnitbusAbusBImmALUOpALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemYouarehere!第10單元指令:lw$1,0x100($2)功能:$1Mem[($2)+0x100]Reg[Rs],Reg[Rt],Rt,Rd,Imm16,PC+4等被保存在ID/EXE中該階段有哪些控制信號(hào)?沒有!因是所有指令的公共操作,故無控制信號(hào)!RegWr是Wr段的信號(hào)!指令還要存ID/EX中嗎?不要,只要存相關(guān)信息Load指令的地址計(jì)算階段IF/ID:ID/Ex
RegisterEx/Mem:Load’sAddressMem/Wr
RegisterPCDataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExecUnitbusAbusBImmMux10MemtoReg10RtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemYouarehere!第10單元指令:lw$1,0x100($2)功能:$1Mem[($2)+0x100]ExtOp=?ALUOp=?ALUSrc=?RegDst=0指令已被譯碼,可確定執(zhí)行部件的控制信號(hào)!下一目標(biāo):設(shè)計(jì)執(zhí)行部件(ExecUnit)連接到錯(cuò)誤的目的地址,指令執(zhí)行錯(cuò)誤!目的寄存器Rt不傳遞下去會(huì)怎樣?執(zhí)行部件(ExecUnit)的設(shè)計(jì)ID/Ex
RegisterEx/Mem:Load’sMemoryAddressALUControlALUctr32busA32busBExtenderMux16immALUSrc=?ExtOp=?3ALUZero0132ALUout32Adder3ALUOp=?<<232PC+4Target32ClkExecYouarehere!MemAdder用于計(jì)算分支指令的轉(zhuǎn)移地址RegDes=0,ALUSrc=1ALUop=add,Extop=1Load指令的各控制信號(hào)取值?執(zhí)行部件功能?計(jì)算內(nèi)存地址計(jì)算轉(zhuǎn)移目標(biāo)地址一般ALU運(yùn)算Branch指令呢?RegDes=x,ALUSrc=0ALUop=sub,Extop=1Store指令呢?RegDes=x,ALUSrc=1ALUop=add,Extop=1Ori指令呢?RegDes=0,ALUSrc=1ALUop=or,Extop=0R型指令呢?RegDes=1,ALUSrc=0ALUop=‘func’,Extop=xLoad指令的存儲(chǔ)器讀(Mem)周期IF/ID:ID/Ex
RegisterEx/Mem
RegisterMem/Wr:Load’sDataPCDataMemWADiRADoIUnitAIRFileDiRaRbRwMemWr=0RegWrExtOpExecUnitbusAbusBImmALUOpALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch=010ClkIfetchReg/DecExecMemYouarehere!第10單元指令:lw$1,0x100($2)功能:
$1Mem[($2)+0x100]周期以最長(zhǎng)操作為準(zhǔn)設(shè)計(jì)Cycle>Tread比較洗衣流水線,指令流水有什么不同?洗衣流程不能反向進(jìn)行,但該階段有反向數(shù)據(jù)流,可能會(huì)引起冒險(xiǎn)!以后介紹。Load指令的回寫(WriteBack)階段IF/ID:ID/Ex
RegisterEx/Mem
RegisterMem/Wr
RegisterPCDataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWr=1ExtOpExecUnitbusAbusBImmALUOpALUSrcMux1010RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemLocation10:lw$1,0x100($2)功能:$1Mem[($2)+0x100]Wr各階段所經(jīng)DataPath已有,控制信號(hào)如何得到?該階段有反向數(shù)據(jù)流,可能會(huì)引起冒險(xiǎn)!以后介紹。MemtoReg=1流水線中的ControlSignals如何獲得?主要考察:第N階段的控制信號(hào),它取決于是某條指令的某個(gè)階段。N=Exec,Mem,orWr(只有這三個(gè)階段有控制信號(hào))例:Load的Exec段的控制信號(hào)如圖中所示MemWrMemtoRegRegDst=0IF/ID:ID/Ex
RegisterEx/Mem:Load’sAddressMem/Wr
RegisterPCDataMemWADiRADoIUnitAIRFileDiRaRbRwRegWrExtOp=1ExecUnitbusAbusBImmALUOp=AddALUSrc=1Mux1010RtRdI16PC+4PC+4RsRtPC+4ZeroBranch10IfetchReg/DecExecMemWr流水線中的ControlSignals如何獲得?在取數(shù)/譯碼(Reg/Dec)階段產(chǎn)生本指令每個(gè)階段的所有控制信號(hào)Exec信號(hào)(ExtOp,ALUSrc,...)在1個(gè)周期后使用Mem信號(hào)(MemWr,
Branch)在2個(gè)周期后使用Wr信號(hào)(MemtoReg,RegWr)在3個(gè)周期后使用IF/IDRegisterID/ExRegisterEx/MemRegisterMem/WrRegister2Reg/Dec3Exec4MemExtOpALUOpRegDstALUSrcBranchMemWrMemtoRegRegWrMainControlExtOpALUOpRegDstALUSrcMemtoRegRegWrMemtoRegRegWrMemtoRegRegWrBranchMemWrBranchMemWr5Wr
各流水段部件在一個(gè)時(shí)鐘內(nèi)完成某條指令的某個(gè)階段的工作!所以,控制信號(hào)也要保存在流水段寄存器中!在下個(gè)時(shí)鐘到達(dá)時(shí),把執(zhí)行結(jié)果以及前面?zhèn)鬟f來的后面各階段要用到的所有數(shù)據(jù)(如:指令、立即數(shù)、目的寄存器等)和控制信號(hào)保存到流水線寄存器中!流水線中的ControlSignals通過對(duì)前面流水線數(shù)據(jù)通路的分析,得知:因?yàn)槊總€(gè)時(shí)鐘都會(huì)改變PC的值,所以PC不需要寫控制信號(hào)流水段寄存器每個(gè)時(shí)鐘都會(huì)寫入一次,也不需要寫控制信號(hào)Ifecth階段和Dec/Reg階段都沒有控制信號(hào),因?yàn)楣δ芏家粯覧xec階段的控制信號(hào)有四個(gè)ExtOp(擴(kuò)展器操作):1-符號(hào)擴(kuò)展;0-零擴(kuò)展ALUSrc(ALU的B口來源):1-來源于擴(kuò)展器;0-來源于BusBALUOp(主控制器輸出,用于輔助局部ALU控制邏輯來決定ALUCtrl)RegDst(指定目的寄存器):1-Rd;0-RtMem階段的控制信號(hào)有兩個(gè)MemWr(DM的寫信號(hào)):Store指令時(shí)為1,其他指令為0Branch(是否為分支指令):分支指令時(shí)為1,其他指令為0Wr階段的控制信號(hào)有兩個(gè)MemtoReg(寄存器的寫入源):1-DM輸出;0-ALU輸出RegWr(寄存器堆寫信號(hào)):結(jié)果寫寄存器的指令都為1,其他指令為0控制邏輯(Control)的設(shè)計(jì)流水線控制邏輯的設(shè)計(jì)每條指令的控制信號(hào)在指令執(zhí)行期間都不變與單周期控制邏輯設(shè)計(jì)類似設(shè)計(jì)過程控制邏輯分成兩部分主控制邏輯:生成ALUop和其他控制信號(hào)局部ALU控制邏輯:根據(jù)ALUop和func字段生成ALUCtrl用真值表建立指令和控制信號(hào)之間的關(guān)系寫出每個(gè)控制信號(hào)的邏輯表達(dá)式控制邏輯的輸出(控制信號(hào))在ID階段生成,并存放在ID/EX流水段寄存器中,然后每來一個(gè)時(shí)鐘跟著其它數(shù)據(jù)和信息傳送到下一級(jí)流水段寄存器在同一時(shí)刻,不同階段同時(shí)執(zhí)行不同指令,不同的指令得到不同控制信號(hào)請(qǐng)復(fù)習(xí)單周期和多周期控制器設(shè)計(jì)。。。藍(lán)色部分是控制信號(hào)控制信號(hào)在流水線中的傳遞以及帶來的問題在取數(shù)/譯碼(Reg/Dec)階段產(chǎn)生本指令每個(gè)階段的所有控制信號(hào)Exec信號(hào)(ExtOp,ALUSrc,...)在1個(gè)周期后使用Mem信號(hào)(MemWr,
Branch)在2個(gè)周期后使用Wr信號(hào)(MemtoReg,RegWr)在3個(gè)周期后使用IF/IDRegisterID/ExRegisterEx/MemRegisterMem/WrRegisterReg/DecExecMemExtOpALUOpRegDstALUSrcBranchMemWrMemtoRegRegWrMainControlExtOpALUOpRegDstALUSrcMemtoRegRegWrMemtoRegRegWrMemtoRegRegWrBranchMemWrBranchMemWrWr保存在流水段寄存器中的信息(包括前面階段傳遞來或執(zhí)行的結(jié)果及控制信號(hào))一起被傳遞到下一個(gè)流水段!所以,控制信號(hào)也要保存在流水段寄存器中!RtData(這里是否會(huì)有問題?)Rt和Data在RegWr后到達(dá)怎么辦?同樣,這里也有問題!流水線中的“競(jìng)爭(zhēng)”問題多周期中解決Addr和WrEn之間競(jìng)爭(zhēng)問題的方法:在第N周期結(jié)束時(shí),讓Addr信號(hào)有效在第N+1周期讓W(xué)rEn有效上述方法在流水線設(shè)計(jì)中不能用,因?yàn)椋好總€(gè)周期必須能夠?qū)慠egister每個(gè)周期必須能夠?qū)慚emoryClockIfetchReg/DecExecMemWrStoreIfetchReg/DecExecMemWrStoreIfetchReg/DecExecMemWrR-typeIfetchReg/DecExecMemWrR-type如何解決?保證Addr信號(hào)在WriteEnable信號(hào)之前到達(dá)寄存器組的同步和存儲(chǔ)器的同步解決方案:將WriteEnable和時(shí)鐘信號(hào)“與”1.Addr,Data,和WrEn必須在Clk邊沿到來后至少穩(wěn)定一個(gè)set-up時(shí)間2.Clk高電平時(shí)間大于寫入時(shí)間ClkAddressDataWrEnReg
FileorMemoryWrEnI_AddrI_DataReg
FileorMemoryClkI_AddrI_WrEnAddressDataI_WrEnC_WrEnC_WrEnActual
write等價(jià)于須由電路專家確保不會(huì)發(fā)生“定時(shí)錯(cuò)誤”(即:能合理設(shè)計(jì)“Clock”!)相當(dāng)于單周期通路中的理想寄存器和存儲(chǔ)器流水線舉例:考察流水線DataPath的數(shù)據(jù)流動(dòng)情況End
ofCycle4EndofCycle5End
ofCycle
6End
ofCycle7ClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7Cycle8IfetchReg/DecExecMemWr0:LoadIfetchReg/DecExecMemWr4:R-typeIfetchReg/DecExecMemWr8:StoreIfetchReg/DecExecMemWr12:Beq(targetis1000)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ù)流動(dòng)情況,控制信號(hào)隨數(shù)據(jù)同步流動(dòng)因而不再說明。第四周期結(jié)束時(shí)的狀態(tài):0:Load’sMem4:R-type’sExec8:Store’sReg12:Beq’sIfetchIF/ID:BeqInstructionID/Ex:Store’sbusA&BEx/Mem:R-type’sResultMem/Wr:Load’sDoutPC=16DataMemWADiRADoIUnitAIRFileDiRaRbRwRegWr=?ExtOp=xExecUnitbusAbusBImmALUOp=R-typeALUSrc=0Mux10MemtoReg=?10RegDst=1RtRdImmPC+4PC+4RsRtPC+4ZeroBranch=01012:Beq’sIfet8:Store’s
Reg4:R-type’sExec0:Load’sMemClkMemWr=0Clk如果Mem階段是Branch且Zero為1,會(huì)怎樣?
?’sWrLoad指令前某指令(1)(2)(3)(5)(4)第五周期結(jié)束時(shí)的狀態(tài):0:Lw’sWr4:R’sMem8:Store’sExec12:Beq’sReg16:R’sIfetchIF/ID:Instruction@16ID/Ex:Beq’sbusA&BEx/Mem:Store’sAddressMem/Wr:R-type’sResultPC=20DataMemWADiRADoIUnitAIRFileDiRaRbRwRegWr=1ExtOp=1ExecUnitbusAbusBImmALUOp=AddALUSrc=1Mux10MemtoReg=110RegDst=xRtRdImmPC+4PC+4RsRtPC+4ZeroBranch=01016:R’sIfet12:Beq’s
Reg8:Store’sExec4:R-type’sMemClkMemWr=0Clk同一周期寄存器有讀和寫,可能嗎?利用時(shí)鐘上升和下降沿兩次觸發(fā),能做到前半周期寫,后半周期讀寄存器的寫口和讀口可看成是獨(dú)立的兩個(gè)部件!0:Load’sWr20第六周期結(jié)束時(shí)的狀態(tài):4:R’sWr8:Store’sMem12:Beq’sExec16:R’sReg20:R’sIfetIF/ID:Instruction@20ID/Ex:R-type’sbusA&BEx/Mem:Beq’sResultsMem/Wr:NothingforStPC=24DataMemWADiRADoIUnitAIRFileDiRaRbRwRegWr=1ExtOp=1ExecUnitbusAbusBImmALUOp=SubALUSrc=0Mux10MemtoReg=010RegDst=xRtRdImmPC+4PC+4RsRtPC+4ZeroBranch=01020:R-type’s
Ifet16:R-type’sReg12:Beq’sExec8:Store’sMem4:R-type’sWrClkMemWr=1ClkIfetch和Reg兩個(gè)周期每條指令執(zhí)行的都一樣!第七周期結(jié)束時(shí)的狀態(tài):8:Store’sWr12:Beq’sMem16:R’sExec20:R’sReg24:R’sIfetIF/ID:Instruction@24ID/Ex:R-type’sbusA&BEx/Mem:Rtype’sResultsMem/Wr:NothingforBeqPC=1000DataMemWADiRADoIUnitAIRFileDiRaRbRwRegWr=0ExtOp=xExecUnitbusAbusBImmALUOp=R-typeALUSrc=0Mux10MemtoReg=x10RegDst=1RtRdImmPC+4PC+4RsRtPC+4ZeroBranch=11024:R-type’s
Ifet20:R-type’sReg16:R-type’sExec12:Beq’sMem8:Store’sWrClkMemWr=0Clk假定相等,則Zero=1轉(zhuǎn)移目標(biāo)地址送PC!這里出現(xiàn)反向數(shù)據(jù)流!轉(zhuǎn)移目標(biāo)地址反向送給PC可能會(huì)導(dǎo)致控制冒險(xiǎn)!總結(jié)前面的流水線執(zhí)行過程(有關(guān)beq)Branch指令何時(shí)確定是否轉(zhuǎn)移?轉(zhuǎn)移目標(biāo)地址在第幾周期計(jì)算出來?第六周期得到Zero和轉(zhuǎn)移地址、第七周期控制轉(zhuǎn)移地址送到PC輸入端、第八周期開始才能根據(jù)轉(zhuǎn)移地址取指令如果Branch指令執(zhí)行結(jié)果是需要轉(zhuǎn)移(稱為taken),則流水線會(huì)怎樣?ClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7Cycle8IfetchReg/DecExecMemWr0:LoadIfetchReg/DecExecMemWr4:R-typeIfetchReg/DecExecMemWr8:StoreIfetchReg/DecExecMemWr12:Beq(targetis1000)IfetchReg/DecExecMemWr16:R-typeIfetchReg/DecExecMemWrIfetchReg/DecExecMem24:R-type20:R-typeIfetchReg/DecExec1000: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)
)Cycle4Cycle5Cycle6Cycle7Cycle8Cycle9Cycle10Cycle11ClkIfetchReg/DecExecMemWrIfetchReg/DecExecMemWr16:R-typeIfetchReg/DecExecMemWrIfetchReg/DecExecMemWr24:R-type12:Beq(targetis1000)20:R-typeIfetchReg/DecExecMemWr1000:TargetofBr總結(jié)前面的流水線執(zhí)行過程(有關(guān)load)Load指令何時(shí)能把數(shù)據(jù)寫到寄存器?第幾周期開始寫數(shù)據(jù)?第五周期寫入、第六周期開始才能使用如果后面R-Type的操作數(shù)是load指令目標(biāo)寄存器的內(nèi)容,則流水線怎樣?ClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7Cycle8IfetchReg/DecExecMemWr0:LoadIfetchReg/DecExecMemWr4:R-typeIfetchReg/DecExecMemWr8:Store12:Beq(targetis1000)16:R-type24:R-type20:R-type1000:TargetofBr裝入指令(Load)引起的“延遲”現(xiàn)象盡管Load指令在第一周期就被取出,但:數(shù)據(jù)在第五周期結(jié)束才被寫入寄存器在第六周期時(shí),寫入的數(shù)據(jù)才能被用結(jié)果:在Load指令結(jié)果有效前,已經(jīng)有三條指令被取出(如果隨后的指令要用到Load的數(shù)據(jù)的話,就需要延遲三條指令才能用!)這種現(xiàn)象被稱為數(shù)據(jù)冒險(xiǎn)(DataHazard)
或數(shù)據(jù)相關(guān)(DataDependency
)ClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7Cycle8IfetchReg/DecExecMemWrI0:LoadIfetchReg/DecExecMemWrPlus1IfetchReg/DecExecMemWrPlus2IfetchReg/DecExecMemWrPlus3IfetchReg/DecExecMemWrR-Type寄存器的使用方式對(duì)數(shù)據(jù)冒險(xiǎn)有影響數(shù)據(jù)在第五周期的前半段寫入寄存器在第五周期的后半段,寫入的數(shù)據(jù)才能被用結(jié)果:在Load指令結(jié)果有效前,已經(jīng)有兩條指令被取出(如果隨后的指令要用到Load的數(shù)據(jù)的話,就需要延遲兩條指令才能用!)ClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7Cycle8IfetchReg/DecExecMemWrI0:LoadIfetchReg/DecExecMemWrPlus1IfetchReg/DecExecMemWrPlus2IfetchReg/DecExecMemWrR-Type第一講內(nèi)容小結(jié)指令的執(zhí)行可以像洗衣服一樣,分為N個(gè)步驟,并用流水線方式進(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/Reg)段指令譯碼、讀Rs和Rt(寄存器讀口)執(zhí)行(EXE)段計(jì)算轉(zhuǎn)移目標(biāo)地址、ALU運(yùn)算(Extender、ALU、Adder)存儲(chǔ)器(MEM)段讀或?qū)懘鎯?chǔ)單元(DataMemory)寫寄存器(Wr)段ALU結(jié)果或從DM讀出數(shù)據(jù)寫到寄存器(寄存器寫口)流水線控制器的實(shí)現(xiàn)IF和ID/Reg段不需控制信號(hào)控制,只有EXE、MEM和Wr需要ID段生成所有控制信號(hào),并隨指令的數(shù)據(jù)同步向后續(xù)階段流動(dòng)寄存器和存儲(chǔ)器的競(jìng)爭(zhēng)問題可利用時(shí)鐘信號(hào)來解決流水線冒險(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)象和對(duì)策數(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ā)檢測(cè)/轉(zhuǎn)發(fā)控制數(shù)據(jù)冒險(xiǎn)和阻塞阻塞檢測(cè)/阻塞控制控制冒險(xiǎn)的現(xiàn)象和對(duì)策靜態(tài)分支預(yù)測(cè)技術(shù)動(dòng)態(tài)分支預(yù)測(cè)技術(shù)縮短分支延遲技術(shù)流水線中對(duì)異常和中斷的處理訪問缺失對(duì)流水線的影響主要內(nèi)容Hazards:指流水線遇到無法正確執(zhí)行后續(xù)指令或執(zhí)行了不該執(zhí)行的指令Structuralhazards
Datahazards:Control(Branch)
hazards總結(jié):流水線的三種沖突/冒險(xiǎn)(Hazard)情況MemStructuralHazard(結(jié)構(gòu)冒險(xiǎn))現(xiàn)象Time(clockcycles)LoadInstr1Instr2Instr3Instr4ALUMemRegMemRegALUMemRegMemRegALUMemRegMemRegALURegMemRegALUMemRegMemReg如果只有一個(gè)存儲(chǔ)器,則在Load指令取數(shù)據(jù)同時(shí)又取指令的話,則發(fā)生沖突!如果不對(duì)寄存器堆的寫口和讀口獨(dú)立設(shè)置的話,則發(fā)生沖突!結(jié)構(gòu)冒險(xiǎn)也稱為硬件資源沖突:同一個(gè)執(zhí)行部件被多條指令使用。RegStructuralHazard的解決方法Instr.OrderTime(clockcycles)LoadInstr1Instr2Instr3Instr4ALUImRegDmALUImRegDmALUImRegDmRegALURegDmRegALUImRegDmReg將InstructionMemory(Im)
和DataMemory(Dm)分開將寄存器讀口和寫口獨(dú)立開來Im為了避免結(jié)構(gòu)冒險(xiǎn),規(guī)定流水線數(shù)據(jù)通路中功能部件的設(shè)置原則為:每個(gè)部件在特定的階段被用?。ㄈ纾篈LU總在第三階段被用?。㏑egBACKDataHazard現(xiàn)象addr1
,r2,r3subr4,r1
,r3andr6,r1
,r7orr8,r1
,r9xorr10,r1
,r11想一下,哪條指令的r1是老的值?哪條是新的值?畫出流水線圖能很清楚理解!舉例說明:以下指令序列中,寄存器r1會(huì)發(fā)生數(shù)據(jù)冒險(xiǎn)本講介紹基本流水線,僅考慮RAW冒險(xiǎn)DataHazardonr1Instr.OrderTime(clockcycles)addr1,r2,r3subr4,r1,r3andr6,r1,r7orr8,r1,r9xorr10,r1,r11IFID/RFEXMEMWBALUImRegDmRegALUImRegDmRegALUImRegDmRegImALURegDmRegALUImRegDmReg最后一條指令的r1才是新的值!如何解決這個(gè)問題?方案1:在硬件上采取措施,使相關(guān)指令延遲執(zhí)行Instr.OrderTime(clockcycles)addr1,r2,r3subr4,r1,r3andr6,r1,r7IFID/RFEXMEMWBALUImRegDmRegALUImRegDmRegstallstallstallALUImRegDmbubblebubblebubblebubbleImbubblebubblebubblebubbleImbubblebubblebubblebubbleIm
硬件上通過阻塞(stall)方式阻止后續(xù)指令執(zhí)行,延遲到有新值以后!這種做法稱為流水線阻塞,也稱為“氣泡Bubble”缺點(diǎn):控制相當(dāng)復(fù)雜,需要改數(shù)據(jù)通路!方案2:軟件上插入無關(guān)指令I(lǐng)nstr.OrderTime(clockcycles)addr1,r2,r3subr4,r1,r3andr6,r1,r7IFID/RFEXMEMWBALUImRegDmRegALUImRegDmReg
最差的做法:由編譯器插入三條NOP指令,浪費(fèi)三條指令的空間和時(shí)間nopnopnopALUImRegDmALUImRegDmRegALUImRegDmRegImALURegDmReg方案3:利用DataPath中的中間數(shù)據(jù)Instr.OrderTime(clockcycles)addr1,r2,r3subr4,r1,r3andr6,r1,r7orr8,r1,r9xorr10,r1,r11IFID/RFEXMEMWBALUImRegDmRegALUImRegDmRegALUImRegDmRegImALURegDmRegALUImRegDmReg
仔細(xì)觀察后發(fā)現(xiàn):流水段寄存器中已有需要的值r1!1.把數(shù)據(jù)從流水段寄存器中直接取到ALU的輸入端2.寄存器寫/讀口分別在前/后半周期,使寫入被直接讀出稱為轉(zhuǎn)發(fā)(Forwading)或旁路(Bypassing)在哪個(gè)流水段R中?硬件上的改動(dòng)以支持“轉(zhuǎn)發(fā)”技術(shù)(自學(xué))加MUX,使流水段寄存器值返送ALU輸入端假定流水段寄存器能讀出新寫入的值(否則,需要更多的轉(zhuǎn)發(fā)數(shù)據(jù))addr3,r2,r1Subr5,r3,r4addr3,r2,r1Orr6,r2,r1Subr5,r3,r4lwr3,100(r1)Orr6,r2,r1Subr5,r3,r4lwr3,100(r1)Orr6,r3,r1如果指令序列為:能用“轉(zhuǎn)發(fā)”技術(shù)解決這里的數(shù)據(jù)冒險(xiǎn)嗎?ExMem復(fù)習(xí):Load指令引起的延遲現(xiàn)象Load指令最早在哪個(gè)流水線寄存器中開始有后續(xù)指令需要的值?ClockCycle1Cycle2Cycle3Cycle4Cycle5Cycle6Cycle7Cycle8IfetchReg/DecExecMemWrI0:LoadIfetchReg/DecExecMemWrPlus1IfetchReg/DecExecMemWrPlus2IfetchReg/DecExecMemWrPlus3IfetchReg/DecExecMemWrPlus4實(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é)果?延遲2或3條指令!“Forwarding”技術(shù)使Load-use冒險(xiǎn)只需延遲一個(gè)周期Instr.OrderTime(clockcycles)lwr1,0(r2)subr7,r1,r3andr6,r1,r7orr8,r1,r9IFID/RFEXMEMWBALUImRegDmRegALUImRegDmRegALUImRegDmRegImALURegDmReg采用“轉(zhuǎn)發(fā)”后僅第二條指令SUBr7,r1,r3不能按時(shí)執(zhí)行!需要阻塞一個(gè)周期。(其它后續(xù)指令順延)發(fā)生“裝入-使用數(shù)據(jù)冒險(xiǎn)”時(shí),需要對(duì)load后的指令阻塞一個(gè)時(shí)鐘周期!方案1:硬件阻止指令執(zhí)行來解決load-useInstr.OrderTime(clockcycles)lwr1,0(r2)subr4,r1,r3IFID/RFEXMEMWBALUImRegDmRegstallbubblebubblebubblebubbleImandr6,r1,r7orr8,r1,r9ALUImRegDmRegALUImRegDmRegImALURegDmReg用硬件阻塞一個(gè)周期方案2:軟件上插入NOP指令來解決load-useInstr.OrderTime(clockcycles)lwr1,0(r2)subr4,r1,r3IFID/RFEXMEMWB用軟件插入一條NOP指令?。ㄓ行┨幚砥鞑恢С钟布枞幚恚├纾篗IPS1處理器沒有硬件阻塞處理,而由編譯器(或匯編程序員)來處理。nopandr6,r1,r7orr8,r1,r9ALUImRegDmRegALUImRegDmRegImALURegDmRegALUImRegDmRegALUImRegDmReg以下源程序可生成兩種不同的代碼,優(yōu)化的代碼可避免Load阻塞 a=b+c; d=e–f;假定a,b,c,d,e,f在內(nèi)存方案3:編譯器進(jìn)行指令順序調(diào)整來解決load-useFastcode:
lw $2,b lw $3,c
lw $5,e add $1,$2,$3 lw $6,f
sw a,$1 sub $4,$5,$6 sw d,$4
Slowcode:
lw $2,b lw $3,c add $1,$2,$3
sw a,$1 lw $5,e
lw $6,f sub $4,$5,$6 sw d,$4調(diào)整后編譯器的優(yōu)化很重要!真正執(zhí)行時(shí)需阻塞2次真正執(zhí)行時(shí)無需阻塞階段小結(jié):數(shù)據(jù)冒險(xiǎn)的解決方法方法1:硬件阻塞(stall)方法2:軟件插入“NOP”指令方法3:編譯優(yōu)化:調(diào)整指令順序,能解決所有數(shù)據(jù)冒險(xiǎn)嗎?方法4:合理實(shí)現(xiàn)寄存器堆的讀/寫操作,能解決所有數(shù)據(jù)冒險(xiǎn)嗎?前半時(shí)鐘周期寫,后半時(shí)鐘周期讀,若同一個(gè)時(shí)鐘內(nèi)前面指令寫入的數(shù)據(jù)正好是后面指令所讀數(shù)據(jù),則不會(huì)發(fā)生數(shù)據(jù)冒險(xiǎn)方法5:轉(zhuǎn)發(fā)(Forwarding或Bypassing旁路)技術(shù),能解決所有數(shù)據(jù)冒險(xiǎn)嗎?若相關(guān)數(shù)據(jù)是ALU結(jié)果,則如何?
可通過轉(zhuǎn)發(fā)解決若相關(guān)數(shù)據(jù)是上條指令DM讀出內(nèi)容,則如何?不能通過轉(zhuǎn)發(fā)解決,隨后指令需被阻塞一個(gè)時(shí)鐘或加NOP指令實(shí)現(xiàn)“轉(zhuǎn)發(fā)”和“阻塞”要修改數(shù)據(jù)通路:(1)檢測(cè)何時(shí)需要“轉(zhuǎn)發(fā)”,并控制實(shí)現(xiàn)“轉(zhuǎn)發(fā)”(2)檢測(cè)何時(shí)需要“阻塞”,并控制實(shí)現(xiàn)“阻塞”稱為L(zhǎng)oad-use數(shù)據(jù)冒險(xiǎn)!帶轉(zhuǎn)發(fā)的流水線數(shù)據(jù)通路ForwardAForwardBLoad-useDataHazard(硬件阻塞方式)Instr.OrderTime(clockcycles)lwr1,0(r2)subr4,r1,r3IFID/RFEXMEMWBALUImRegDmRegImandr6,r1,r7orr8,r1,r9ALUImRegDmRegALUImRegDmRegImALURegDmReg檢測(cè)點(diǎn)需解決以下問題:(1)判斷什么條件下需要阻塞阻塞點(diǎn)RegID/EX.MemReadand(ID/EX.RegisterRt=IF/ID.RegisterRsorID/EX.RegisterRt=IF/ID.RegisterRt)前面指令為L(zhǎng)oad并且前面指令的目的寄存器等于當(dāng)前剛?cè)〕鲋噶畹脑醇拇嫫?2)修改數(shù)據(jù)通路來實(shí)現(xiàn)阻塞:ID/EX控制信號(hào)清空,PC和IF/ID內(nèi)容不變bubblebubblebubblesubr4,r1,r3帶“轉(zhuǎn)發(fā)”和“阻塞”檢測(cè)的流水線數(shù)據(jù)通路至此,數(shù)據(jù)冒險(xiǎn)的處理全部完成!ID/EX.MemReadand(ID/EX.RegisterRt=IF/ID.RegisterRsorID/EX.RegisterRt=IF/ID.RegisterRt)“寫使能”信號(hào)為0,使PC和IF/ID不變使控制信號(hào)清0,阻塞隨后指令!①②③0ControlHazard的解決方法方法1:硬件上阻塞(stall)分支指令后三條指令的執(zhí)行使后面三條指令清0或其操作信號(hào)清0,以插入三條NOP指令方法2:軟件上插入三條“NOP”指令
(以上兩種方法的效率太低,需結(jié)合分支預(yù)測(cè)進(jìn)行)方法3:分支預(yù)測(cè)(Predict)簡(jiǎn)單(靜態(tài))預(yù)測(cè):總是預(yù)測(cè)條件不滿足(nottaken)或滿足, 即:繼續(xù)執(zhí)行分支指令的后續(xù)指令動(dòng)態(tài)預(yù)測(cè):根據(jù)程序執(zhí)行的歷史情況,進(jìn)行動(dòng)態(tài)預(yù)測(cè)調(diào)整,能達(dá)90%的預(yù)測(cè)準(zhǔn)確率注:采用分支預(yù)測(cè)方式時(shí),流水線控制必須確保錯(cuò)誤預(yù)測(cè)指令的執(zhí)行結(jié)果不能生效,而且要能從正確的分支地址處重新啟動(dòng)流水線工作方法4:延遲分支(Delayedbranch)(通過編譯程序優(yōu)化指令順序!)把分支指令前面與分支指令無關(guān)的指令調(diào)到分支指令后面執(zhí)行,也稱延遲轉(zhuǎn)移另一種控制冒險(xiǎn):異?;蛑袛嗫刂泼半U(xiǎn)的處理簡(jiǎn)單(靜態(tài))分支預(yù)測(cè)方法基本做法總預(yù)測(cè)條件不滿足(nottaken),即:繼續(xù)執(zhí)行分支指令的后續(xù)指令可加啟發(fā)式規(guī)則:在特定情況下總是預(yù)測(cè)滿足(taken),其他情況總是預(yù)測(cè)不滿足如:循環(huán)頂(底)部分支總是預(yù)測(cè)為不滿足(滿足)。能達(dá)65%-85%的預(yù)測(cè)準(zhǔn)確率預(yù)測(cè)失敗時(shí),需把流水線中三條錯(cuò)誤預(yù)測(cè)指令丟棄掉將三條丟棄指令的控制信號(hào)值設(shè)置為0,使其后續(xù)過程中執(zhí)行nop操作(注:涉及到當(dāng)時(shí)在IF、ID和EX三個(gè)階段的指令)性能如果轉(zhuǎn)移概率是50%,則預(yù)測(cè)正確率僅有50%預(yù)測(cè)錯(cuò)誤的代價(jià)預(yù)測(cè)錯(cuò)誤的代價(jià)與何時(shí)能確定是否轉(zhuǎn)移有關(guān)。越早確定代價(jià)越少那最早可以提前到哪個(gè)階段呢?復(fù)習(xí):
ControlHazard現(xiàn)象雖然Beq指令在第四周期取出,但:第七周期才確定“是否轉(zhuǎn)移”第八周期才轉(zhuǎn)移到正確指令執(zhí)行發(fā)生轉(zhuǎn)移時(shí),要在流水線中清除Beq后面的三條指令延遲損失時(shí)間片C:發(fā)生轉(zhuǎn)移時(shí),給流水線帶來的延遲損失Cycle4Cycle5Cycle6Cycle7Cycle8Cycle9Cycle10Cycle11IfetchReg/DecExecMemWrIfetchReg/DecExecMemWr16:R-typeIfetchReg/DecExecMemWrIfetchReg/DecExecMemWr24:R-type12:Beq(targetis1000)20:R-typeClkIfetchReg/DecExecMemWr1000:TargetofBr這里C=3簡(jiǎn)單(靜態(tài))分支預(yù)測(cè)方法縮短分支延遲,減少錯(cuò)誤預(yù)測(cè)代價(jià)可以通過調(diào)整“轉(zhuǎn)移地址計(jì)算”和“分支條件判斷”操作到ID階段來縮短延遲缺點(diǎn):增加處理部件和線路。優(yōu)點(diǎn):C=1(原來C=3)預(yù)測(cè)錯(cuò)誤的檢測(cè)和處理(稱為“沖刷、沖洗”--Flush)增加控制信號(hào),為‘1’時(shí)代表預(yù)測(cè)失敗預(yù)測(cè)失敗時(shí),完成以下兩件事:將轉(zhuǎn)移目標(biāo)地址->PC清除IF(&EX&MEM)段中信息延遲C(1-3)個(gè)時(shí)鐘周期!動(dòng)態(tài)分支預(yù)測(cè)方法簡(jiǎn)單的靜態(tài)分支預(yù)測(cè)方法的預(yù)測(cè)成功率不高,所以應(yīng)考慮動(dòng)態(tài)預(yù)測(cè)動(dòng)態(tài)預(yù)測(cè)基本思想:利用最近轉(zhuǎn)移發(fā)生的情況,來預(yù)測(cè)下一次可能發(fā)生的轉(zhuǎn)移實(shí)際執(zhí)行時(shí):驗(yàn)證并調(diào)整預(yù)測(cè)轉(zhuǎn)移發(fā)生的歷史情況記錄在BHT中現(xiàn)在幾乎所有的處理器都采用動(dòng)態(tài)預(yù)測(cè)(dynamicpredictor)分支歷史記錄表BHT指令預(yù)取器分支指令地址轉(zhuǎn)移目標(biāo)地址預(yù)測(cè)位分支指令地址控制邏輯指令執(zhí)行實(shí)際執(zhí)行情況命中與否加入新項(xiàng)順序取轉(zhuǎn)移取分支歷史記錄表BHT=?查找①選擇③②預(yù)測(cè)④修正查找時(shí)發(fā)現(xiàn)都不相等,則“未命中”未命中說明什么?說明以前沒有執(zhí)行過該分支指令
命中時(shí):
根據(jù)預(yù)測(cè)位,選擇“轉(zhuǎn)移取”還是“順序取”未命中時(shí):
加入新項(xiàng),并填入指令地址和轉(zhuǎn)移目標(biāo)地址、初始化預(yù)測(cè)位動(dòng)態(tài)預(yù)測(cè)基本方法采用一位預(yù)測(cè)位:總是按上次實(shí)際發(fā)生的情況來預(yù)測(cè)下次用1位(0或1)表示預(yù)測(cè)和實(shí)際轉(zhuǎn)移情況可根據(jù)一個(gè)簡(jiǎn)單的預(yù)測(cè)狀態(tài)圖進(jìn)行預(yù)測(cè)和調(diào)整采用二位預(yù)測(cè)位用2位(00,01,10,11)來表示預(yù)測(cè)和實(shí)際轉(zhuǎn)移情況同樣可按預(yù)測(cè)狀態(tài)圖進(jìn)行預(yù)測(cè)和調(diào)整采用比較多的是二位預(yù)測(cè)位,也有采用二位以上預(yù)測(cè)位。如:Pentium4的BTB2采用4位預(yù)測(cè)位一位預(yù)測(cè)狀態(tài)圖指令預(yù)取時(shí),按照預(yù)測(cè)讀取相應(yīng)分支的指令‘1’:選擇“轉(zhuǎn)移取”‘0’:選擇“順序取”指令執(zhí)行時(shí),按實(shí)際執(zhí)行結(jié)果修改預(yù)測(cè)位對(duì)照狀態(tài)轉(zhuǎn)換圖來進(jìn)行修改例如:對(duì)于一個(gè)循環(huán)分支若初始狀態(tài)為0(再次循環(huán)時(shí)為0),則第一次和最后一次都錯(cuò)若初始狀態(tài)為1,則只有最后一次會(huì)錯(cuò)預(yù)測(cè)發(fā)生發(fā)生不發(fā)生預(yù)測(cè)不發(fā)生不發(fā)生發(fā)生10正確錯(cuò)誤錯(cuò)誤正確Loop:add$7,$3,$3;i*2 add$7,$7,$7 ;i*4 add$7,$7,$5 lw$6,0($7) ;$6=A[i] add$1,$1,$6 ;g=g+A[i] add$3,$3,$4 bne$3,$2,Loop
……Loop: g=g+A[i]; i=i+j; if(i!=h)gotoLoop:舉例:雙重循環(huán)的一位動(dòng)態(tài)預(yù)測(cè)intosum(intN){inti,j,sum=0;for(i=0;i<N;i++)for(j=0;j<N;j++)sum=sum+1;returnsum;}……Loop-i:beq$t1,$a0,exit-i#若(i=N)則跳出外循環(huán)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度版權(quán)購(gòu)買合同:某出版公司購(gòu)買某作者的一本圖書的版權(quán)2篇
- 小學(xué)數(shù)學(xué)微課的互動(dòng)性教學(xué)研究
- 教育領(lǐng)域?qū)W生活動(dòng)策劃實(shí)戰(zhàn)技巧
- 教育心理學(xué)在小學(xué)器樂教學(xué)中的運(yùn)用與審美培養(yǎng)
- 技術(shù)趨勢(shì)與小紅書社交電商模式的融合探索
- 教育行業(yè)工業(yè)互聯(lián)網(wǎng)平臺(tái)的構(gòu)建策略
- 幼兒教育的未來發(fā)展與人才培養(yǎng)方向
- 如何將冬季健身活動(dòng)融入企業(yè)文化中
- 教育行業(yè)創(chuàng)業(yè)項(xiàng)目匯報(bào)策略
- Unit 2 we're family Section A pronunciation說課稿 - 2024-2025學(xué)年人教版英語七年級(jí)上冊(cè)
- 2024-2025學(xué)年八年級(jí)上學(xué)期1月期末物理試題(含答案)
- 2025年國(guó)新國(guó)際投資有限公司招聘筆試參考題庫(kù)含答案解析
- 制造車間用洗地機(jī)安全操作規(guī)程
- 2025河南省建筑安全員-A證考試題庫(kù)及答案
- 商場(chǎng)電氣設(shè)備維護(hù)勞務(wù)合同
- 油氣田智能優(yōu)化設(shè)計(jì)-洞察分析
- 陜西2020-2024年中考英語五年真題匯編學(xué)生版-專題09 閱讀七選五
- 磚混結(jié)構(gòu)基礎(chǔ)加固技術(shù)方案
- 助產(chǎn)專業(yè)的職業(yè)生涯規(guī)劃
- 新《國(guó)有企業(yè)管理人員處分條例》知識(shí)競(jìng)賽考試題庫(kù)500題(含答案)
- 骨質(zhì)疏松護(hù)理
評(píng)論
0/150
提交評(píng)論