iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0

Pipeline

tags: IT鐵人

Clock Cycle Time

Clock Cycle Time又稱為時脈週期,代表電腦裡面計時器一個Cycle的時間。在上一回的內容中,我們將CPU組裝起來,這時候所有的零件連接在一起,代表要做完所有步驟才會輪到下一個指令,所以一個Cycle的時間就要訂成最長的指令時間,也就是說假設每個指令需要的時間為:

指令類型 時間
R-type 400ps
Load word 600ps
Store word 550ps
Branch 350ps
Jump 200ps

那麼我們就要挑最長的600ps當作一個Cycle的時間。

那麼每600ps我們就只能完成一個指令,太慢了。

Pipeline

假設現在有四個人要洗衣服,步驟有洗衣服 30min、烘衣服 40min、摺衣服 20min,如果大家輪流做,並且全部做完才輪到下一個人,那麼就會發生:

不僅時間會拖很久,中間洗衣機及烘衣機都會有很大的時間處於閒置狀態,如果我們能夠讓機器在閒置的時候就交給下一個人使用,那麼時間軸就會變成:

如此一來就可以大幅減少時間,這就是Pipeline的觀念,將過程拆成多個Stage來執行,前一個Stage結束後就交給下一個指令進行該Stage。

MIPS Stage

對於MIPS我們拆成5個Stage,分別為

Stage縮寫 全名 作用
IF Instruction Fetch 取得指令
ID Instruction Decode & Register Read 指令解碼和讀取Register
EX Execution or Address Calculation 執行或位址運算
MEM Data Memory Access 記憶體讀取
WB Write Back 寫回Register

以下用5個Stage劃分了Datapath:

由於每個階段做完不會剛好能馬上進行下一階段,可能發生該Stage已經做完但下一個Stage尚未執行完,所以我們需要在中間加入Pipeline Register來暫時存取前一個結果,加上去後的結果如下圖:

如此一來我們能夠更快速的執行多個指令,並且一個Cycle的時間也可以取最久的步驟即可,不用取所有的過程,用數字來討論的話就是:

假設每個步驟的時間為:

IF ID EX MEM WB

|300ps|400ps|350ps|500ps|100ps|

如此一來我們的Cycle Time要取500ps,那麼執行一個指令過了五個步驟後,耗費時間為:
500 x 5 = 2500ps
假設我們用原先一個Cycle執行一個指令,以R-type來說,不會用到MEM部分,所需時間為:
300 + 400 + 350 + 100 = 1150ps

雖然看起來Pipeline比較久,不過如果把指令數量放大來看,假設兩邊都有N個R-type指令:
對於Pipeline來說,除了最前面4個Cycle沒有完成指令外,後面每個Cycle各完成了一個指令,時間為:500 x 4 + 500 x N (ps)
對於沒有Pipeline來說,時間為1150 x N (ps)
假設N趨近無限大,Pipeline速度會是Non-Pipeline的兩倍以上。

Control Unit

對照前面的圖會發現今天的圖片還沒有Control Unit,接下來就要討論到了。

上一篇的datapath 今天的

Control Unit要注意的是,在Control Unit判斷的事項,可能在後面的Stage才會用到,比如說Register, Memory是否要寫入,ALUop的值是多少等等,所以這些Control bits也要塞進去Pipeline Register中,一個Stage一個Stage的傳下去,最後的結果會像是這樣:

What's next?

夠難了吧~不過這還不夠,因為Pipeline還會有另一個問題等著我們去解決,那就是Hazard。這部分就留到下一個部分再來煩惱ㄅ,就這樣ㄅㄅ。

上一篇 下一篇
Build a CPU Hazard


上一篇
Day-6 Build a CPU
下一篇
Day-8 Hazard
系列文
杰哥的考研紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言