16. 流水線的基本原理

1. 舉個例子

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

大廚做菜的例子

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

流水線做菜

每個小廚師負責一個環(huán)節(jié),還有一個小廚師“吹號”,這樣4分鐘后,流水線填滿,即每個環(huán)節(jié)都在工作了。最后一共需要7分鐘完成4道菜,而一個大廚需要16分鐘完成。

使用流水線,可以每分鐘上一道菜,而不使用流水線,需要4分鐘上一道菜,流水線提升了4倍的性能。這里需要注意,每道菜制作時間仍然是4分鐘。

2. MIPS指令的執(zhí)行步驟

MIPS執(zhí)行需要5步,如下圖所示,

MIPS指令執(zhí)行步驟

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

從數(shù)據(jù)通路上看MIPS指令執(zhí)行的步驟

3. MIPS流水線

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

流水線形式的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í)行時間,流水線提高的是指令吞吐率。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容