1. 基本概念
1.1 基本概念
- 流水線的段(級):流水線中的每個子過程及其功能部件稱爲流水線的級或段,段與段相互連接形成流水線。
- 流水線的瓶頸段:流水線中執行時間最長的段。(會影響流水線性能)
- 實施流水線技術的兩個基本步驟:
(1)把一個重複的過程分解爲若干個子過程,每個子過程由專門的功能部件來實現。
(2)多個任務在時間上錯開,依次通過各功能段,這樣,每個子過程就可以與其它的子過程並行進行。 - 流水線表示方法:
時空圖,橫座標代表時間,縱座標代表流水線的各個段。(標號1屬於同一任務)
1.2 流水線分類
- 按用於計算機系統的等級劃分:
(1)部件級流水線:將處理機中的部件分段,再把這些分段相互連接起來,使得各種類型的運算操作能夠按流水方式進行。(求階差-對階-尾數相加-規格化)
(2)處理機級流水線:把一條指令的執行過程分解爲若干個子過程,每個子過程在獨立的功能部件中執行。(取值-譯碼-執行-訪存-寫回)
(3)處理機間流水線(宏流水線):將多臺處理機串行連接起來,對同一數據流進行處理,每個處理機完成整個任務中的一部分。(Map-Reduce) - 按所完成的功能劃分
(1)單功能流水線:只能完成一種固定功能的流水線。
(2)多功能流水線:各段可以進行不同的連接,從而實現不同功能的流水線。
①靜態流水線:同一時間內,多功能流水線中的各段只能按同一種功能的連接方式工作。
②動態流水線:同一時間內,多功能流水線中的各段可以按照不同的方式連接,同時執行多種功能。 - 按是否有反饋迴路劃分
(1)線性流水線:數據通過流水線中的各段時,每一個段最多隻流過一次。
(2)非線性流水線:流水線中除了有串行的連接外,還有反饋迴路。同一任務可能多次通過同一個段。存在任務調度問題。 - 按任務流入和流出的順序是否相同劃分
(1)順序流水線:流水線輸出端任務流出的順序與輸入端任務流入的順序完全相同。
(2)亂序流水線:流水線輸出端任務流出的順序與輸入端任務流入的順序可以不同。
2. 性能指標
2.1 吞吐率
吞吐率 (Though put rate, TP), 指在單位時間內流水線所完成的任務數量或輸出結果的數量。(n: 任務數;Tk: 處理完成n個任務所用時間, k是一個任務的段數)
- 一個任務的各段時間均等時
最大吞吐率
實際吞吐率
- 一個任務的各段時間不均等時
最大吞吐率
實際吞吐率
2.2 加速比
加速比 (Speedup ratio, S), 是完成同樣一批任務,不使用流水線所用的時間與使用流水線所用的時間之比。(Ts是不使用流水線所用的時間, Tk是使用流水線所用的時間)
- 一個任務的各段時間均等時
實際加速比
最大加速比
- 一個任務的各段時間不均等時
實際加速比
2.3 效率
效率 (Efficiency, E), 是流水線中的設備實際使用時間與整個運行時間的比值。由於流水線有通過時間和排空時間,所以在連續完成n個任務的時間內,各段並不是滿負荷地工作。
- 一個任務的各段時間均等時
實際效率
最大效率
- 一個任務的各段時間不均等時
2.4 流水線設計中的問題
- 瓶頸段
(1)細分瓶頸段
(2)重複設置瓶頸段 - 額外開銷
(1)流水線寄存器需要建立時間和傳輸延遲
(2)時鐘偏移開銷 - 衝突問題
流水線並不能減少(而且一般是增加)單條指令的執行時間,但卻能提高吞吐率。
增加流水線的深度(段數)可以提高流水線的性能。
流水線的深度受限於流水線的額外開銷
3. 流水線的相關
相關是指兩條指令之間存在某種依賴關係,如果兩條指令相關,則它們就有可能不能在流水線中重疊執行或者只能部分重疊執行。
相關分爲:數據相關、名相關、控制相關
3.1 數據相關
- 對於兩條指令i(在前,下同)和j(在後,下同),如果滿足(1)或(2),則稱指令j與指令i數據相關
(1)指令j使用指令i產生的結果
(2)指令j與指令k數據相關,而指令k又與指令i數據相關 - 數據相關特點:
(1)具有傳遞性
(2)數據相關反映了數據的流動關係,即如何從其產生者流動到其消費者
3.2 名相關
名是:指令所訪問的寄存器或存儲器單元的名稱
如果兩條指令使用相同的名,但是它們之間並沒有數據流動,則稱這兩條指令存在名相關。
- 反相關:如果指令j寫的名與指令i讀的名相同,則稱指令i和j發生了反相關。
- 輸出相關:如果指令j和指令i寫相同的名,則稱指令i和j發生了輸出相關。
- 名相關特點:
(1)名相關的兩條指令之間並沒有數據的傳送
(2)如果一條指令中的名改變了,並不影響另外一條指令的執行 - 消除名相關技術:換名技術,通過改變指令中操作數的名來消除名相關(對於寄存器操作數進行換名稱爲寄存器換名),既可以用編譯器靜態實現,也可以用硬件動態完成
3.3 控制相關
控制相關是指由分支指令引起的相關。爲了保證程序應有的執行順序,必須嚴格按控制相關確定的順序執行
4. 流水線的冒險(衝突)
4.1 冒險的分類
- 結構冒險
定義: 因硬件資源滿足不了指令重疊執行的要求而發生的衝突。(在重疊執行模式下,如果硬件無法同時支持指令的所有可能組合方式,就會出現資源衝突,從而導致結構冒險)
原因:①功能部件不是完全流水 ②資源份數不夠
解決:①插入暫停週期 ②設置相互獨立的存儲器分別存儲指令與數據。通過增加資源數量,來避免訪問同一資源導致的衝突。 - 數據冒險
定義:當指令在流水線中重疊執行時,因需要用到前面指令的執行結果而發生的衝突。(根據流水線中的指令重疊,指令之間存在先後順序,如果一條指令取決於先前指令的結果,就可能導致數據冒險)
原因:寫後讀(RAW)、寫後寫(WAW)、讀後寫(WAR,對應反相關)、寫後寫(WAW,對應輸出相關)
解決:①定向技術(短路或旁路技術)是一種緩解數據衝突(減少衝突引起的停頓時間)的典型方法。即在原有的寄存器傳遞數據的基礎上,增加了新的指令間傳遞數據的路徑。定向技術不能解決所有數據衝突。②指令調度或流水線調度:讓編譯器重新組織指令順序來消除衝突。 - 控制冒險
定義:流水線遇到分支指令和其他會改變PC值的指令所引起的衝突。(分支指令及其他改變程序計數器的指令實現流水化時可能導致控制冒險)控制衝突指由分支指令引起的指令延遲。
解決: 凍結或排空流水線,發現分支指令後,將其後的所有指令置空,直到分支是否成功以及分支目標地址算出來爲止。
分支指令有高頻和高延遲的特點,如何減小分支延遲?
(1)通過設置專用的處理單元,在流水線中儘早地判斷出分支轉移是否成功,以及分支目標地址。
(2)基於編譯器的軟件方法:①總是預測分支失敗 ②預測分支總是成功 ③延遲分支
4.2 冒險帶來的問題與解決方法
- 出現錯誤的執行結果
- 流水線出現停頓,會降低流線線效率和實際加速比
- 通過暫停指令來解決(暫停前流出的指令繼續執行,之後的指令暫停執行)