處理器流水線的概念和相關技術_第1頁
處理器流水線的概念和相關技術_第2頁
處理器流水線的概念和相關技術_第3頁
處理器流水線的概念和相關技術_第4頁
處理器流水線的概念和相關技術_第5頁
已閱讀5頁,還剩45頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1處理器流水線的概念和相關技術2流水線技術1.流水線的概念2.流水線的冒險和冒險的解決辦法3.多發射處理器31.流水線的概念流水線技術:把一個重復的過程分解為若干個子過程,每個子過程由專門的功能部件來實現。將多個處理過程在時間上錯開,依次通過各功能段,這樣,每個子過程就可以與其他子過程并行進行。流水線的描述:最常用的方法是時間-空間圖橫坐標:表示時間,即各個任務在流水線中所經過的時間縱坐標:表示空間,即流水線的各個子過程,也稱為級、流水線深度(Stage)4流水線時間空間圖5流水線技術應用到處理器中就是采用流水線方式執行指令。一個MIPS指令包包含五個處理步驟: 1.取指令周期(IF)2.指令

2、譯碼/讀寄存器周期(ID)3.執行操作/計算地址(EX)4.從數據存儲器中讀取操作數(MEM)5.將結果寫回寄存器堆(WB)6采用相同的功能模塊,指令順序執行和按照流水線技術執行,在時間上可以看出流水線指令的執行速度提高了4倍。7流水線的基本作用 流水線增大了CPU的指令吞吐量即單位時間執行指令的條數,但是它未減少指令各自的執行時間。實際上流水線技術要對流水線附加一些控制,因而了增加開銷,使單條指令執行時間略有增加。吞吐量的增大意味著程序運行的更快,總的執行時間變短,盡管沒有一條指令的執行變快。82.流水線的冒險盡管流水線可以帶來處理器性能上的提高,但是不是所有的指令就直接可以進行流水線操作,

3、在指令執行中的下一個周期中的下一條指令不能執行,這種情況叫做冒險。有三類冒險:1.結構冒險2.數據冒險3.控制冒險流水線中的冒險會引起流水線停頓,部分指令就要延期執行。92.1 結構冒險結構沖突(資源沖突):流水線中多條指令在同一時鐘周期內爭用同一功能部件的現象。即因硬件資源滿足不了指令重疊執行的要求而發生的沖突。常見的導致結構相關的原因:功能部件不是完全流水或者資源不夠用。 例如訪存沖突10結構冒險112.2 結構冒險的解決辦法MIPS指令集是為流水線設計的,在設計流水線過程中能夠很容易的避免結構冒險。但是流水結構中只有一個存儲器時,兩條指令同時在一個存儲器中預取指令就會發生結構冒險。12為

4、消除資源沖突而插入的流水線氣泡(Bubble)13解決辦法二設置相互獨立的指令存儲器和數據存儲器或設置相互獨立的指令Cache和數據Cache。142.3 數據冒險一條指令必須等到另一條指令的完成而造成的流水線暫停的情況叫做數據冒險。形如: add $s0, $t0, $t0 sub $t2, $s0 $t3 加法指令需要到WB階段后才寫回結果,減法指令此時才可以繼續執行。在不任何干預的情況下,流水線白白浪費了三個時鐘周期。15AND,OR操作不會暫停,但是DSUB,XOR指令需要等待DADD在WB階段寫回數據后才可以執行。162.4 數據冒險的解決辦法根據指令中讀寫訪問的順序,可以將數據冒險

5、分為三類。分別是:寫后讀(RAW)寫后寫 (WAW)讀后寫 (WAR) 17寫后讀冒險(RAW: Read After Write)在 i 寫入之前,j 先去讀。j 會錯誤的獲取舊值。這對應“真數據相關”,為了確保j可以得到正確的i值,必須保持程序的順序。i: DSUB R1,R2,R3j: DADD R4,R1,R318寫后寫沖突(WAW: Write After Write)在 i 寫入之前,j 先寫。最后寫入的結果 i 是錯誤的。這對應“輸出相關”,寄存器換名技術可以消除i: DSUB R1,R4,R3 j: DADD R1,R2,R3k: DMUL R6,R1,R7Cant happe

6、n in MIPS 5 stage pipeline because: - All instructions take 5 stages, and - Writes are always in stage 519讀后寫沖突(WAR: Write After Read)在 i 讀之前,j 先寫。i 讀出的內容是錯誤的!這對應“反相關” ,寄存器換名技術可以消除i: DSUB R4,R1,R3 j: DADD R1,R2,R3k: DMUL R6,R1,R7Cant happen in MIPS 5 stage pipeline because:- All instructions take 5

7、stages, and- Reads are always in stage 2, and - Writes are always in stage 5讀后讀RAR不是數據冒險,讀操作不改變值20轉發(旁路)方式解決數據冒險 形如:add $s0, $t0, $t0 sub $t2, $s0 $t3,減法指令要等到加法指令寫回寄存器堆時才可以執行指令,浪費了時間。轉發技術:在加法指令在ALU運算一結束就將結果送給減法指令的輸入項。這樣從內部資源中直接提前得到缺少的運算項的過程叫做轉發。21 在原始的數據通路中用流水線寄存器將流水線各部分分開,這些寄存器可以存儲所有穿過它的數據,寄存器的寬度都足

8、夠大。目前流行的有128位,97位,64位。 有了流水線寄存器后,轉發就變的簡單了。在指令執行的五個階段中間各加了個寄存器記錄流過的數據。22如圖所示,加法指令后面的取字指令沒有等到加法指令寫回R1后再執行,而是提前就獲得了R1的數據,減少了等待時間。 23轉發技術不能解決所有的數據冒險當一條指令試圖讀取一個由前一條裝載指令讀入的寄存器時,就無法使用轉發解決數據冒險問題了。24對于裝載指令的存在,我們采用了插入阻塞(氣泡,)方法解決問題。增加一個冒險檢測單元,一旦發現裝載指令后就在其他需要這個結果的指令前插入阻塞。直到可以使用轉發技術或指令可以得到結果為止。25編譯器調度(靜態調度)插入阻塞對

9、于流水線來說仍然是暫停了流水線的執行。既然轉發技術無法消除指令序列中所包含的這種暫停,那么能否讓編譯器在進行代碼生成時就消除這些潛在的暫停呢? 實際上,編譯器的確可以通過重新組織代碼順序來消除這種暫停。通常稱這種重新組織代碼順序消除暫停的技術為 指令調度(instruction scheduling)。原理:相關不一定引起阻塞,只要隔開足夠遠在一個流水線上引起阻塞,在另一個流水線上不一定引起阻塞,編譯優化與機器有關26 例1 請為下列表達式生成沒有暫停的流水線 指令序列: abc ; def ; 假設載入延遲為1個時鐘周期。兩條ALU指令(ADD Ra,Rb,Rc 和 SUB Rd,Re,Rf

10、)分別和兩條Load指令(LW Rc,c和LW Rf,f)之間存在數據相關。為了保證流水線正確執行調度前的指令序列,必須在指令執行過程中插入兩個時鐘周期的暫停。但是考察調度后的指令序列不難發現,由于流水線允許轉發,就不必在指令執行過程中插入任何暫停周期。 27LD Rb,BIFIDEXMEMWBLD Rc,CIFIDEXMEMWBADD Ra,Rb,Rc IFID停EXMEMWBSD Ra,AIF停IDEXMEMWBLD Re,EIFIDEXMEMWBLD Rf,FIFIDEXMEMWBSUB Rd,Re,RfIFID停EXMEMWBSD Rd,D IF停IDEXMEMWB調度前執行情況(采用

11、了轉發技術)28LD Rb,BIFIDEXMEMWBLD Rc,CIFIDEXMEMWBLD Re,EIFIDEXMEMWBADD Ra,Rb,RcIFIDEXMEMWBLD Rf,FIFIDEXMEMWBSD Ra,AIFIDEXMEMWBSUB Rd,Re,RfIFIDEXMEMWBSD Rd,D IFIDEXMEMWB調度后執行情況(采用了轉發技術)29動態調度有些信息在譯碼時難以確定,如是否發生異常、訪存操作需要多少周期等,靜態調度就不能完成。動態調度:硬件會重新安排指令的執行順序以減少停頓并同時保持數據流和異常行為。優點:有些相關編譯無法檢測、編譯器更加簡單、程序性能對機器依賴少30

12、動態調度的思想基本思想 :把相關的解決盡量延遲到馬上就會出錯的時候 前面指令的stall不影響后面指令繼續前進把譯碼分成兩個階段:發射和讀操作數 發射:指令譯碼,檢查結構相關 讀操作數:檢查操作數是否準備好,準備好就 讀數,否則等待,當一條指令在讀操作數階段 等待時,后面指令的發射可以繼續進行亂序執行: 指令進入是有序的 執行可以亂序,只要沒有相關就可執行,多條 指令同時執行 結束可以亂序,也可以有序(主要是精確例外 的需要),亂序結束會導致WAR相關(靜態 流水線中只有RAW和WAW相關)31Tomasulo算法IBM 360/91中首次使用,由Robert Tomasulo提出的一種支持亂

13、序執行的高級方案。它會跟蹤指令的操作數何時可用,將RAW冒險降至最低,并在硬件中引入寄存器重命名功能,將WAW和WAR冒險降至最低。現代處理器使用了該算法的各種變體,但是核心都是: 1.跟蹤指令相關以允許在操作數可用時立即執行指令。 2.重命名寄存器以避免WAR和WAW冒險。3233Tomasulo算法的流水階段 1.發射:把操作隊列的指令根據操作類型送到保留站(如果保留站有空),發射過程中讀寄存器的值和結果狀態域 2.執行:如果所需的操作數都準備好,則執行,否則偵聽結果總線并接收結果總線的值。 3.寫回:把結果送到結果總線,釋放保留站343536373839Tomasulo算法小結通過動態調

14、度緩解流水線阻塞:例如減少CACHE失效對性能的影響保留站:重命名寄存器+緩存源操作數 避免寄存器成為瓶頸 避免WAW和WAR阻塞缺點: 硬件復雜性 結果總線成為瓶頸,多條結果總線增加硬件復雜度40 流水線技術一直是提高處理器速度的最有效技術之一。但目前的在相關處插入阻塞,轉發技術,編譯器調度都是盡量分離相關問題的指令,使他們不會導致沖突,從而減少暫停的影響。雖然都會相應的顯著減少數據相關的次數提高流水效率,但也會不可避免的增加硬件復雜度和編譯器的復雜性。 而動態調度則可以以硬件的方式調整指令執行順序,使不相關的后續指令得以不受暫停的影響而繼續執行,可以在降低編譯器復雜度的同時處理一些編譯階段

15、無法知道的相關,在出現數據冒險是盡量避免出現流水暫停。412.5 控制冒險也叫分支冒險,指因為程序的執行方向可能被改變而引起的流水線暫停叫做控制冒險。 執行分支指令,程序計數器PC值兩種情況:PC值改變為目標地址(轉移成功)PC值保持正常(轉移失敗,順序執行),PC+4。PC值不定,所以流水線需要暫停,直到確定了新的PC值為止42由于分支指令在MEM階段才確定是否執行分支,分支后面的三個指令都要被取回并執行。432.6 控制冒險的解決辦法1. 處理分支指令最簡單的方法:一旦檢測到分支指令(在ID段),就暫停執行其后的指令,直到分支指令到達MEM段,確定出新的PC值為止。特點:簡單但是速度非常慢

16、。442.縮短分支延遲確定分支目標地址越早,需要清除的指令就越少。將分支執行提前到ID級。首先計算分支目標地址:在IF/ID流水線寄存器中就有了PC值和立即數,增加一個加法器就可以得到目標地址。分支判斷:判斷從ID級取到的兩個寄存器的值是否相等,對應的位進行異或操作即可。453.延遲分支:把分支開銷為n 的分支指令看成是延遲長度為n 的分支指令,其后緊跟有n 個延遲槽。流水線遇到分支指令時,按正常方式處理,順帶執行延遲槽中的指令(不影響分支的一條指令),從而減少分支開銷。特點:對于每個時鐘周期發射一條指令的五級流水線處理器而言,延遲分支簡單有效。但是隨著處理器向著更深流水線發展和單周期多指令方

17、向發展。延遲分支作用不大。464.預測分支不發生假設分式不發生,繼續執行順序的指令流。如果分支發生了,就丟棄已經讀取并譯碼的指令,按照分支目標繼續執行。特點:如果分支發生的可能性較大,并且丟棄指令的代價很小的話,這種優化方法可以減小控制冒險的損失。475. 預測分支成功 假設分支轉移成功,并開始從分支目標地址處取指令執行。 起作用的前題:先知道分支目標地址,后知道分支是否成功。特點:因為在5段流水線中總是先得到轉移的結果,后得到目標的地址,所以不適用于5段流水。適合那些隱含條件碼和更強功能轉移條件的機器中,轉移的目標地址比其結果更早產生,這時采用預測轉移被選中的方法比較合適。486.動態分支預測:假設分支是否發生是一種粗略的預測分支方法。一種策略是通過查找指令的地址觀察上一次執行該指令時分支是否發生,如果上次執行時分支發生就從上次分支發生的地方開始取新的指令,這種技術叫做動態分支預測。實現方式:使用分支預測緩存或分支歷史記錄表。緩存是一小塊按照分支指令的地址地位索引的存儲器區,包括了一位或多位數據用以說明最近是否發生過分支。特點

溫馨提示

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

評論

0/150

提交評論