iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
自我挑戰組

杰哥的考研紀錄系列 第 8

Day-8 Hazard

Hazard

tags: IT鐵人

Pipeline隱憂

上一次我們提到Pipeline可以提升速度,不過捷徑一定比較難走,小時候完馬力歐賽車也是捷徑比較難進去或是很難通過。

Pipeline也是一樣,會遇到一些為了加速而遇到的阻礙。

Hazard

Pipeline主要遇到Hazard為下列三者︰

類型 原因
Structural Hazard(結構危障) 硬體資源不夠多,導致在同一時間內要執行的多個指令無法執行。
Data Hazard(資料危障) Pipeline中某一指令需要用到前面指令尚未產生的結果,也就是執行的指令所需的資料還無法獲得。
Control Hazard(控制危障) Branch的結果尚未產生時,後續的指令就已經進入Pipeline,如果決定要branch到別的位置便會發生錯誤。所以又稱為Branch Hazard。

Structural Hazard

資源太少

如果我們只有一個單一記憶體,而不是兩個分離的記憶體。那麼Instruction Memory跟Data Memory要同時被存取時,就會發生Structural Hazard。如下︰

這時候就會讓記憶體被兩個指令存取,會導致無法執行產生Hazard。

不過基本上都會把兩個分開來執行啦,所以不用擔心這個。

Data Hazard

資料舊了

Data Hazard發生的情況是,前後的指令都有用到同一個Register,不過前面修改的值還沒放回Register中,後面就直接對他取值,將導致資料是錯誤的狀況,比如說以下狀況:

這五個指令都有用到r1 Register,不過第一行的add結果要在最後的WB才會寫回去Register中,導致後面的sub跟and都會拿到尚未修改的值,不符合原先的期望。

除了最後的xor因為在下一個Cycle才取值,一定沒問題外,前面的or指令不會發生的原因為:WB在Cycle前半完成,而ID是在Cycle後半才開始,所以不會發生Data Hazard。

Control Hazard

做白工

Control Hazard特別的事情在於不是每次Branch指令都會發生,而是萬一Branch的結果為真(需要跳到別的位置執行),才會發生Control Hazard。以下圖為例:

假設beq指令成立,要跳到64位址執行slt,那麼中間的and, or, sub等等的指令都需要作廢,這時候就稱為Control Hazard。

下回預告

這次跟大家談到了hazard的類型,下次會跟大家說明怎麼解決hazard。不知道聰明如你有沒有想到什麼簡單的解決方式呢?

上一篇 下一篇
Pipeline 在Hazard尋求解法是否搞錯了什麼

BIOHAZARD

跟大家補充一個小故事,BIOHAZARD這個字,其實就是我們熟悉的惡靈古堡系列,不過因為美國紐約有一個樂團已經把這個字註冊為樂團名字,所以歐美版本就使用了現在大部份人熟悉的Resident Evil。

臺灣使用了就是歐美版,聽說中國大陸跟香港則繼續使用BIOHAZARD。

BIOHAZARD RESIDENT EVIL

上一篇
Day-7 Pipeline
下一篇
Day-9 在Hazard尋求解法是否搞錯了什麼
系列文
杰哥的考研紀錄30

尚未有邦友留言

立即登入留言