目錄
系列文章目錄
一、引言
1.計算機性能因素
2.基本的MIPS實現(xiàn)(指令部分)
3.CPU 抽象視圖
4.MIPS子集的基本實現(xiàn)
二、邏輯設(shè)計基礎(chǔ)
1.組合單元
2.時鐘方法
三、數(shù)據(jù)通路的建立
1.R型指令
2.存取指令
3.分支指令?
4.簡單的數(shù)據(jù)通路(R型/存?。?/p>
5.完整的數(shù)據(jù)通路(單周期)
四、簡單的實現(xiàn)機制
1.ALU控制信號
2.主控單元設(shè)計
五、流水線概述
0.MIPS指令流水
1.流水線的性能
2.流水線的加速比及分析
3.流水線冒險
3.1 結(jié)構(gòu)冒險
3.2 數(shù)據(jù)冒險
(1)前推
(2)前推+停頓
3.3 數(shù)據(jù)冒險樣例
3.4 控制冒險
(1)阻塞
(2)預(yù)測
Ⅰ、恒預(yù)測不跳轉(zhuǎn)?
Ⅱ、靜態(tài)分支預(yù)測
Ⅲ、動態(tài)硬件預(yù)測
3.5 流水線冒險樣例
六、MIPS流水化的數(shù)據(jù)通路?
1.流水線寄存器
2.流水線工作方式
2.1?lw/sw指令的流水操作——IF
2.2?lw/sw指令的流水操作——ID
2.3?lw指令的流水操作——EX
2.4?lw指令的流水操作——MEM?
2.5?lw指令的流水操作—— WB
2.6?sw指令的流水操作——EX
2.7?sw指令的流水操作—— MEM
2.8?sw指令的流水操作—— WB
3.流水線圖形化?
3.1 多時鐘周期流水線圖
3.2 傳統(tǒng)圖示
3.3 單時鐘周期流水線圖
3.4 流水線性能與時鐘周期回顧
3.5?流水線例題?
4.流水線控制信號?
4.1 控制信號說明
4.2 控制信號與數(shù)據(jù)通路?
七、數(shù)據(jù)冒險:旁路與阻塞
1.判斷范式與前推通路
2.范式修正
3.前推流水線
4.取數(shù)-使用:冒險、阻塞與檢測
5.冒險(阻塞)流水線通路
八、控制冒險/分支冒險
1.靜態(tài)預(yù)測:預(yù)測其不跳轉(zhuǎn)
2.縮短分支遲延
3.動態(tài)分支預(yù)測
九、阻塞與性能
1.重排指令-延遲槽技術(shù)
2.分支指令的預(yù)測
3.流水線全圖
十、異常與中斷
1.MIPS體系結(jié)構(gòu)中的異常處理?
2.帶有異常處理的流水線
3.其他異常
十一、指令級并行(ILP)?
1.多發(fā)射
2.推測
3.靜態(tài)多發(fā)射
4.動態(tài)多發(fā)射
5.多發(fā)射的有效性
6.能耗效率
十二、謬誤和總結(jié)
1.謬誤
2.總結(jié)
總結(jié)
系列文章目錄
本系列博客重點在深圳大學(xué)計算機系統(tǒng)(3)課程的核心內(nèi)容梳理,參考書目《計算機組成與設(shè)計》(有問題歡迎在評論區(qū)討論指出,或直接私信聯(lián)系我)。
第一章?計算機組成與設(shè)計01——計算機概要與技術(shù)_@李憶如的博客-CSDN博客
第二章?計算機組成與設(shè)計02——指令:計算機的語言_@李憶如的博客-CSDN博客
第三章?計算機組成與設(shè)計03——計算機的算術(shù)運算_@李憶如的博客-CSDN博客
第四章?計算機組成與設(shè)計04——處理器?
梗概
本篇博客主要介紹深入計算機組成與設(shè)計第四章處理器的相關(guān)知識。
一、引言
1.計算機性能因素
計算機性能因素與其決定因素如下:
?
2.基本的MIPS實現(xiàn)(指令部分)
一個基本的MIPS的實現(xiàn)方式如下:
?
指令的執(zhí)行步驟如下:?
?
?
3.CPU 抽象視圖
?
算術(shù)邏輯指令、存儲訪問指令、分支指令的CPU抽象視圖分別如下:
?
?
?Tips:某個操作的數(shù)有多個來源時,需要加入復(fù)選器調(diào)整視圖(如bne、lw、sw)
4.MIPS子集的基本實現(xiàn)
加入后一個MIPS子集的基本實現(xiàn)如下,包含控制信號與復(fù)選器。
?
二、邏輯設(shè)計基礎(chǔ)
1.組合單元
2.時鐘方法
?
三、數(shù)據(jù)通路的建立
數(shù)據(jù)通路:CPU中處理數(shù)據(jù)和地址的單元部件 Registers ALUs Mux’s Memories …
數(shù)據(jù)通路部件(datapath element):一個用來操作或保存處理器中數(shù)據(jù)的單元
程序計數(shù)器PC:存放下一條指令地址的寄存器
?
1.R型指令
?
2.存取指令
?
Tips:符號擴展不能漏(為增加數(shù)據(jù)項長度,將原數(shù)據(jù)項最高位復(fù)制到新數(shù)據(jù)項多出來的高位)。
3.分支指令?
?
?
Tips:beq需要左移兩位,MIPS中連續(xù)字的地址相差4,且字的起始地址為4的倍數(shù)(一個地址為8位,即一個字節(jié),一個字有4個字節(jié))。所以,需要將offset_value左移2位,使其表示為字的地址,確保其能正確跳轉(zhuǎn)到正確地址。
4.簡單的數(shù)據(jù)通路(R型/存取)
初步的數(shù)據(jù)通路在1個時鐘周期內(nèi)完成指令
每個數(shù)據(jù)通路部件在一個時鐘周期內(nèi)只能處理一條指令 因此需要獨立的數(shù)據(jù)和指令存儲器
當不同指令的數(shù)據(jù)來源不同時,需要使用多選器
?
5.完整的數(shù)據(jù)通路(單周期)
?
Tips:數(shù)據(jù)通路必須有獨立的指令存儲器和數(shù)據(jù)存儲器,因為處理器在一個周期內(nèi)只能操作每個部件一次,而在一個周期內(nèi)不可能對一個單端口存儲器進行兩次存取。?
四、簡單的實現(xiàn)機制
核心:以MIPS核心指令子集為目標,為數(shù)據(jù)通路設(shè)計控制單元
核心指令: lw, sw, beq, add, sub, and, or, slt, j
1.ALU控制信號
?
設(shè)計單元表示真值表如下:
?
2.主控單元設(shè)計
?
?
Tips:增加了指令判斷的復(fù)選器與ALU控制單元,并標識出了所有控制信號。
控制信號及其含義如下:
?
加入控制單元后的簡單數(shù)據(jù)通路如下:
?
各類指令的控制信號如下:
?
五、流水線概述
單周期處理器缺點:無法應(yīng)對不同指令路徑(處理時間)長短的差異,最慢的路徑?jīng)Q定時鐘周期,不符合“加快經(jīng)常性實事件”設(shè)計原則。
?
0.MIPS指令流水
IF: 從內(nèi)存中取指令
ID: 指令解碼& 讀寄存器
EX: 執(zhí)行運算或計算地址
MEM: 訪問內(nèi)存操作
WB: 將結(jié)果寫回寄存器?
?
Tips:流水線每一步的流水線周期(Tc)一致,取決于最慢處理步驟。?
1.流水線的性能
對上述例題(lw)進行分析,性能對比如下:
?
2.流水線的加速比及分析
?
流水線vs單周期如下:
?
流水線vs多周期指令如下:
?
流水線分析:n個段(以5為例)構(gòu)成了一個指令流水線,一條指令經(jīng)過每個段
CPI(平均執(zhí)行周期數(shù))減少到1,平均每個時鐘周期發(fā)射或完成一條指令
在任意時鐘周期,在每個流水段正執(zhí)行一條指令的一部分
Tips:注意指令是單周期還是多周期,單周期無流水線CPI也是1
單周期 vs 多周期 vs 流水線詳見六中3.5?流水線例題?
3.流水線冒險
冒險現(xiàn)象:下一周期不能按時執(zhí)行下一條指令
①結(jié)構(gòu)冒險(結(jié)構(gòu)相關(guān)):所需的部件忙,暫不可用
②數(shù)據(jù)冒險(數(shù)據(jù)相關(guān)):需要前面某條指令的計算結(jié)果,用于本次計算輸入
③控制冒險(控制相關(guān)):需要根據(jù)前面某條指令的結(jié)果來確定分支的選擇執(zhí)行?
3.1 結(jié)構(gòu)冒險
定義:缺乏硬件支持導(dǎo)致指令不能在預(yù)定的時鐘周期內(nèi)執(zhí)行的情況
以data access(訪存)與instruction fecth(取指)的冒險為例:
?
Tips:因此,流水實現(xiàn)的MIPS中指令和數(shù)據(jù)內(nèi)存必須是分離獨立的,兩個獨立的L1 cache?
3.2 數(shù)據(jù)冒險
定義:一條指令依賴于前面某條執(zhí)行的計算結(jié)果,缺少指令執(zhí)行所需數(shù)據(jù)而導(dǎo)致指令無法在預(yù)期的時鐘周期內(nèi)執(zhí)行。
?
解決方法如下:
(1)前推
?
(2)前推+阻塞(停頓)
?
3.3 數(shù)據(jù)冒險樣例
?Tips:時鐘周期即橫軸數(shù),本題為13個。
調(diào)整后指令如下(減少時鐘周期):
?
3.4 控制冒險
定義:取到的指令不是所需要的(地址變化不是預(yù)期)而導(dǎo)致指令不能在預(yù)定的時鐘周期內(nèi)執(zhí)行。
出現(xiàn)原因:決策依賴于一條指令的結(jié)果,而其他指令正在執(zhí)行中(例:下一條指令I(lǐng)F階段時,分支指令仍在 ID階段)。
解決控制冒險的方法如下:
(1)阻塞
在分支指令后立即阻塞流水線,避免地址未被計算,樣例如下:
?
分析:在較長流水線中,往往不能在第二級完成分支決策,阻塞(停頓)會帶來更大的速度下降。
(2)預(yù)測
根據(jù)“通過預(yù)測提高性能”的設(shè)計原則對分支地址進行預(yù)測預(yù)測,預(yù)測錯誤才需要阻塞。
Ⅰ、恒預(yù)測不跳轉(zhuǎn)?
一種簡單的預(yù)測方法就是總預(yù)測分支未發(fā)生(不跳轉(zhuǎn)),樣例如圖:
Ⅱ、靜態(tài)分支預(yù)測
一種更成熟的分支預(yù)測是基于典型的行為,預(yù)測一些分支發(fā)生而預(yù)測另一些分支不發(fā)生,樣例如下:
?Tips:這種分支預(yù)測依賴始終不變的行為,沒有考慮特定分支指令的特點。
Ⅲ、動態(tài)硬件預(yù)測
定義:預(yù)測取決于每一步分支的行為,并且在整個程序的生命周期內(nèi)可能改變分支的預(yù)測結(jié)果。
實現(xiàn):保存每次分支的歷史記錄,利用歷史記錄來預(yù)測。
Tips:較長的流水線會惡化預(yù)測的性能(各種方法),并提高錯誤預(yù)測的概率。
3.5 流水線冒險樣例
Tips:算數(shù)指令是要在WB后才寫入寄存器,故2需要旁路?
六、MIPS流水化的數(shù)據(jù)通路?
在單時鐘周期中,流水線最多五條指令,因此要把之前的數(shù)據(jù)通路分為五部分,如圖:
圖中從左到右的指令流中有兩個例外:
(1)寫回階段是寫回數(shù)據(jù)通路中間的寄存器(可能導(dǎo)致數(shù)據(jù)冒險)
(2)選擇PC的下一個值的時候,在自增PC與MEM的分支地址間進行選擇(可能導(dǎo)致控制冒險)?
1.流水線寄存器
通過增加保存中間數(shù)據(jù)(記錄前一時鐘周期產(chǎn)生的結(jié)果)的寄存器,使得指令過程中可以共享部分數(shù)據(jù)通路,故需要流水線寄存器,確保一條數(shù)據(jù)通路實現(xiàn)流水線,加入流水線寄存器如圖所示:
Tips:流水線寄存器寬度要足夠大(64、128、97、64)
補充:每條指令都會更新PC,PC可以看作是一個流水線寄存器:給IF級提供數(shù)據(jù),發(fā)生異常時必須保存它的內(nèi)容。
2.流水線工作方式
以lw與sw為例介紹流水線的工作方式與數(shù)據(jù)通路實現(xiàn),紅圈為數(shù)據(jù)傳輸與存儲,供之后的指令使用,如圖所示:
2.1?lw/sw指令的流水操作——IF
2.2?lw/sw指令的流水操作——ID
Tips:由于處理器并不知道當前是哪一條指令在被譯碼,因此它把符號擴展后的常量及兩個寄存器的值都讀入ID/EX寄存器中,簡化控制。?
2.3?lw指令的流水操作——EX
2.4?lw指令的流水操作——MEM?
2.5?lw指令的流水操作—— WB
其中,寫回寄存器的值是IF/ID流水線寄存器(之前l(fā)w的目標寄存器沒保存)提供的,但現(xiàn)在的指令是lw后的指令,故寫回寄存器的值有問題,需要修正,如圖所示:
2.6?sw指令的流水操作——EX
Tips:只有在Sw中才將第二個寄存器的數(shù)據(jù)寫入EX/MEM寄存器。
2.7?sw指令的流水操作—— MEM
2.8?sw指令的流水操作—— WB
3.流水線圖形化?
3.1 多時鐘周期流水線圖
多時鐘周期流水線圖簡單但不包括所有細節(jié),構(gòu)成了資源(部件)的使用情況圖。樣例如圖所示:
Tips:上圖描述的是每個步驟使用的物理資源
3.2 傳統(tǒng)圖示
3.3 單時鐘周期流水線圖
單時鐘周期流水線圖表示的是一個時鐘周期內(nèi)整個數(shù)據(jù)通路的狀態(tài),樣例如圖:
3.4 流水線性能與時鐘周期回顧
3.5?流水線例題?
Ⅰ、幾個學(xué)生在討論五級流水線的效率問題。有一個學(xué)生指出并非所有流水級中的指令都是活動的。在忽略冒險的情況下,他們做出了以下幾個斷言,其中哪一個是正確的?
1)允許跳轉(zhuǎn)、分支、ALU指令使用比5級(裝載指令需要的級數(shù))更少的級數(shù)將在所有情況下增加流水線的性能。
錯誤,由2)解釋。
2)允許一些指令使用更少的級數(shù)并不能提高性能,因為吞吐率(單位時間流出的指令數(shù))是由時鐘周期決定的。每條指令所需的流水線級數(shù)僅影響它的延遲時間,而不影響吞吐率。
正確
3)不可能減少ALU指令所需的時鐘周期數(shù),因為他們需要寫回結(jié)果。不過分支和跳轉(zhuǎn)指令是可以減少時鐘周期數(shù)的,因此存在改善性能的機會。
錯誤
4)相對于嘗試減少指令所需的時鐘周期數(shù),我們可以延長流水線的級數(shù),雖然每條指令花費更多的時鐘周期數(shù),但時鐘周期的長度變短了,這樣才能提高性能(吞吐率 = 單位時間 / 時鐘周期的長度)。
正確?
Ⅱ、流水線對時鐘周期的影響
1.流水線處理器與非流水線處理器的時鐘周期分別是多少?
? ? 流水線處理器時鐘周期取決于最慢的流水線級:350ps
? ? 非流水線時鐘周期為一條指令(單周期):1250ps
2.lw指令在流水線處理器和非流水線處理器中的總延遲分別是多少?
? ? 流水線總延遲:max (250, 350, 150, 300, 200) * 5 = 350ps * 5 = 1750ps
? ? 非流水線:250 + 350 + 150 + 300 + 200 = 1250ps
3.如果可以將原流水線數(shù)據(jù)通路的一級劃分為兩級,每級的延遲是原級的一半,那么你會選哪一級進行劃分?劃分后的時鐘周期是多少?
? ? 選擇最長的一級劃分,即ID
? ? 劃分后時鐘周期為:300ps?
4.假設(shè)沒有阻塞和冒險,數(shù)據(jù)存儲器的利用率是多少(占總周期數(shù)的百分比)?
? ? lw與sw使用數(shù)據(jù)存儲器,故利用率為20+15=35%
5.假設(shè)沒有阻塞和冒險,寄存器堆的寫寄存器端口的利用率是多少?
? ? alu與lw使用寫寄存器端口,故利用率為45+20=65%
6.假設(shè)一種多周期的處理器設(shè)計,其中每條指令需要多個時鐘周期完成。但上一條指令完成前不取下一條指令。在這種設(shè)計中,指令僅經(jīng)過其所需的階段(例如,存儲指令僅需4個時鐘周期,因為其不需要WB階段)。比較單周期設(shè)計、多周期設(shè)計和流水線設(shè)計三者的時鐘周期和總執(zhí)行時間。
Tips:beq因為branch在mem中,所以有控制信號,無WB,所以在多周期中為4。
4.流水線控制信號?
流水線控制信號(簡化)如圖:
Tips:輸入ALU control的六位字段為指令立即數(shù)的低六位(符號擴展時無變化)。
EX過程中控制信號有:RegDst、ALUOp、ALUSrc,根據(jù)這些信息選擇結(jié)果寄存器(R、I型指令)、ALU操作、并為ALU讀取data2或符號擴展后的立即數(shù)。?
4.1 控制信號說明
ALUOp信號如下:
其他信號如下:
Tips:控制信號與非流水方式相同的意義,各種指令如下:
4.2 控制信號與數(shù)據(jù)通路?
流水線控制信號根據(jù)指令產(chǎn)生:與單周期實現(xiàn)一樣,如圖:
Tips:ALUOp分為ALUOp1與ALUOp0,為兩個控制信號。?
流水線數(shù)據(jù)通路如圖:
七、數(shù)據(jù)冒險:旁路與阻塞
1.判斷范式與前推通路
部分數(shù)據(jù)冒險可以通過前推技術(shù)來解決 問題:如何發(fā)現(xiàn)何時需要將數(shù)據(jù)前推?
檢測是否需要啟用前推的范式如下:
冒險樣例如下:?
流水線中前推通路如下:
2.范式修正
但是,直接采用總是旁路的方法解決冒險是不對的,某些指令可能不寫回寄存器,會產(chǎn)生不必要的旁路。?
故在此添加兩個條件:
1.僅當寫寄存器才需要前推!(寫內(nèi)存則不必)
即:EX/MEM.RegWrite, MEM/WB.RegWrite
2.$0恒為0,如果目標寄存器是$0 不需前推 避免把$0按非0旁路處理
即:EX/MEM.RegisterRd ≠ 0, MEM/WB.RegisterRd ≠ 0
故此時范式如下:
但此時范式仍存在雙重數(shù)據(jù)冒險的問題,樣例與修正如下:
故修正后的MEM冒險范式如下:
核心:只有EX冒險不成立時,才對MEM冒險前推?
Tips:and not中的兩個即為EX冒險判斷范式?
3.前推流水線
故帶有前推功能流水線如圖所示:
若考慮帶符號立即數(shù)作為ALU的輸入,需增加一個2:1的MUX,如圖:?
4.取數(shù)-使用:冒險、阻塞與檢測
已知某些數(shù)據(jù)冒險不能單用旁路解決(lw在MEM后才算出結(jié)果),需要阻塞,樣例如圖(除了一個旁路單元,還需要一個在ID的冒險檢測單元,用于插入阻塞):
被阻塞指令
1.ID/EX寄存器控制信號清0,以下流水級執(zhí)行空操作nop
EX MEM WB
2.PC和IF/ID寄存器值不變
3.重新譯碼?
被阻塞指令的下一條指令 重新取指?
加入阻塞的樣例如圖:
5.冒險(阻塞)流水線通路
八、控制冒險/分支冒險
對于控制冒險,本部分在流水線上實現(xiàn)前文提到的幾種方法。?
1.靜態(tài)預(yù)測:預(yù)測其不跳轉(zhuǎn)
2.縮短分支遲延
一種有效提高分支效率的方法是縮短分支的執(zhí)行時間。
增加硬件,把分支決策從EX提前到ID級
? 計算分支目標地址: 從EX級移到ID級
? 判斷分支條件: 比較兩個寄存器的值?
? 修改旁路電路提供寄存器數(shù)值、修改冒險電路進行必要的阻塞
? ? 1)是否需要將比較數(shù)寄存器從前面指令前推過來: ALU輸出 內(nèi)存數(shù)據(jù) 如果分支發(fā)生則更新PC
? ? 2)如果分支比較的操作數(shù)還沒準備好,則需要阻塞?
分支指令中同樣會出現(xiàn)數(shù)據(jù)冒險,根據(jù)類型需要旁路/阻塞,樣例如下:?
分支發(fā)生時下一指令會產(chǎn)生氣泡,然后跳轉(zhuǎn)到對于PC指令去執(zhí)行。?
3.動態(tài)分支預(yù)測
在預(yù)測器的選擇上:
1-Bit預(yù)測器有不足:一個內(nèi)層循環(huán)的分支誤判有兩次
2-Bit預(yù)測器:連續(xù)兩次誤判才改變預(yù)測方向?
對于分支地址的計算:
及時完成了預(yù)測, 仍然需要計算目標地址
? ? 需要1個時鐘周期用于計算分支目標地址
分支目標緩存(BTB, Branch target buffer)
? ? 緩存了近期使用的目標地址 根據(jù)分支指令的PC來標識(indexing)
? ? 如果PC匹配并且預(yù)測為分支發(fā)生,則直接從BTB中去取目標地址而無需計算?
九、阻塞與性能
阻塞降低性能
? ? 指令序列按流水方式正確執(zhí)行必需的步驟
減少阻塞
? ? 編譯器重排(調(diào)度)指令序列
? ? ? ? 避免冒險及其引起的阻塞
? ? ? ? 編譯器需要知道流水結(jié)構(gòu)?
1.重排指令-延遲槽技術(shù)
分支發(fā)生在分支指令之后的第二個時鐘周期
? ? 中間間隔一個“分支延遲槽”可以執(zhí)行無關(guān)指令(用不影響分支的一條指令填充到時間片中)?
2.分支指令的預(yù)測
3.流水線全圖
完整流水線數(shù)據(jù)通路如圖:
十、異常與中斷
定義如下:
1.MIPS體系結(jié)構(gòu)中的異常處理?
目前的實現(xiàn)中可能產(chǎn)生的異常是未定義指令的執(zhí)行和算數(shù)溢出,異常處理操作如下:
還有另一種機制是向量中斷,?處理代碼的入口根據(jù)原因不同而不同,入口處的代碼安排: 直接處理中斷事件, 或跳轉(zhuǎn)到具體處理代碼。
而異常的處理操作如下:
樣例如下:
2.帶有異常處理的流水線
帶有異常處理的流水線如下:
異常的屬性如下:
流水線異常的樣例如下:
在流水線中,add在EX引發(fā)異常,撤銷指令并轉(zhuǎn)到處理程序入口,下一時鐘周期將讀入處理程序入口處的指令(80000180->80000184)
3.其他異常
Ⅰ、同時多異常(一個時鐘周期內(nèi)多個異常)
簡單處理方法: 從最早的指令開始處理 將后續(xù)指令全部撤銷 稱為“精確”異常?
維護精確異常非常困難
Ⅱ、非精確異常
直接終止流水線并保存狀態(tài)
? ? 包括異常原因cause寄存器
由異常處理程序負責(zé)找出:
? ? 發(fā)生異常的指令
? ? 哪些指令需要完成或者撤銷 可能需要“手動”完成
簡化硬件, 但需要更復(fù)雜的異常處理軟件
無法應(yīng)用于復(fù)雜的、多發(fā)射的亂序流水線?
十一、指令級并行(ILP)?
1.多發(fā)射
多發(fā)射:每個流水線級可以啟動多條指令
2.推測
推測:為了使依賴于被推測指令的其他指令可以執(zhí)行,允許編譯器或處理器“猜測”指令結(jié)果,是挖掘更大ILP的最重要方法。?
Tips:推測可以由軟件(指令重排序)或硬件(提前緩存指令)完成。
推測中可能會導(dǎo)致本不存在的異常發(fā)生,軟件處理是加入額外推測支持,硬件處理是簡單緩存異常,直到導(dǎo)致異常指令發(fā)生。?
而為了改善性能,決定何時加入推測很重要,有靜態(tài)和動態(tài)兩種技術(shù):
3.靜態(tài)多發(fā)射
所有靜態(tài)多發(fā)射用編譯器幫助封裝多條指令并處理冒險
發(fā)射包:一個時鐘周期內(nèi)發(fā)射多條指令的集合
超長指令字: 一類可以用時啟動多個操作的指令集
關(guān)于靜態(tài)多發(fā)射的調(diào)度如下:
接下來以一個靜態(tài)雙發(fā)射的例子來介紹:
流水線圖如下:
對于靜態(tài)雙(多)發(fā)射的冒險,因為更多指令在同時進行,所以有更多冒險機會。
調(diào)度的樣例如下:
調(diào)度:在靜態(tài)多發(fā)射中指對指令序列重排序,以盡可能地避免流水線阻塞。(假設(shè)分支可預(yù)測,即控制冒險由硬件處理)?
例子中CPI = 0.8(nop不算指令,因為不能提高真實的性能)
一種從循環(huán)中獲得更多性能的編譯技術(shù)叫循環(huán)展開,通過重疊不同循環(huán)體中的指令獲得更高的ILP
寄存器重命名:在循環(huán)展開的過程中,編譯器引入了幾個臨時寄存器($t1,$t2,$t3),目的是消除一些虛假的數(shù)據(jù)依賴。?
4.動態(tài)多發(fā)射
動態(tài)多發(fā)射主要依賴于硬件,通常稱超標量“Superscalar” 處理器
超標量:可以將每個周期處理器能執(zhí)行的指令數(shù)超過一條?
動態(tài)流水線調(diào)度允許CPU以亂序方式執(zhí)行,從而避免阻塞
? ? 但是將結(jié)果提交到寄存器是按指令順序的
樣例如下:
動態(tài)調(diào)度的CPU如下:
對于動態(tài)調(diào)度需求的原因如下:
推測執(zhí)行:
預(yù)測分支,不阻塞指令發(fā)射
? ? 在確定分支預(yù)測正確之前,不提交運算結(jié)果
取數(shù)推測執(zhí)行
? ? 避免取數(shù)和cache miss的延遲?
? ? 不能提交取數(shù)的結(jié)果,直到確認推測正確?
5.多發(fā)射的有效性
6.能耗效率
復(fù)雜的動態(tài)調(diào)度和推測執(zhí)行需要額外的能耗 使用多個簡單處理器核可能更合適
十二、謬誤和總結(jié)
1.謬誤
流水線與實現(xiàn)/工藝技術(shù)無關(guān)
拙劣的ISA設(shè)計使得流水線更困難
2.總結(jié)
文章來源:http://www.zghlxwxcb.cn/news/detail-445306.html
總結(jié)
以上便是紹深入計算機組成與設(shè)計第四章處理器的相關(guān)知識。在第四章中,主要以計算機系統(tǒng)處理器與流水線的數(shù)據(jù)通路介紹與實現(xiàn)為主。文章來源地址http://www.zghlxwxcb.cn/news/detail-445306.html
到了這里,關(guān)于計算機組成與設(shè)計04——處理器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!