408強化課錄播五級流水線相關內容筆記
- 指令流水線基本概念:簡單的概念題
- 指令流水線基本實現:指令按序發射,按序完成
- 各種冒險:結合MIPS指令序列分析並處理冒險
- 超標量和動態流水線:簡單的概念題
五級流水線
五級流水線的設計是為了透過並行提高處理器的吞吐量。
圖片來自CSAPP。
一個指令通常被劃分為五個階段:
- 取指(IF)
- 譯碼(ID)
- 執行(EX)
- 訪存(MEM)(如果需要的話)
- 寫回(WB)(如果需要的話)
總體的圖如下
結構冒險(考的少)
一個被請求的資源仍處於忙碌狀態。
多個階段可能請求同一份資源,例如IF和MEM需要同一塊Cache,就會發生結構冒險。
解決方法有:
- 阻塞指令
- 把指令Cache和資料Cache分離
資料冒險
需要等待上一個指令完成資料讀寫。
如上圖所示,因為指令I1對暫存器R1的寫操作發生在WB寫回階段,因此指令I2在ID譯碼階段需要讀暫存器時,R1的值還沒有被寫回,這就是資料冒險。
核心特點:兩條指令,先寫後讀同一個暫存器。如果某條指令寫了一個暫存器,則要觀察後面三條指令是否讀了這個暫存器。(個人感覺可能畫圖更直觀)
解決方案:
- 硬體阻塞:將讀暫存器的指令ID段阻塞若干時鐘,直到寫暫存器的指令完成WB。
- 轉發(旁路)技術:將寫暫存器的資料直接轉發給讀暫存器的指令。但轉發旁路不能解決Load指令寫暫存器引發的Load-Use資料冒險。
Load-Use資料冒險
Load指令把資料從記憶體讀到暫存器,後面的指令需要用到這個暫存器的值。這種情況下,即使使用轉發技術也無法解決資料冒險。
控制冒險
一些控制取決於上一條指令的結果。
轉移類指令會更改PC,因此下一條指令不是I2而是其他,會產生控制冒險。
解決方案:
- 硬體阻塞:將轉移類指令後一條指令IF段阻塞3時鐘