欧美精品一二区,性欧美一级,国产免费一区成人漫画,草久久久久,欧美性猛交ⅹxxx乱大交免费,欧美精品另类,香蕉视频免费播放

周期與多周期的比較指令流水線

上傳人:san****019 文檔編號:20300895 上傳時間:2021-03-05 格式:PPT 頁數(shù):132 大?。?.52MB
收藏 版權(quán)申訴 舉報 下載
周期與多周期的比較指令流水線_第1頁
第1頁 / 共132頁
周期與多周期的比較指令流水線_第2頁
第2頁 / 共132頁
周期與多周期的比較指令流水線_第3頁
第3頁 / 共132頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《周期與多周期的比較指令流水線》由會員分享,可在線閱讀,更多相關(guān)《周期與多周期的比較指令流水線(132頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第一講 流水線數(shù)據(jù)通路和控制邏輯 第二講 流水線冒險處理 第三講 高級流水線技術(shù) Ch7: Instruction Pipeline 指令流水線 Pipeline.2 2021年 2月 20日星期六 第一講 流水線數(shù)據(jù)通路和控制 日常生活中的流水線處理例子:洗衣服 單周期處理器模型和流水線性能比較 什么樣的指令集適合于流水線方式執(zhí)行 如何設(shè)計流水線數(shù)據(jù)通路 以 MIPS指令子集來說明 詳細(xì)設(shè)計取指令部件 詳細(xì)設(shè)計執(zhí)行部件 分析每條指令在流水線中的執(zhí)行過程,遇到各種問題: - 資源沖突 - 寄存器和存儲器的信號競爭 - 分支指令的延遲 - 指令間數(shù)據(jù)相關(guān) 如何設(shè)計流水線控制邏輯 分析每條指令執(zhí)行

2、過程中的控制信號 給出控制器設(shè)計過程 流水線冒險的概念 主 要 內(nèi) 容 Pipeline.3 2021年 2月 20日星期六 復(fù)習(xí): A Single Cycle Processor 32 ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32-bit Registers Rs Rt Rt Rd RegDst Ex tender M ux Mux 32 16 imm16 ALUSrc ExtOp M ux MemtoReg Clk Data In WrEn 32 Adr Data Memory 32 MemWr ALU Zer

3、o 0 1 0 1 0 1 Instruction Fetch Unit Clk Instruction Jump Branch Imm16 Rd Main Control op ALU Control func ALUop 3 RegDst ALUSrc : Instr Zero 3 Pipeline.4 2021年 2月 20日星期六 復(fù)習(xí): Multiple Cycle Processor MCP: 一個功能部件在一個指令周期中可以被使用多次。 Ideal Memory WrAdr Din RAdr 32 32 32 Dout MemWr 32 ALU 32 32 ALUOp ALU C

4、ontrol Ins truct ion Reg 32 IRWr 32 Reg File Ra Rw busW Rb 5 5 32 busA 32 busB RegWr Rs Rt M ux 0 1 Rt Rd PCWr ALUSelA Mux 0 1 RegDst M ux 0 1 32 PC MemtoReg Extend ExtOp M ux 0 1 32 0 1 2 3 4 16 Imm 32 2 ALUSelB M ux 1 0 Target 32 Zero Zero PCWrCond PCSrc BrWr 32 IorD Pipeline.5 2021年 2月 20日星期六 復(fù)習(xí):

5、 Timing Diagram of a Load Instruction Clk PC Rs, Rt, Rd, Op, Func Clk-to-Q ALUctr Instruction Memory Access Time Old Value New Value RegWr Old Value New Value Delay through Control Logic busA Register File Access Time Old Value New Value busB ALU Delay Old Value New Value Old Value New Value New Val

6、ue Old Value ExtOp Old Value New Value ALUSrc Old Value New Value Address Old Value New Value busW Old Value New Delay through Extender d = e f; 假定 a, b, c, d ,e, f 在內(nèi)存 方案 3:編譯器進(jìn)行指令順序調(diào)整來解決 load-use Fast code: 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 Slow co

7、de: 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)化很重要! Pipeline.60 2021年 2月 20日星期六 編譯器優(yōu)化以避免阻塞的情況調(diào)查 : % lo ad s sta ll in g pi pe li ne 0% 20 % 40 % 60 % 80 % tex spice gcc 25 % 14 % 31 % 65 % 42 % 54 % sc h e d ul ed unschedul e d 由此可見,優(yōu)化調(diào)度后 load阻塞現(xiàn)象大約

8、降低了 1/21/3 Pipeline.61 2021年 2月 20日星期六 數(shù)據(jù)冒險的解決方法 方法 1:硬件阻塞( stall) 方法 2:軟件插入“ NOP指令 方法 3:編譯優(yōu)化:調(diào)整指令順序,能解決所有數(shù)據(jù)冒險嗎? 方法 4:合理實(shí)現(xiàn)寄存器堆的讀 /寫操作,能解決所有數(shù)據(jù)冒險嗎? 前半時鐘周期寫,后半時鐘周期讀 若同一個時鐘內(nèi)前面指令寫入的數(shù)據(jù)正好是后面指令所讀數(shù)據(jù),則不會發(fā)生 數(shù)據(jù)冒險 方法 5:轉(zhuǎn)發(fā)( Forwarding或 Bypassing 旁路)技術(shù),能解決所有數(shù)據(jù)冒險嗎? - 若相關(guān)數(shù)據(jù)是 ALU結(jié)果,則如何? 可通過轉(zhuǎn)發(fā)解決 - 若相關(guān)數(shù)據(jù)是上條指令 DM讀出內(nèi)容,則如

9、何? 不能通過轉(zhuǎn)發(fā)解決,隨后指令需被阻塞一個時鐘 或 加 NOP指令 實(shí)現(xiàn) “轉(zhuǎn)發(fā)” 和 “阻塞” 要修改數(shù)據(jù)通路: ( 1)檢測何時需要“轉(zhuǎn)發(fā)” ,并控制實(shí)現(xiàn)“轉(zhuǎn)發(fā)” ( 2)檢測何時需要“阻塞”,并控制實(shí)現(xiàn)“阻塞” 稱為 Load-use數(shù)據(jù)冒險! Pipeline.62 2021年 2月 20日星期六 RAW(寫后讀)數(shù)據(jù)冒險的“轉(zhuǎn)發(fā)”條件 后面指令需用 ALU輸出結(jié)果 C1: 目寄是后一條指令的源寄 C2: 目寄是后第二條指令的源寄 (例如: R-Type后跟 R- / lw / sw / beq等 ) 后面指令需用從 DM讀出的結(jié)果 C3: 目寄是后第二指令的源寄 (例如: load

10、指令后跟 R-Type / beq等 ) 用流水段寄存器來表示轉(zhuǎn)發(fā)條件( C3以后考慮) C1(a): EX/MEM. RegisterRd=ID/EX. RegisterRs C1(b): EX/MEM. RegisterRd=ID/EX. RegisterRt C2(a): MEM/WB. RegisterRd=ID/EX. RegisterRs C2(b): MEM/WB. RegisterRd=ID/EX. RegisterRt 這里的 RegisterRd是指 目的寄存器 實(shí)際上是 R-type的 Rd 或 I-Type的 rt ori r3, r2, 100 sub r5, r3,

11、 r4 C1 add r3, r2, r1 or r6, r2, r1 sub r5, r3, r4 C2 lw r3, 100(r1) or r6, r2, r1 sub r5, r3, r4 C3 Ex Mem Pipeline.63 2021年 2月 20日星期六 指令的回寫( Write Back)階段 IF/ID: ID/E x Regis ter Ex /M em Reg ister M em /W r Reg ister PC Data Mem WA Di RA Do IUnit A I RFile Di Ra Rb Rw MemWr RegWr=1 ExtOp Exec Uni

12、t busA busB Imm16 ALUOp ALUSrc M ux 1 0 MemtoReg=1/0 1 0 RegDst Rt Rd Imm16 PC+4 PC+4 Rs Rt PC+4 Zero Branch 1 0 Clk Ifetch Reg/Dec Exec Mem Wr Rd還是 Rt取決于是 R-型 指令,還是 I-型指令! 若是 beq指令會怎樣 ? beq r3, r2, 100 sub r5, r3, r2 因?yàn)?beq指令沒有寫結(jié)果,不能進(jìn)行轉(zhuǎn)發(fā)! Pipeline.64 2021年 2月 20日星期六 轉(zhuǎn)發(fā)條件的進(jìn)一步完善 以下兩種情況下,根據(jù)前面的轉(zhuǎn)發(fā)條件轉(zhuǎn)發(fā)會發(fā)

13、生錯誤 指令的結(jié)果不寫入目的寄存器 Rd時 - 例如, Beq指令只對 rs和 rt相減,不寫結(jié)果到目的寄存器 - 即: EX / MEM 或 MEM / WB 流水段寄存器的 RegWrite信號為 0 Rd等于 $0時 - 例如,指令 sll $0, $1, 2 的轉(zhuǎn)發(fā)結(jié)果為 (R$1PC 清除 IF段中取出的指令,即:將 IF/ID中的指令字清 0,轉(zhuǎn)變?yōu)?nop指令 原來要清除三條指令,調(diào)整后只需要清除一條指令,因而只延遲一個時鐘周期 ,每次預(yù)測錯誤減少了兩個周期的代價! Pipeline.77 2021年 2月 20日星期六 帶靜態(tài)分支預(yù)測處理的數(shù)據(jù)通路 IF.Flush=Branc

14、h and Zero 40#指令 beq $1,$3, 7的 ID階段 若 $1或 $3和前面指令數(shù)據(jù)相關(guān),會怎么樣? 上上條指令的 EXE段結(jié)果可轉(zhuǎn)發(fā)回來進(jìn)行判斷 上條指令的 EXE段結(jié)果來不及轉(zhuǎn)發(fā)回來,引起 1次阻塞 ! 將 IF/ID中指令字清 0,變?yōu)?nop指令 控制轉(zhuǎn)移 目標(biāo)地址 -PC 轉(zhuǎn)移目標(biāo)地址 (72)-PC 需重新改“轉(zhuǎn)發(fā)”條件和轉(zhuǎn)發(fā)線路 ! 作業(yè)中有相應(yīng)的練習(xí) sub $3, $5, $1 add $1, $5, $2 beq $1, $3, 7 BACK Pipeline.78 2021年 2月 20日星期六 動態(tài)分支預(yù)測方法 簡單的靜態(tài)分支預(yù)測方法的預(yù)測成功率不高,

15、應(yīng)考慮動態(tài)預(yù)測 動態(tài)預(yù)測基本思想: 利用最近轉(zhuǎn)移發(fā)生的情況,來預(yù)測下一次可能發(fā)生的轉(zhuǎn)移 預(yù)測后,在實(shí)際發(fā)生時驗(yàn)證并調(diào)整預(yù)測 轉(zhuǎn)移發(fā)生的歷史情況記錄在 BHT中(有多個不同的名稱) - 分支歷史記錄表 BHT( Branch History Table) - 分支預(yù)測緩沖 BPB( Branch Prediction Buffer) - 分支目標(biāo)緩沖 BTB( Branch Target Buffer) 每個表項由分支指令地址的低位索引,故在 IF階段就可以取到預(yù)測位 - 低位地址相同的分支指令共享一個表項,所以,可能取的是其他分支 指令的預(yù)測位。會不會有問題? - 由于僅用于預(yù)測,所以不影響執(zhí)

16、行結(jié)果 現(xiàn)在幾乎所有的處理器都采用動態(tài)預(yù)測( dynamic predictor) Pipeline.79 2021年 2月 20日星期六 分支歷史記錄表 BHT(或 BTB、 BPB) 指令預(yù)取器 分支指令地址 轉(zhuǎn)移目標(biāo)地址 預(yù)測位 分支 指令 地址 控制邏輯 指令執(zhí)行 實(shí)際執(zhí)行情況 命中與否 加入新項 順序取 轉(zhuǎn)移取 分支歷史記錄表 BHT =? 查找 選擇 預(yù)測 修正 查找時發(fā)現(xiàn)都不相 等,則“未命中” 未命中說明什么? 說明以前沒有執(zhí) 行過該分支指令 命中時: 根據(jù)預(yù)測位,選擇“轉(zhuǎn)移取”還是“順序取” 未命中時: 加入新項,并填入指令地址和轉(zhuǎn)移目標(biāo)地址、初始化預(yù)測位 Pipeline.

17、80 2021年 2月 20日星期六 動態(tài)預(yù)測基本方法 采用一位預(yù)測位:總是按上次實(shí)際發(fā)生的情況來預(yù)測下次 1表示最近一次發(fā)生過轉(zhuǎn)移( taken), 0表示未發(fā)生( not taken) 預(yù)測時,若為 1,則預(yù)測下次 taken,若為 0,則預(yù)測下次 not taken 實(shí)際執(zhí)行時,若預(yù)測錯,則該位取反,否則,該位不變 可用一個簡單的 預(yù)測狀態(tài)圖 表示 缺點(diǎn):當(dāng)連續(xù)兩次的分支情況發(fā)生改變時,預(yù)測錯誤 - 例如,循環(huán)迭代分支時,第一次和最后一次會發(fā)生預(yù)測錯誤,因?yàn)?循環(huán)的第一次和最后一次都會改變分支情況,而在循環(huán)中間的各次 總是會發(fā)生分支,按上次的實(shí)際情況預(yù)測時,都不會錯。 采用二位預(yù)測位 用

18、 2位組合四種情況來表示預(yù)測和實(shí)際轉(zhuǎn)移情況 按照 預(yù)測狀態(tài)圖 進(jìn)行預(yù)測和調(diào)整 在連續(xù)兩次分支發(fā)生不同時,只會有一次預(yù)測錯誤 采用比較多的是二位預(yù)測位,也有采用二位以上預(yù)測位。 如: Pentium 4 的 BTB2采用 4位預(yù)測位 BACK Pipeline.81 2021年 2月 20日星期六 一位預(yù)測狀態(tài)圖 指令預(yù)取時,按照預(yù)測讀取相應(yīng)分支的指令 預(yù)測發(fā)生時,選擇“轉(zhuǎn)移取” 預(yù)測不發(fā)生時,選擇“順序取” 指令執(zhí)行時,按實(shí)際執(zhí)行結(jié)果修改預(yù)測位 對照狀態(tài)轉(zhuǎn)換圖來進(jìn)行修改 例如:對于一個循環(huán)分支 若初始狀態(tài)為 0(再次循環(huán)時為 0),則第一次和 最后一次都錯 若初始狀態(tài)為 1,則只有最后一次會錯

19、 預(yù)測發(fā)生 發(fā) 生 不發(fā)生 預(yù)測不發(fā)生 不發(fā)生 發(fā)生 1 0 正確 錯誤 錯誤 正確 Loop: add $7, $3, $3 ; i*2 add $7, $7, $7 ; i*4 add $7, $7, $5 lw $6, 0($7) ; $6=Ai add $1, $1, $6 ; g= g+Ai add $3, $3, $4 bne $3, $2, Loop Loop: g = g +Ai; i = i+ j; if (i != h) go to Loop: Assuming variables g, h, i, j $1, $2, $3, $4 and base address of

20、array is in $5 即:只要本次和上次的發(fā)生情況不同,就會出現(xiàn)一次預(yù)測錯誤。 BACK Pipeline.82 2021年 2月 20日星期六 兩位預(yù)測狀態(tài)圖 基本思想:只有兩次預(yù)測錯誤才改變預(yù)測方向 00狀態(tài)時預(yù)測發(fā)生(強(qiáng)轉(zhuǎn)移),實(shí)際不發(fā)生時,轉(zhuǎn)到狀態(tài) 01(弱轉(zhuǎn)移),下次仍預(yù)測 為發(fā)生,如果再次預(yù)測錯誤(實(shí)際不發(fā)生),才使下次預(yù)測調(diào)整為不發(fā)生 11 好處:連續(xù)兩次發(fā)生不同的分支情況時,可能會預(yù)測正確 例如,對于循環(huán)分支的預(yù)測 - 第一次:初始態(tài)為 00(再次循環(huán)時狀態(tài)為 01),預(yù)測發(fā)生,實(shí)際也發(fā)生,正確 - 中間:狀態(tài)為“ 00,預(yù)測發(fā)生,實(shí)際也發(fā)生,正確 - 最后一次:狀態(tài)為

21、“ 00,預(yù)測發(fā)生,但實(shí)際不發(fā)生,錯 BACK 預(yù)測發(fā)生 發(fā)生 預(yù)測不發(fā)生 不發(fā)生 預(yù)測發(fā)生 預(yù)測不發(fā)生 發(fā)生 不發(fā)生 發(fā)生 不發(fā)生 發(fā)生 不發(fā)生 00 01 10 11 正確 錯誤 正確 錯誤 正確 正確 錯誤 錯誤 預(yù)測發(fā)生時,選擇“轉(zhuǎn)移取” 預(yù)測不發(fā)生時,選擇“順序取 ” Loop: add $7, $3, $3 ; i*2 add $7, $7, $7 ; i*4 add $7, $7, $5 lw $6, 0($7) ; $6=Ai add $1, $1, $6 ; g= g+Ai add $3, $3, $4 bne $3, $2, Loop Pipeline.83 2021年 2

22、月 20日星期六 分支延遲時間片的調(diào)度 屬于靜態(tài)調(diào)度技術(shù),由編譯程序重排指令順序來實(shí)現(xiàn) 基本思想: 把分支指令前面的與分支指令無關(guān)的指令調(diào)到分支指令后面執(zhí)行,以填充延 遲時間片 (也稱分支延遲槽 Branch Delay slot) ,不夠時用 nop操作填充 舉例:如何對以下程序段進(jìn)行分支延遲調(diào)度? (假定時間片為 2) 調(diào)度后,降低了分支延遲損失 lw $3, 0($2) add $6, $4, $2 beq $3, $5, 2 lw $1, 0($2) add $3, $3,$2 sw $1, 0($2) lw $1, 0($2) lw $3, 0($2) add $6, $4, $2

23、beq $3, $5, 2 add $3, $3,$2 sw $1, 0($2) 調(diào)度后可能帶來其他問題:產(chǎn)生新的 load-use數(shù)據(jù) 冒險 BACK 若分支條件判斷和目標(biāo)地址計算提前到 ID階段,則分支延遲時間片減少為 1 調(diào)度后 lw $3, 0($2) add $6, $4, $2 beq $3, $5, 2 lw $1, 0($2) nop add $3, $3,$2 sw $1, 0($2) Pipeline.84 2021年 2月 20日星期六 另一種控制冒險:異常和中斷 異常和中斷會改變程序的執(zhí)行流程 某條指令發(fā)現(xiàn)異常時,后面多條指令已被取到流水線中正在執(zhí)行 例如 ALU指令發(fā)

24、現(xiàn)“溢出”時,已經(jīng)到 EX階段結(jié)束了,此時,它后 面已有兩條指令進(jìn)入流水線了 流水線數(shù)據(jù)通路如何處理異常 ? (舉例說明 ) 假設(shè)指令 add r1,r2,r3產(chǎn)生了溢出 (記住: MIPS異常處理程序的首地址為 0 x8000 0180) 處理思路: 清除 add指令以及后面的所有已在流水線中的指令 保存 PC或 PC+4 到 EPC 從 0 x8000 0180處開始取指令 Pipeline.85 2021年 2月 20日星期六 異常的處理 異常(溢出)在第一條指令的 EXE階段被檢出 I n s t r. O r d e r Time (clock cycles) add r1,r2,r

25、3 sub r4,r2,r3 and r6,r1,r4 I F ID/R F E X ME M W B ALU Im Reg Im Reg Dm Reg ALU bubble bubble bubble Im bubble bubble bubble bubble Im Im 異常處理程序首指令 Reg 阻塞點(diǎn) Reg AL U Dm bubble bubble bubble 異常處理: IF.Flush使 IF段指令在 IF/ID寄存器中清為 0,變成 nop指令 ID.Flush與數(shù)據(jù)冒險阻塞檢測信號相或 (or)后,使 ID段指令的控制信號清 0 EX.Flush使 EX段指令的控制信號

26、清 0 將 0 x8000 0180作為 PC的一個輸入,并控制 PC輸入端的多路選擇器 將斷點(diǎn)(可能是 PC、可能是 PC+4)保存到 EPC中 即: 0 x80000180處指令 會發(fā)生將溢出結(jié)果寫到寄 存器 r1中去的情況嗎? 不會! EX.Flush使 EXE段指令的控制 信號清 0(主要保證 RegWr清 0),避 免了在 WB階段寫寄存器 r1的情況。 Pipeline.86 2021年 2月 20日星期六 帶異常處理的流水線數(shù)據(jù)通路 Overflow 80000180H Pipeline.87 2021年 2月 20日星期六 流水線方式下的異常處理的難點(diǎn)問題 流水線中有 5條指令

27、,到底是哪一條發(fā)生異常? 根據(jù)異常發(fā)生的流水段可確定是哪條指令,因?yàn)楦黝惍惓0l(fā)生的流水段不同 “溢出”在 EXE段檢出 “無效指令”在 ID段檢出 “除數(shù)為 0在 ID段段檢出 “無效指令地址”在 IF段檢出 “無效數(shù)據(jù)地址”在 Load/Store指令的 EXE段檢出 外部中斷與特定指令無關(guān),如何確定處理點(diǎn)? 可在 IF段或 WB段中進(jìn)行中斷查詢,需要保證當(dāng)前 WB段的指令能正確完成,并在有 中斷發(fā)生時,確保下個時鐘開始執(zhí)行中斷服務(wù)程序 檢測到異常時,指令已經(jīng)取出多條,當(dāng)前 PC的值已不是斷點(diǎn),怎么辦? 指令地址(哪條?)存放在流水段 R,可把這個地址送到 EPC保存,以實(shí)現(xiàn)精確中斷 (非精

28、確中斷不能提供準(zhǔn)確的斷點(diǎn),而由操作系統(tǒng)來確定哪條指令發(fā)生了異常) 一個時鐘周期內(nèi)可能有多個異常,該先處理哪個? 異常:檢出異常存到專門寄存器, (前面指令優(yōu)先級高?) 中斷:在中斷查詢程序或中斷優(yōu)先級排隊電路中按順序查詢 系統(tǒng)中只有一個 EPC,多個中斷發(fā)生時,一個 EPC不夠放多個斷點(diǎn),怎么辦? 總是把優(yōu)先級最高的送到 EPC中 在異常處理過程中,又發(fā)生了新的異?;蛑袛?,怎么辦? 利用中斷屏蔽和中斷嵌套機(jī)制來處理 后面三個問題在第九章中詳細(xì)介紹! Pipeline.88 2021年 2月 20日星期六 復(fù)習(xí): Cache 的操作過程 如果被訪問的信息 不在 cache中,稱 為失效 (mis

29、s) 如果被 訪問的 信息在 cache 中,稱 為命中 (hit) 缺失處理 硬件如何進(jìn)行缺失處理? Pipeline.89 2021年 2月 20日星期六 Cache缺失處理會引起流水線阻塞(停頓) 在使用 Cache的系統(tǒng)中,數(shù)據(jù)通路中的 IM和 DM分別是 Code Cache和 Data Cache CPU執(zhí)行指令過程中,取指令或取數(shù)據(jù)時,如果發(fā)生缺失,則指令執(zhí)行被阻塞 Cache缺失的檢測 (如何進(jìn)行的?記得嗎?) Cache中有相應(yīng)的檢測線路(地址高位與 Cache標(biāo)志比較) 阻塞處理過程 凍結(jié)所有臨時寄存器和程序員可見寄存器的內(nèi)容(即:使整個計算機(jī)阻塞) 由一個單獨(dú)的控制器處理

30、 Cache缺失, 其過程 (假定是指令缺失 ) 還記得嗎? : - 把發(fā)生缺失的指令地址 ( PC- 4) 所在的主存塊首址送到主存 - 啟動一次“主存塊讀”操作,并等待主存完成一個主存塊 (Cache行 )的讀操作 - 把讀出的一個主存塊寫到 Cache對應(yīng)表項的數(shù)據(jù)區(qū) (若對應(yīng)表項全滿的話,還要考慮淘汰掉一個已在 Cache中的主存塊) - 把地址高位部分(標(biāo)記)寫到 Cache的“ tag字段,并置“有效位” - 重新執(zhí)行指令的第一步:“取指令” 若是讀數(shù)據(jù)缺失,其處理過程和指令缺失類似 - 從主存讀出數(shù)據(jù)后,從“取數(shù)”那一步開始重新執(zhí)行就可以了 若是寫數(shù)據(jù)缺失,則要考慮用哪種 寫策略

31、”解決“一致性”問題 比數(shù)據(jù)相關(guān)或分支指令引起的流水線阻塞簡單:只要保持所有寄存器不變 與中斷引起的阻塞處理不同:不需要程序切換 Pipeline.90 2021年 2月 20日星期六 TLB缺失和缺頁也會引起流水線阻塞 TLB缺失處理 當(dāng) TLB中沒有一項的虛頁號與要找的虛頁號相等時,發(fā)生 TLB miss TLB miss說明可能發(fā)生以下兩種情況之一: - 頁在內(nèi)存中: 只要把主存中的頁表項裝載到 TLB中 - 頁不在內(nèi)存中 (缺頁 ): OS從磁盤調(diào)入一頁,并更新主存頁表和 TLB 缺頁( page fault)處理 當(dāng)主存頁表的頁表項中“ valid位為“ 0時,發(fā)生 page fau

32、lt Page fault是一種“故障”異常,按以下過程處理( MIPS異常處理) - 在 Cause寄存器置相應(yīng)位為“ 1 - 發(fā)生缺頁的指令地址 ( PC- 4) 送 EPC - 0 x8000 0180(異常查詢程序入口 )送 PC 執(zhí)行 OS的異常查詢程序,取出 Cause寄存器中相應(yīng)的位分析,得知發(fā)生了“缺 頁”,轉(zhuǎn)到“缺頁處理程序”執(zhí)行 page fault一定要在發(fā)生缺失的存儲器操作時鐘周期內(nèi)捕獲到,并在下個時鐘轉(zhuǎn)到異常 處理,否則,會發(fā)生錯誤。 - 例: lw $1, 0($1) ,若沒有及時捕獲“異?!倍?$1改變,則再重新執(zhí)行該指令時 ,所讀的內(nèi)存單元地址被改變,發(fā)生嚴(yán)重

33、錯誤! 處理 Cache缺失和缺頁的不同之處在哪里? 哪種要進(jìn)行程序切換? Pipeline.91 2021年 2月 20日星期六 (缺頁)異常處理時要考慮的一些細(xì)節(jié) 缺頁異常結(jié)束后,回到哪里繼續(xù)執(zhí)行? 指令缺頁:重新執(zhí)行發(fā)生缺頁的指令 數(shù)據(jù)缺頁: - 簡單指令(僅一次訪存): 強(qiáng)迫指令結(jié)束,重新執(zhí)行缺頁指令 - 復(fù)雜指令(多次訪存): 可能會發(fā)生多次缺頁,指令被中止在中間某 個階段,缺頁處理后,從中間階段繼續(xù)執(zhí)行;因而,需要能夠保存和 恢復(fù)中間機(jī)器狀態(tài) 異常發(fā)生后,又發(fā)生新的異常,怎么辦? 在發(fā)現(xiàn)異常、轉(zhuǎn)到異常處理程序中,若在保存正在運(yùn)行進(jìn)程的狀態(tài)時又發(fā) 生新的異常,則因?yàn)橐幚硇碌漠惓?,?/p>

34、把原來進(jìn)程的狀態(tài)和保存的返回 斷點(diǎn)破壞掉,所以,應(yīng)該有一種機(jī)制來“禁止”響應(yīng)新的異常處理(?) 通過“中斷 /異常允許”狀態(tài)位(或“中斷 /異常允許”觸發(fā)器)來實(shí)現(xiàn)? “中斷 /異常允許”狀態(tài)位置 1,則“開中斷”(允許異常),清 0則“關(guān) 中斷 ”( 禁止異常)? OS通過管態(tài)指令來設(shè)置該位的狀態(tài)? Pipeline.92 2021年 2月 20日星期六 三種處理器實(shí)現(xiàn)方式的比較 單周期、多周期、流水線三種方式比較 假設(shè)各主要功能單元的操作時間為: 存儲單元: 200ps ALU和加法器: 100ps 寄存器堆(讀 / 寫): 50ps 假設(shè) MUX、控制單元、 PC、擴(kuò)展器和傳輸線路都沒有

35、延遲,指令組成為: 25%取數(shù)、 10%存數(shù)、 52%ALU、 11%分支、 2%跳轉(zhuǎn) 則下面實(shí)現(xiàn)方式中,哪個更快?快多少? ( 1)單周期方式:每條指令在一個固定長度的時鐘周期內(nèi)完成 ( 2)多周期方式:每類指令時鐘數(shù) :取數(shù) -5,存數(shù) -4, ALU-4,分支 -3,跳轉(zhuǎn) -3 ( 3)流水線方式:每條指令分取指令、取數(shù) /譯碼、執(zhí)行、存儲器存取、寫回五階段 (假定沒有結(jié)構(gòu)冒險,數(shù)據(jù)冒險采用轉(zhuǎn)發(fā)處理,分支延遲槽為 1,預(yù)測準(zhǔn)確率 為 75%;不考慮異常、中斷和訪問缺失引起的流水線冒險) Pipeline.93 2021年 2月 20日星期六 三種處理器實(shí)現(xiàn)方式的比較 解: CPU執(zhí)行時間

36、 =指令條數(shù) x CPI x 時鐘周期長度 三種方式的指令條數(shù)都一樣,所以只要比較 CPI和時鐘周期長度即可。 各指令類型要求的時間長度為: Pipeline.94 2021年 2月 20日星期六 三種處理器實(shí)現(xiàn)方式的比較 對于單周期方式: 時鐘周期將由最長指令來決定,應(yīng)該是 load指令,為 600ps 所以, N條指令的執(zhí)行時間為 600N(ps) 對于多周期方式: 時鐘周期將取功能部件最長所需時間,應(yīng)該是存取操作,為 200ps 根據(jù)各類指令的頻度,計算平均時鐘周期數(shù)為: CPU時鐘周期 =5x25%+4x10%+4x52%+3x11%+3x2%=4.12 所以, N條指令的執(zhí)行時間為

37、4.12x200 xN=824N(ps) 對于流水線方式: Load指令:當(dāng)發(fā)生 Load-use依賴時,執(zhí)行時間為 2個時鐘,否則 1個時鐘,故平均 執(zhí)行時間為 1.5個時鐘; Store、 ALU指令: 1個時鐘; Branch指令:預(yù)測成功時, 1個時鐘,預(yù)測錯誤時, 2個時鐘, 所以:平均約為: .75x1+.25x2=1.25個; Jump指令: 2個時鐘(總要等到譯碼階段結(jié)束才能得到轉(zhuǎn)移地址) 平均 CPI為: 1.5x25%+1x10%+1x52%+1.25x11%+2x2%=1.17 所以, N條指令的執(zhí)行時間為 1.17x200 xN=234N(ps) Pipeline.95

38、 2021年 2月 20日星期六 流水線冒險對程序性能的影響 結(jié)構(gòu)冒險對浮點(diǎn)運(yùn)算的性能影響較大,因?yàn)楦↑c(diǎn)運(yùn)算單元不能有效被流水 化,可能造成運(yùn)算單元的資源沖突 控制冒險更多出現(xiàn)在整數(shù)運(yùn)算程序中,因?yàn)榉种е噶顚?yīng)于循環(huán)或選擇結(jié) 構(gòu),大多由整數(shù)運(yùn)算結(jié)果決定分支 數(shù)據(jù)冒險在整數(shù)運(yùn)算程序和浮點(diǎn)運(yùn)算程序中都一樣 浮點(diǎn)程序中的數(shù)據(jù)冒險容易通過編譯器優(yōu)化調(diào)度來解決 - 分支指令少 - 數(shù)據(jù)訪問模式較規(guī)則 整數(shù)程序的數(shù)據(jù)冒險不容易通過編譯優(yōu)化調(diào)度解決 - 分支指令多 - 數(shù)據(jù)訪問模式不規(guī)則 - 過多使用指針 Pipeline.96 2021年 2月 20日星期六 第二講小結(jié) 流水線冒險的幾種類型: 資源沖突、

39、數(shù)據(jù)相關(guān)、控制相關(guān)(改變指令流的執(zhí)行方向) 數(shù)據(jù)冒險的現(xiàn)象和對策 數(shù)據(jù)冒險的種類 - 相關(guān)的數(shù)據(jù)是 ALU結(jié)果,可以通過轉(zhuǎn)發(fā)解決 - 相關(guān)的數(shù)據(jù)是 DM讀出的內(nèi)容,隨后的指令需被阻塞一個時鐘 數(shù)據(jù)冒險和轉(zhuǎn)發(fā) - 轉(zhuǎn)發(fā)檢測 / 轉(zhuǎn)發(fā)控制 數(shù)據(jù)冒險和阻塞 - 阻塞檢測 / 阻塞控制 控制冒險的現(xiàn)象和對策 靜態(tài)分支預(yù)測技術(shù) 縮短分支延遲技術(shù) 動態(tài)分支預(yù)測技術(shù) 異常和中斷是一種特殊的控制冒險 訪存缺失( Cache缺失、 TLB缺失、缺頁)會引起流水線阻塞 Pipeline.97 2021年 2月 20日星期六 第三講 高級流水線技術(shù) 高性能流水線 - 指令級并行 (ILP)技術(shù) 超流水線 多發(fā)射流水

40、線 - 靜態(tài)多發(fā)射( VLIW處理器 +編譯器靜態(tài)調(diào)度) - 動態(tài)多發(fā)射(超標(biāo)量處理器 +動態(tài)流水線調(diào)度) 靜態(tài)多發(fā)射( VLIW-超長指令字) 編譯器靜態(tài)推測完成“指令打包”和“冒險處理” MIPS 2-發(fā)射流水線數(shù)據(jù)通路 循環(huán)展開指令調(diào)度 IA-64的 EPIC技術(shù) 動態(tài)多發(fā)射 動態(tài)多發(fā)射流水線的通用模型 動態(tài)多發(fā)射流水線的執(zhí)行模式 - 按序發(fā)射、按序完成 - 按序發(fā)射、無序完成 - 無序發(fā)射、無序完成 Pentium 4 動態(tài)多發(fā)射流水線 - 超流水、超標(biāo)量、動態(tài)調(diào)度、無序發(fā)射、無序完成 Pipeline.98 2021年 2月 20日星期六 提高性能措施 實(shí)現(xiàn)指令級并行 流水線實(shí)現(xiàn)了指

41、令流內(nèi)部的并行,這種并行稱為指令級并行( ILP) 有兩種指令級并行策略 超流水線( Super- pipelining) - 級數(shù)更多的流水線 - 理想情況下,流水線的加速比與流水段的數(shù)目成正比 (即:理想情況下,流水段越多,時鐘周期越短,指令吞吐率越高) 但是,它是有極限的!可以怎樣突破極限呢? 多發(fā)射流水線( Multiple issue pipelining ) - 多條指令 (如整數(shù)運(yùn)算、浮點(diǎn)運(yùn)算、裝入 /存儲等 ) 同時啟動并獨(dú)立運(yùn)行 - 前提: 有多個執(zhí)行部件。如:定點(diǎn)、浮點(diǎn)、乘 /除、取數(shù) /存數(shù)部件等 - 結(jié)果: 能達(dá)到小于 1的 CPI,定義 CPI的倒數(shù)為 IPC (例如

42、:四路多發(fā)射流水線的理想 IPC為 4) - 需要實(shí)現(xiàn)以下兩個主要任務(wù) 指令打包:分析每個周期發(fā)射多少條?哪些指令可以同時發(fā)射? 冒險處理:由編譯器靜態(tài)調(diào)整指令或在運(yùn)行時由硬件處理 - 實(shí)現(xiàn)上述兩個主要任務(wù)的基礎(chǔ) 推測技術(shù) - 兩種實(shí)現(xiàn)方法 靜態(tài)多發(fā)射 :由編譯器在編譯時靜態(tài)完成指令打包或冒險處理 動態(tài)多發(fā)射 :由硬件在執(zhí)行時動態(tài)完成指令打包或冒險處理 CPI=? CPI=1 Pipeline.99 2021年 2月 20日星期六 實(shí)現(xiàn)多發(fā)射技術(shù)的基礎(chǔ) 推測 推測技術(shù):由編譯器或處理器猜測指令執(zhí)行結(jié)果,并以此來調(diào)整指令執(zhí)行順序, 使指令的執(zhí)行能達(dá)到最大可能的并行 指令打包的決策依賴于“推測”的

43、結(jié)果 - 可根據(jù)指令間的相關(guān)性來進(jìn)行推測 與前面指令不相關(guān)的指令可以提前執(zhí)行 - 可對分支指令進(jìn)行推測 可提前執(zhí)行分支目標(biāo)處的指令 - 預(yù)測僅是“猜測”,有可能推測錯誤,故需有推測錯誤檢測和回滾機(jī)制 - 推測錯誤時,會增加額外開銷 有“軟件推測”和“硬件推測”兩種 - 軟件推測:編譯器通過推測來靜態(tài)重排指令(一定要正確!) - 硬件推測:處理器在運(yùn)行時通過推測來動態(tài)調(diào)度指令 BACK Pipeline.100 2021年 2月 20日星期六 靜態(tài)多發(fā)射處理器 由編譯器在編譯時, 進(jìn)行相關(guān)性分析 和 靜態(tài)分支預(yù)測, 以靜態(tài)完成“指令打包”或“冒險處 理” 指令打包(將同時發(fā)射的多條指令合并到一個

44、長指令中) - 將一個周期內(nèi)發(fā)射的多個指令看成一條多個操作的長指令,稱為一個 發(fā)射包” - “靜態(tài)多發(fā)射”最初被稱為“超長指令字”( VLIW-Very Long Instruction Word),采用這種技術(shù)的處理器被稱為 VLIW處理器 - 在同一個周期內(nèi)發(fā)射的指令類型是受限制的 (例如,只能是一條 ALU指令 /分支指令、一條 Load/Store指令) - IA-64采用這種方法, Intel稱其為 EPIC( Explicitly Parallel Instruction Computer顯式并行指令計算機(jī)) 冒險處理(主要是數(shù)據(jù)冒險和控制冒險) - 做法 1: 完全由編譯器通過代

45、碼調(diào)度和插入 nop指令來消除所有冒險,無需硬件 實(shí)現(xiàn)冒險檢測和流水線阻塞 - 做法 2: 由編譯器通過靜態(tài)分支預(yù)測和代碼調(diào)度來消除同時發(fā)射指令間內(nèi)部依賴 ,由硬件檢測數(shù)據(jù)冒險并進(jìn)行流水線阻塞 即:保證打包指令內(nèi)部不會出現(xiàn)冒險! Pipeline.101 2021年 2月 20日星期六 靜態(tài)多發(fā)射處理器實(shí)例 實(shí)例: MIPS ISA 指令集的靜態(tài)多發(fā)射 -2發(fā)射處理器 要使原來的 MIPS處理器能夠同時處理兩條流水線,數(shù)據(jù)通路需要做哪些改進(jìn)? 1. 同時要能取并譯碼兩條指令,怎么辦? 將兩條指令打包成 64位長指令,前面為 ALU/Branch,后面為 lw/sw 沒有配對指令時,就用 nop

46、指令代替 將 64位長指令中的兩個操作碼同時送到控制器(指令譯碼器)進(jìn)行譯碼 2. 兩條指令同時要讀兩個寄 存器(和 sw配對時)或?qū)懠拇嫫鳎ê?lw配對時) ,怎么辦? 增加一個讀口和一個寫口 3. 兩條指令同時 要使用 ALU進(jìn)行運(yùn)算 ,怎么辦? 增加一個 ALU(包括 2組輸入總線和 1組輸出總線) BACK Pipeline.102 2021年 2月 20日星期六 2發(fā)射流水線數(shù)據(jù)通路(藍(lán)色是增加部分) 同時需為 ALU和 Store操作讀兩 個寄存器,同時需為 ALU運(yùn)算 和 Load結(jié)果寫一個寄存器 需增加額外加法器或 ALU ALU/分支指令進(jìn)行 ALU運(yùn)算時, Load/Sto

47、re指令要計算地址 指令成對放在 64位對齊內(nèi) 存區(qū)域,前面是 ALU/分支 指令。如果不能成對,則 用 nop指令代替缺失指令, 每次取兩條指令,同時對 兩條指令譯碼 控制器和控制信號會要求數(shù)據(jù)通路怎樣改呢? 流水段寄存器要增寬,控制信號分別傳送。 Pipeline.103 2021年 2月 20日星期六 2發(fā)射流水線的特點(diǎn) 優(yōu)點(diǎn):潛在性能將提高大約 2倍 (實(shí)際上達(dá)不到! ) 缺點(diǎn): 為消除結(jié)構(gòu)冒險,需增加額外部件 增加潛在的由數(shù)據(jù)冒險和控制冒險導(dǎo)致的性能損失 - 例 1:對于 Load-use數(shù)據(jù)冒險 單發(fā)射流水線: 只有一條指令延遲 2發(fā)射流水線: 有一個周期( 2條指令)延遲 - 例

48、 2:對于 ALU-Load/Store數(shù)據(jù)冒險 單發(fā)射流水線: 可用“轉(zhuǎn)發(fā)”技術(shù)使 ALU結(jié)果直接轉(zhuǎn)發(fā)到 Load/Store指 令的 EXE階段 2發(fā)射流水線: 兩條指令同時進(jìn)行, ALU的結(jié)果不能直接轉(zhuǎn)發(fā),因而不能 提供給與其配對的 Load/Store指令使用,只能延遲一個周期 為了更有效地利用多發(fā)射處理器的并行性,必須有更強(qiáng)大的編譯器, 能夠充分消除指令間的依賴關(guān)系,使指令序列達(dá)到最大的并行性! Pipeline.104 2021年 2月 20日星期六 例: 2發(fā)射 MIPS指令調(diào)度 以下是一個循環(huán)代碼段 Loop: lw $t0, 0($s1) addu $t0, $t0, $s2

49、 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $zero, Loop (能看出這段程序的功能嗎? ) 為了能在 2發(fā)射 MIPS流水線中有效執(zhí)行,該怎樣重新排列指令 調(diào)度方案如下: 沒有指令配對時,用 nop指令代替 一個循環(huán)內(nèi),五條指令在四個時鐘內(nèi)完成,實(shí)際 CPI為 0.8,即 : IPC=1.25 在循環(huán)中訪問數(shù)組的更好的調(diào)度技術(shù)是“循環(huán)展開” 前三條和后兩條各具有相關(guān)性 可把第四條指令調(diào)到第一條后面 sw指令是否有問題?怎么辦? 循環(huán)內(nèi)進(jìn)行的是數(shù)組訪問! 冒險!同時對同一個寄存器讀,且 讀后要寫,取決于寄存器如何設(shè)計 能否把 addi和 lw配成

50、一對? $s1被減 4,故 sw指令偏移改為 4 Pipeline.105 2021年 2月 20日星期六 用“循環(huán)展開”技術(shù)進(jìn)行指令調(diào)度 基本思想:展開循環(huán)體,生成多個副本,在展開的指令中統(tǒng)籌調(diào)度 上例采用“循環(huán)展開”后的指令序列是什么? 為簡化起見,假定循環(huán)執(zhí)行次數(shù)是 4的倍數(shù) “循環(huán)展開” 4次后循環(huán)內(nèi)每條指令( lw, addu, sw,與數(shù)組訪問相關(guān) )有 4條 再加上 1條 addi和 1條 bne, 共 14條指令 指令最佳調(diào)度序列如下: 14條指令用了 8個時鐘, CPI達(dá)到 8/14=0.57。 需要用到 “重命名寄存器”技術(shù) ,多用了三個臨時寄存器 $t1,$t2,$t3,

51、消除了 名字依賴關(guān)系(非真實(shí)依賴,只是寄存器名相同而已) 代價是什么? 多用了三個臨時寄存器,并增加了代碼大?。ù鎯臻g變大) 為何第一條指令將 $s1減 16?與 $t0關(guān)聯(lián)的指令偏移為何不同? 好處:充分利用并行,并消除部分循環(huán)分支! Pipeline.106 2021年 2月 20日星期六 循環(huán)展開后的偏移量 第一條指令將 $s1減 16,使指令執(zhí)行后, $s1的值變成了循環(huán)結(jié)束時 $s1的值 所以循環(huán)體內(nèi)各數(shù)組元素的訪問指令的偏移量依次為: 16 - 數(shù)組元素 1, 12 - 數(shù)組元素 2 , 8 - 數(shù)組元素 3, 4 - 數(shù)組元素 4 $s1 $s1-16 數(shù)組元素 1 數(shù)組元素

52、2 數(shù)組元素 3 數(shù)組元素 4 為什么第一個周期中的 lw指令的偏移量為 0? 因?yàn)榈谝粋€周期中的 lw指令進(jìn)行地址計算時, addi指令的執(zhí)行結(jié)果還沒有寫到 $s1中,所以, 此時 $s1中還是原來的值 ? 為什么第一條 addu指令不放在第二周期 ? 為了避免 load-use數(shù)據(jù)冒險! 當(dāng)循環(huán)次數(shù)不是 4的倍數(shù)時,這樣做就有問題! 可見:編譯器和機(jī)器結(jié)構(gòu)密切相關(guān)!系統(tǒng)程序員必須非常 了解機(jī)器結(jié)構(gòu)!編譯器的好壞直接影響機(jī)器的性能! Pipeline.107 2021年 2月 20日星期六 實(shí)例: Intel IA-64架構(gòu) IA-64類似于 64位 MIPS架構(gòu),是 Register-Re

53、gister型的 RISC風(fēng)格指令集 但有獨(dú)特性:要求編譯器顯式地給出指令級的并行性, Intel稱其為 EPIC Explicitly Parallel Instruction Computer顯式并行指令計算機(jī) 與 MIPS-64架構(gòu)的區(qū)別 更多寄存器: 128個整數(shù)、 128個浮點(diǎn)數(shù)、 8個專用分支、 64個 1位謂詞 支持 寄存器窗口重疊技術(shù) 同時發(fā)射的指令組織在指令包( bundle)中 引入特殊的謂詞化技術(shù),以支持推測執(zhí)行和消除分支,提高指令級并行度 EPIC的實(shí)現(xiàn)技術(shù) 指令組( Instruction Group):相互間沒有寄存器級數(shù)據(jù)依賴的指令序列 - 指令組長度任意,用“停

54、止標(biāo)記”在指令組之間明顯標(biāo)識 - 指令組內(nèi)部的所有指令可并行執(zhí)行,只要有足夠硬件且無內(nèi)存操作依賴 指令包:同時發(fā)射的指令重新編碼并形成指令包 - 長度為 128,由 5位長的模板字段、三個 41位長的指令組成 - 模板字段對應(yīng)于以下五類功能部件中的三條指令 整數(shù) ALU、非整數(shù) ALU(移位和多媒體)、訪存、浮點(diǎn)、分支 謂詞化 :將指令的執(zhí)行與謂詞相關(guān)聯(lián),而不是與分支指令關(guān)聯(lián) Intel IA-64是 ?-發(fā)射流水線? 3-發(fā)射流水線! BACK Pipeline.108 2021年 2月 20日星期六 RISC的通用寄存器 RISC機(jī)采用大量寄存器 其目的: 減少程序訪問存儲器的次數(shù) RIS

55、C機(jī)寄存器的組織方式有兩種: 重疊寄存器窗口技術(shù) ORW(硬件方法) - 執(zhí)行過程調(diào)用和返回時,利用寄存器組而不是存儲器來完成參數(shù)傳遞 - 通過重疊窗口技術(shù),使得不再需要保存和恢復(fù)寄存器內(nèi)容 - 可大大提高了程序執(zhí)行的速度 優(yōu)化寄存器分配技術(shù)(軟件方法) - 規(guī)定一套寄存器分配算法 - 通過編譯程序的優(yōu)化處理來充分利用寄存器資源 - 編譯器為那些在一定的時間內(nèi)使用最多的變量分配寄存器 BACK Pipeline.109 2021年 2月 20日星期六 重疊寄存器窗口技術(shù)( Overlapped Register Window ) 用于保存 局部數(shù)據(jù) 與調(diào)用自己的 父過程的輸出 寄存器重疊 與被

56、調(diào)用子 過程的輸入 寄存器重疊 A調(diào)用 B時,由于各自使用不同的局部寄存器,所以 不需保存現(xiàn)場 A過程的輸出寄存器可直接把參數(shù)送給 B 從 B返回時, B將返回結(jié)果送到其輸入寄存器, A可 直接得到 B返回的結(jié)果 寄存器分為兩類: 全局寄存器:所有過程共享 窗口寄存器:用于過程調(diào)用 BACK Pipeline.110 2021年 2月 20日星期六 Intel IA-64架構(gòu)的謂詞和推測執(zhí)行技術(shù) 謂詞和謂詞寄存器 分支指令中的條件稱為謂詞 每個謂詞與一個謂詞寄存器相關(guān)聯(lián) 每條指令都可與最后 6位標(biāo)識( 64個一位謂詞,故謂詞寄存器的標(biāo)號用 6 位表示)的謂詞寄存器相關(guān)聯(lián),反映條件是否滿足 可消

57、除循環(huán)內(nèi) if-then-else分支(循環(huán)分支可由循環(huán)展開部分消除) 例: if (p) Statement1 else Statement2 被編譯成: (p) Statement1 (p) Statement2 括號中的條件為 1時,執(zhí)行后面的代碼,否則,轉(zhuǎn)化為 nop指令 條件分支指令被轉(zhuǎn)化為由謂詞寄存器關(guān)聯(lián)的指令,消除了分支 通過謂詞寄存器可實(shí)現(xiàn)指令的推測執(zhí)行 IA-64是采用靜態(tài)多發(fā)射機(jī)制的最復(fù)雜指令集,對編譯器的要求極高 BACK Pipeline.111 2021年 2月 20日星期六 動態(tài)多發(fā)射處理器 由硬件在執(zhí)行時動態(tài)完成指令打包或冒險處理 通常被稱為超標(biāo)量處理器( Sup

58、erscalar) 在一個周期內(nèi)執(zhí)行一條以上指令 與 VLIW處理器的不同點(diǎn): VLIW處理器: 編譯結(jié)果與機(jī)器結(jié)構(gòu)密切相關(guān),結(jié)構(gòu)有差異的機(jī)器上要重新編譯 超標(biāo)量處理器: 編譯器僅進(jìn)行指令順序調(diào)整,但不進(jìn)行指令打包,由硬件根據(jù) 機(jī)器的結(jié)構(gòu)來決定一個周期發(fā)射哪幾條指令。因此,編譯后的代碼能夠被不同 結(jié)構(gòu)的機(jī)器正確執(zhí)行 多數(shù)超標(biāo)量處理器都結(jié)合動態(tài)流水線調(diào)度 ( Dynamic pipeline scheduling)技術(shù) 通過指令相關(guān)性檢測和動態(tài)分支預(yù)測等手段,投機(jī)性地不按指令順序執(zhí)行,當(dāng) 發(fā)生流水線阻塞時,可以到后面找指令來執(zhí)行 舉例說明動態(tài)流水線調(diào)度技術(shù): sub指令可以提前執(zhí)行,不需等 lw

59、和 addu指令執(zhí)行完 如果不將 sub調(diào)到前面,可能要等很長時間( lw指令 的訪存操作耗時較長?。?,從而影響 slti指令的執(zhí)行 左邊指令序列中,哪條指令可以提前執(zhí)行? 最佳的方案是什么? SKIP Pipeline.112 2021年 2月 20日星期六 動態(tài)流水線調(diào)度的通用模型 動態(tài)流水線的一個重要的思想:在等待解決阻塞時,到后面找指令提前執(zhí)行! 動態(tài)流水線的通用模型: 一個指令預(yù)取和譯碼單元: 有序發(fā)射 多個并列執(zhí)行的功能單元: 亂序執(zhí)行 一個提交單元: 有序提交 每個功能單元有各自的 保留站 用于保存操作數(shù)和操作命令 功能單元 一旦完成 ,則將結(jié)果同時送 其他等待該結(jié)果的 保留站和

60、提交單元 提交單元 緩存所有完成的指令結(jié)果,直 到該結(jié)果能安全寫回到寄存器或存儲器 , 稱為 Reorder Buffer 指令的結(jié)果也可 在 Reorder Buffer中被“轉(zhuǎn)發(fā)” Pipeline.113 2021年 2月 20日星期六 功能單元的性能 功能:用來執(zhí)行特定類型的操作 性能:每個功能單元具有基本的操作性能,用兩個周期數(shù)來刻畫 執(zhí)行周期( Latency):完成特定操作所花的周期數(shù) 發(fā)射時間( Issue Time):連續(xù)、獨(dú)立操作之間的最短周期數(shù) 以下是 Pentium III 算術(shù)功能部件的性能 從上述圖中看出,哪些功能部件是流水化的?哪些是非流水化的? 整數(shù)加、整數(shù)乘、

61、浮點(diǎn)加、裝入、存儲這五種部件是流水化的 浮點(diǎn)乘部件是部分流水化 整數(shù)除和浮點(diǎn)除是完全沒有流水化 CPU設(shè)計的一個原則:有限的芯片空間應(yīng)該在各功能部件之間進(jìn)行平衡!盡量讓大多數(shù)資源用 于最關(guān)鍵的操作 (對大量基準(zhǔn)程序進(jìn)行評估) 從上述圖中能否看出:哪些是最重要的操作?哪些是不常用的? 整數(shù)加法和乘法、浮點(diǎn)數(shù)加法和乘法是重要的操作 除法相對來說不太常用,而且本身難以實(shí)現(xiàn)流水線 Pipeline.114 2021年 2月 20日星期六 動態(tài)流水線的幾種執(zhí)行模式 根據(jù)動態(tài)流水線指令發(fā)射和完成順序,可分為三種執(zhí)行模式: 按序發(fā)射按序完成( Pentium) 按序發(fā)射無序完成( Pentium II和 P

62、entium III) 無序發(fā)射無序完成( Pentium 4) 保留站:存放操作數(shù)和操作命令 最保守的方案是順序完成,好處: (1) 簡化異常檢測和異常處理 (2) 能在被推測指令完成前得知推測 結(jié)果的正確性 指令發(fā)射時,其操作數(shù)可能在寄存器堆或 ROB中,可 立即復(fù)制到保留站中,故源操作數(shù)寄存器可被覆蓋 若操作數(shù)不在寄存器堆或 ROB中,則一定在某個時刻 被一個功能單元計算出來,硬件將定位該功能單元,并 將結(jié)果從旁路寄存器復(fù)制到保留站 ReOrder Buffer 重排序緩沖 : 用于保存已完成的指令結(jié)果, 等待 在可能時 寫回寄存器堆 寫回條件: 與前面的所 有指令結(jié)果不相關(guān)、并 預(yù)測正

63、確 SKIP Pipeline.115 2021年 2月 20日星期六 按序發(fā)射按序完成 舉例: 2發(fā)射超標(biāo)量,分為取指( F)、譯碼( D)、執(zhí)行( E)、寫回( W)。 F 、 D、 W段在一個時鐘周期內(nèi)完成(可同時有兩條指令在這三個階段); E段有三 個執(zhí)行部件: Load/Store部件完成數(shù)據(jù) Cache訪問需要 1個時鐘,整數(shù) ALU完成 簡單 ALU操作需 2個時鐘,整數(shù)乘法器完成乘法運(yùn)算需要 3個時鐘。執(zhí)行部件采用 流水化方式。 按序發(fā)射按序完成的過程如下: i1 lw $1, A i2 add $2, $2, $1 i3 add $3, $3, $4 i4 mul $4, $

64、5, $4 i5 lw $6, B i6 mul $6, $6, $7 為了按序完成,雖然 i5在時鐘 6已經(jīng)完成, 但一直推遲到 i4寫回后的第 9時鐘才寫回 譯碼段 執(zhí)行段 寫回段 i1 i2 2 時鐘 3 4 5 6 7 8 9 10 i2 ALU L/S Mul i1 i2 i2 i3 i3 i4 i4 i4 i3 i4 i5 i6 i5 i6 i6 i6 i5 i5 i1 i2 i3 i4 i5 i6 i6 i1、 i2間 RAW; i5、 i6間 RAW和 WAW,需 阻塞一個時鐘周期,并一定要按序完成! 指令被阻塞在“譯碼器” 中 如果還有一條乘法指令,則最多可有三條乘法指令同時

65、在執(zhí)行 BACK Pipeline.116 2021年 2月 20日星期六 按序發(fā)射無序完成 舉例: 2發(fā)射超標(biāo)量,分為取指( F)、譯碼( D)、執(zhí)行( E)、寫回( W)。 F 、 D、 W段在一個時鐘周期內(nèi)完成(可同時有兩條指令在這三個階段); E段有三 個執(zhí)行部件: Load/Store部件完成數(shù)據(jù) Cache訪問需要 1個時鐘,整數(shù) ALU完成 簡單 ALU操作只需 2個時鐘,整數(shù)乘法器完成乘法運(yùn)算需要 3個時鐘。執(zhí)行部件采 用流水化方式。 按序發(fā)射無序完成的過程如下: i1 lw $1, A i2 add $2, $2, $1 i3 add $3, $3, $4 i4 mul $4

66、, $5, $4 i5 lw $6, B i6 mul $6, $6, $7 譯碼段 執(zhí)行段 寫回段 i1 i2 2 時鐘 3 4 5 6 7 8 9 10 i2 ALU L/S Mul i1 i2 i2 i3 i3 i4 i4 i4 i3 i4 i5 i6 i5 i6 i6 i6 i5 i5 i1 i2 i3 i4 i5 i6 i6 無序完成時, 因?yàn)?i5在時鐘 6已經(jīng)完成,和 i3、 i4沒有相關(guān)性,可以不需要等 i3、 i4寫 回后再寫回,所以可先于 i4完成。 BACK Pipeline.117 2021年 2月 20日星期六 無序發(fā)射無序完成 舉例: 2發(fā)射超標(biāo)量,分為取指( F)、譯碼( D)、執(zhí)行( E)、寫回( W)。 F 、 D、 W段在一個時鐘周期內(nèi)完成(可同時有兩條指令在這三個階段); E段有三 個執(zhí)行部件: Load/Store部件完成數(shù)據(jù) Cache訪問需要 1個時鐘,整數(shù) ALU完成 簡單 ALU操作只需 2個時鐘,整數(shù)乘法器完成乘法運(yùn)算需要 3個時鐘。執(zhí)行部件采 用流水化方式。 無序發(fā)射無序完成的過程如下: i1 lw $1, A i2 add $2,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔

相關(guān)搜索

關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!