五階段管線(five-stage pipeline)
教科書上的管線,借自經典 RISC 處理器,有五個階段——一條乾淨俐落、處理單一指令的裝配線。它們通常縮寫為 IF、ID、EX、MEM、WB。把它們想成一排五張工作檯,各做一件事,再把半成品指令交給下一張。
讓一條指令走一遍。IF(指令提取):依程式計數器裡的位址從記憶體讀出指令,並推進程式計數器。ID(指令解碼與讀暫存器):判斷這是什麼指令,並從暫存器檔讀出它的來源運算元。EX(執行):算術邏輯單元做工——加、減、比較,或算出記憶體位址。MEM(記憶體存取):若是載入就讀資料記憶體;若是儲存就寫進去;其他指令在這裡什麼都不做。WB(寫回):把結果寫進目的暫存器。載入真的會用到全部五階;一個加法其實只需四階(它在 MEM 什麼都不做),但仍要通過,好讓整條線步調一致。
五這個數字不是魔法——它是一個甜蜜點,每個階段做的工作大致相等,所以時脈能每階段跳一次。這是微架構的選擇,不是指令集的一部分:無論晶片是五階段還是二十階段,軟體看到的都是同樣的指令。五階段佈局之所以重要,是因為三種經典危障——結構、資料、控制——全都表現為位於這條管線不同階段的指令之間的衝突,而它們的解法(前饋、停頓、分支處理)也最適合在這裡先學會。
一條載入字組 lw 走過五階段:IF 讀出這條 lw 指令;ID 讀出基底位址暫存器;EX 把位移加上去算出位址;MEM 從資料記憶體讀那個位址;WB 把載入的值寫進目的暫存器。一條 add 重用 IF、ID、EX、WB,在 MEM 階段閒置。
五個階段 IF-ID-EX-MEM-WB;載入用到全部五階,較簡單的指令則空手通過它們不需要的階段。
五這個數字是慣例,不是定律。真實處理器用過從兩階到二十多階的設計;越深的管線時脈越快,但每次停頓與誤測的代價也越高(見管線深度權衡)。