處理器結構--PipeLine&SuperScalar

PipeLine由來

最初開始,指令一條一條順序執行,後來當工藝進步了,CPU中的元件越來越多,而在原來的順序執行的過程中,只有一條指令的某一個階段在執行,如取指,取數據等等,其他元件都處於等待的狀態,於是爲了提高CPU吞吐量,以及指令並行的效率,於是PipeLine應運而生

5級PipeLine

PipeLine原理

PipeLine是指將計算機指令處理過程拆分爲多個步驟,並通過多個硬件處理單元並行執行來加快指令執行速度。其具體執行過程類似工廠中的流水線,並因此得名。

  • 把一個重複的過程分解爲若干子過程
  • 每個子過程可以與其它子過程並行進行
  • 將每個指令分解成取指,譯碼,執行,寫回等階段
  • 將分解的每個階段交給不同的元件進行處理

雖然分解完後,每個指令需要多個cycle後才能完成,但是通過多個指令的並行運算每個訊號內一個指令可以完成,因此通過這個方法整個速度可以提高

PipeLine

PipeLine的風險與問題(Harzard)

假如,一個指令在執行的時候,需要等待流水線上前一個指令先執行完畢的話,那麼這兩個指令相互之間彼此有依賴關係。這可能導致流水線衝突的現象發生。以下三種衝突情況可能出現:

  • 資源衝突:流水線上的一個指令需要使用已經被另一個指令佔據的資源,多條指令同時訪問同一個硬件單元,目前L1緩存已經被分爲指令緩存和數據緩存,所以原來有的結構衝突也就沒有了
  • 數據衝突:
    • 指令層的數據衝突:指令需要的數據還沒有計算出來,如下指令,R1中的值還未寫回寄存器,下條指令就需要使用
// 前後指令間存在數據相關性,由於流水線導致read before write
// 上條指令還沒將結果寫回reg,後面的指令就錯誤操作了reg中之前的數據
add R1,R2,R3;
add R4,R1,R5;
  • 傳輸層的數據衝突:指令需要的暫存器(register)內容還沒有被存入暫存器
  • 控制流衝突:流水線必須等待一個有條件Goto指令是否會被執行。

這些衝突導致相對應的指令,必須在流水線的開始處等候,這會在流水線上導致空缺。這樣的話流水線就不能順利運行,處理速度便開始下降。因此要儘量避免這樣的衝突。

PipeLine的解決方案

  • 資源衝突 通過增加功能單位可以解決資源衝突,通常CPU中有很多通用寄存器,x86有8個通用寄存器,Arm有16個,但是RISC處理器通常會內置32或者64個寄存器堆(Register File)以供使用。通過把流水線後面的計算結果立刻向前傳可以避免許多數據衝突。通過RAT(Register Alias Table)將指令中寄存器進行重命名,以達到寄存器的充分利用以及數據計算的分離。
  • 數據衝突 使用out-of-order(ROB,RRF)執行;在衝突指令間插入不相關指令;Forwarding,上條指令的數據有效後就直接送個下條指令而不是先寫回存儲器;插入Nop空指令(軟件解決,但是不好)等。

Forwading

  • 控制流衝突 通過分支預測器(BTB,Static Predictor)可以減少控制衝突。在這裏處理器預測性地繼續運算,直到正式預測是正確爲止。假如預測錯誤的話那麼在其中已經執行的指令要被推翻。尤其流水線非常長的處理器(比如英特爾的奔騰4或者IBM的PowerPC在這種情況下要浪費許多時間。因此這些處理器擁有非常高級的分支預測技術,只有百分之一的分支預測會發生錯誤,其流水線需要清除。

控制流衝突

超標量(SuperScalar)的概念

處理器的內核中一般有多個執行單元(或稱功能單元),如算術邏輯單元、位移單元、乘法器等等。未實現超標量體系結構時,CPU在每個時鐘週期僅執行單條指令,因此僅有一個執行單元在工作,其它執行單元空閒。超標量體系結構的CPU在一個時鐘週期可以同時分派(dispatching)多條指令在不同的執行單元中被執行,這就實現了指令級的並行。

超標量流水線

超標量實現原理

標量流水線在運行的過程中,每一個Cycle只取一條指令,發射的時候也只發射一條指令。 而超標量流水線是指在取指的時候,某一時刻讀取N條指令(X86 Nehalem每次讀4條指令共16bytes),然後將N條指令同時解碼(4個解碼器),並且解碼完畢後將解碼完畢的Micro Ops交付給ALU執行,最後在一個cycle內將執行結果分發。就稱爲這樣的流水線爲N級發射超標量流水線。

即:在同一時刻,有多條指令被讀取,譯碼,執行,存儲,寫回。

ARM Cortex-A9超標量流水線

X86 Nehalem4發射16級超標量流水線

ARM與X86比較

參考資料

http://www-inst.eecs.berkeley.edu/~cs61c/sp15/lec/13/2015Sp-CS61C-L13-kavs-Pipelining-1up.pdf https://compas.cs.stonybrook.edu/~nhonarmand/courses/sp16/cse502/slides/06-pipelining.pdf https://www.zhihu.com/question/35024996/answer/62322067 https://www.coursera.org/learn/jisuanji-zucheng/lecture/dL6g2/604-liu-shui-xian-de-mou-xian

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章