計算機系統結構學習筆記 --- 流水線技術
流水線的概念
流水線工作原理
-
基本思想
將指令執行過程分為多個階段,每個階段同時處理不同的操作 -
基本組成
多個段按序組成 -
工作原理
每條指令按序通過各段,不同指令執行過程重疊
注:流水線實際上就是把一個大的處理過程分成若干個獨立的小過程,依靠它們的並行工作來提高處理速度(吞吐率)
流水線組成的基本要求
1)各個段操作相互獨立
方法--各個段的源資料來自時序部件,結果存到時序部件
實現--增設段間暫存器(在兩個相鄰段之間傳送資料,避免相互打擾)
2)各流水段操作同步 <-實現連續重疊
實現--設定公共時鐘,拍時鐘週期=max{段i的時長}
3)各流水段操作無衝突
冒險--流水線因某些原因無法正確執行後續指令的現象
冒險種類--結構冒險、資料冒險、控制冒險
實現--增設部件及控制機制,解決冒險
流水線的分類
- 按處理級別分類:操作級,指令級,處理及級(巨集流水)
- 按功能分類:單功能流水線、多功能流水線
- 按工作方式分類:靜態流水線、動態流水線
- 按結構分類:線性流水線、非線性流水線(複用部件)
- 按流入/流出次序分類:順序、亂序
流水線效能指標
吞吐率
單位時間內流水線所完成的任務數量或輸出結果的數量
\(TP=\frac{任務數n}{處理n個任務的總時間T}\)
加速比
指用順序處理方式處理一批任務所用的時間與使用流水方式處理同一批任務所用時間之比
\(S=\frac{順序執行所用時間T_s}{流水方式處理所用時間T_k}\)
效率
流水線裝置利用率,指流水線中裝置實際使用時間與整個執行時間之比。流水線有通過時間與排空時間,連續完成n個任務,各段不是滿負荷工作的
m為段數,n為任務數
流水線段數選擇
流水線冒險的處理
流水線組成示例(MIPS)
注意事項:
1)保證不會在同一個時鐘週期讓同一功能段(如ALU)做不同的兩件事
2)為避免IF段訪存(取指令)與MEM段訪存(讀寫資料)發生衝突,必須採用分離的指令儲存器和資料處理器(或Cache)
3)ID段對通用暫存器進行讀操作,WB進行寫,為解決對同一通用暫存器的訪問衝突,把寫操作安排在時鐘週期前半拍完成,讀安排在後半拍
相關與冒險
-
相關
兩條指令之間的依賴關係 -
冒險(衝突)
因相關等原因引起的流水異常現象
注意! 相關不等於冒險!
結構冒險處理
- 產生原因:爭奪硬體資源
- 結構要求
1)每個部件不能複用
2)各部件使用時間無衝突 - 處理策略
1)重複設定部件
2)分時使用部件
資料冒險處理
- 產生原因: 因重疊執行,指令所需資料不可用
- 冒險型別: 寫後讀(RAW),寫後寫(WAW),讀後寫(WAR)
- 處理方法: 阻塞發,轉發法,亂序執行法
阻塞法
衝突指令及後續指令停頓,知道冒險消除
- 停頓方法:插入氣泡
轉發法:衝突指令可從資料產生段獲取資料,來消除冒險
load-use冒險
亂序執行法
衝突指令停頓後,後續無RAW的指令可先執行
控制冒險處理
阻塞法
分支指令之後的指令停頓,直到冒險消除(得知確切的轉移目標地址
預測法
預測轉移方向,並執行該方向的指令
猜對是繼續執行,猜錯時回頭執行反方向指令
延遲分支法
延遲槽中指令總是被執行,使延遲槽中為有用指令
流水線實現
單指令週期數據通路的實現(以MIPS32為例)
多指令週期數據通路實現
流水資料通路的實現
- 結構冒險處理
- 資料冒險處理
- 控制冒險處理
*小結