1. 舉個例子
一個大廚做菜的例子,如下圖所示,

用4個小廚師進行流水線的操作,如下圖所示,

每個小廚師負責一個環(huán)節(jié),還有一個小廚師“吹號”,這樣4分鐘后,流水線填滿,即每個環(huán)節(jié)都在工作了。最后一共需要7分鐘完成4道菜,而一個大廚需要16分鐘完成。
使用流水線,可以每分鐘上一道菜,而不使用流水線,需要4分鐘上一道菜,流水線提升了4倍的性能。這里需要注意,每道菜制作時間仍然是4分鐘。
2. MIPS指令的執(zhí)行步驟
MIPS執(zhí)行需要5步,如下圖所示,

從數(shù)據(jù)通路上來看,MIPS執(zhí)行步驟如下圖所示,

3. MIPS流水線
就像這篇筆記一開始舉例那樣,我們把數(shù)據(jù)通路也可以分成幾個階段,做成流水線的形式。那么就在各個階段之間插入流水線寄存器,負責保存前一個階段向后一個階段需要傳遞的所有信息,如下圖所示,

假設這是一個被初始化后的流水線,里面什么都還沒有,那么從IF開始分析,
<1> IF級,從指令存儲器取出了PC0對應的指令,第t0時鐘上升沿時,PC寄存器更新為PC1,且IF/ID流水線寄存器存儲了PC0對應的指令,經(jīng)過一段時間延遲后,該指令在IF/ID寄存器輸出端上出現(xiàn),被分解,寄存器堆同時讀出了相應的數(shù)據(jù)Ra0和Rb0,該數(shù)據(jù)連接在了ID/EX流水線寄存器上;
<2> 第t1時鐘上升沿,IF/ID寄存器存儲了PC1指令,RegFile讀取了Ra1和Rb1的數(shù)據(jù),ID/EX存儲器存入了Ra0和Rb0,經(jīng)過一段時間寄存器輸出延遲后,Ra0和Rb0輸出到了EX級,ALU計算后,計算結果送到了EX/MEM流水線寄存器。
<3> ...
4. 流水線的性能
如果是單周期處理器,假設每個階段需要200ps,那么每條指令需要1000ps執(zhí)行完,才可以執(zhí)行下一條指令,那么這個單周期處理器的時鐘就是1000ps的,如下圖所示,

如果是流水線處理器,那么第1條指令完成IF后進入ID,同時第二條指令就可以IF了。每隔200ps就有一條指令進入流水線,且每隔200ps就有一條指令完成,那么時鐘周期就是200ps。理想情況下,流水線處理器比單周期處理器性能提升有5倍。

當然這是理想情況,因為每個流水線寄存器也會引入延遲,假設每個流水線寄存器引入延遲50ps,那么上圖就變成了下面這個樣子,

如上圖所示,考慮流水線寄存器延遲后,時鐘周期變成了250ps,且完成一條指令需要1250ps,比單周期處理器還慢。
流水線的優(yōu)勢在于,流水線中每個部件并行工作,從而可使整個程序的執(zhí)行時間縮短。但是流水線不會縮短單條指令的執(zhí)行時間,相反會增加單條指令執(zhí)行時間,流水線提高的是指令吞吐率。