計算機組成與設計(九)—— 流水線處理器


流水線的基本原理

 指令的主要執行步驟

這個是之前設計的單周期寄存器,它已經能正確的執行MIPS指令。

而MIPS的指令可以分成如下5個階段:

  1. 取指(Fetch)::從存儲器取指令,並更新PC
  2. 譯碼(Decode):指令譯碼,從寄存器堆讀出寄存器的值
  3. 執行(Execute):運算指令:進行算術邏輯運算,訪存指令:計算存儲器的地址
  4. 訪存(Memory):Load指令:從存儲器讀指令,Store指令:將數據寫入寄存器
  5. 回寫(Write Back):將數據寫入寄存器堆

與示意圖結合如下:

 

單周期與流水線的區別

全在這個圖里:

實際上,流水線並不會縮短單條指令的執行時間(甚至會增加時間),而是提高指令的吞吐率(單位時間進多少指令,有多少指令完成)。

 

添加流水線寄存器

我們要改造成流水線寄存器的話,我們發現每個階段所需的硬件資源基本是獨立的,如果我們能把指令存儲器輸出的指令編碼事先保存下來,那我們就可以提前更新PC寄存器的值,並用這新的值去指令存儲器當中取出一個新的指令,而在取新指令的同時,剛才取出的那條指令的編碼就會被分解成不同位域,而寄存器堆也會根據輸入送出對應寄存器的內容。所以需要添加流水線寄存器。

流水線寄存器:保存了前一個階段要向后一個階段傳遞的所有信息。

所以每過一個時鍾周期,都可以更新寄存器的值,而不會影響當前的執行過程,當前執行所需要的全部信息都保存好在流水線寄存器中。

在兩個階段之間添加流水線寄存器后,此時5個階段所作的工作還要與流水線寄存器聯系起來

  • 取指令(IF):利用PC中的地址從存儲器中讀取指令,然后將指令放入IF/ID流水線寄存器中
  • 指令譯碼和寄存器堆的讀取(ID):IF/ID流水線寄存器中的指令包括用於讀取寄存器的兩個寄存器號和用於符號擴展的16位立即數。讀出的兩個寄存器值和符號擴展后的32位立即數都存放在ID/EX流水線寄存器中
  • 指令執行或地址計算(EX):指令執行或地址計算,並將結果存放在EX/MEM流水線寄存器中
  • 存儲器訪問(MEM):根據EX/MEM中的有效地址讀取數據。值得注意的是,需要寫入寄存器的數據在較早的流水級中已經讀取並存放在ID/EX中。在MEM級獲得這個數據的唯一方法是把數據放入EX步驟中的EX/MEM流水線寄存器中,這一過程與將有效地址放入EX/MEM流水線中類似
  • 寫回(WB):在寄存器堆寫信號有效時,將數據寫入目的寄存器。sw指令在回寫步驟不用做任何事

 

性能分析,與之前的流水線相比,多了流水線寄存器的延遲,周期200到250ps。

 

 

 流水線的優化

“超級流水線”技術

“超級流水線”技術:將五級流水線細分為更多的階段,增加流水線的深度。

這樣縮短了周期,從而提升了時鍾頻率,從而提高了指令吞吐率。

 

流水線的級數

流水線的級數是越大越好嗎?肯定不是。級數越大,所用的流水線寄存器相應增加,單條指令的延遲增加,流水線寄存器延遲比例增加;填滿流水線的指令條數更多,指令之間的關系更加復雜。

 

 

超標量流水線

超標量結構

超標量結構:通常,將具有兩條或兩條以上的並行工作的流水線結構稱為超標量結構,亦稱為“超標量流水線”或超標量。

如圖,我們對每個階段擴大一倍,那么可以同時對兩個指令進行操作。第一、二條指令同時進入階段一,經過一個時鍾周期,第一、二條指令進入階段二,同時第三、四條指令進入階段一......這樣每個階段兩條指令並行前行,到第五個周期就有兩條指令同時被完成。

 像這樣兩者並行的結構叫作雙發射的結構。按這種方式擴大,就能得到三發射、四發射,這就是超變量流水線寄存器的原理。

 

超標量的應用

ARM Cortex-A9的超標量流水線

它每個時鍾周期可以發射4條指令,根據指令的不同,總共會經過8~11級流水線。在流水線的前端比如說 取指,譯碼並沒有分成多條流水線而是采用統一的部件。當然我們要知道這些部件雖然看上去是一個,但它實際上比標量流水線要大得多,比如說取指部件至少一次要能取來四條指令甚至更多,而譯碼部件一次也至少應該完成四條指令的譯碼,而到了流水線的后端, 才會從結構表示上體現出多條並行流水線的形態。

 

 Core i7的超標量流水線

  1. 取指令:從高速緩存中取出指令,取回128bit,16個字節
  2. 將這16個字節放入指令譯碼器:因為x86指令長度是不固定的,所以首先要經過一個 指令長度的譯碼器,分解出到底哪幾個字節是一條指令。 
    那么在這一點上類似的指令系統就體現出了明顯的優勢, 它每條指令都是定長的,不用額外進行這樣的識別工作。
  3. 微指令譯碼:在譯碼器當中通過硬件會將x86的指令轉換成更為簡單的類MIPS指令, Inter稱之為“微操作”那從這里可以看出有三個簡單的譯碼器,用於對那些比較簡單的x86指令進行轉換,每條指令對應一個微操作;而那些非常復雜的指令則會通過這個復雜的譯碼器轉換成多條V操作。從而可以充分運用大量面向RISC處理器研發出的高級流水線的技術,這也就是為什么我們現在經常說x86雖然是一個CISC的指令系統, 但它實際上是用RISC的方式去實現的
  4. ......

 

 超標量與多核CPU

現在的多核CPU通常是在一個CPU芯片中集成了多個超標量處理器核。同時包含指令高速緩存和數據高速緩存,對應了我們原理結構當中的指令存儲器和數據存儲器。為了提高性能現在的處理器當中一般還配備了二級的高速緩存。 這些部件的關系非常緊密,我們通常也就把這一部分稱為一個處理器核。

 那么剛才看到那個四發射十六級流水線的結構圖就是在只這么一個處理器核內部的結構,那么可以說這一個處理器核就是一個超標量流水線的處理器核。

 

 

參考鏈接:https://www.coursera.org/learn/jisuanji-zucheng/lecture/dL6g2/604-liu-shui-xian-de-mou-xian


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM