天天看點

引起cpu流水線阻塞的三個原因

大家好,又見面了,我是你們的朋友全棧君。

1、多個任務在同一時間周期内争用同一個流水段(資源沖突)

例如,假如在

指令流水線

中,如果資料和指令是放在同一個儲存器中,并且通路接口也隻有一個,那麼,兩條指令就會争用儲存器;在一些算數流水線中,有些運算會同時通路一個運算部件。

2、資料依賴(資料相關)

比如,A運算必須得到B運算的結果,但是,B運算還沒有開始,A運算動作就必須等待,直到A運算完成,兩次運算不能同時執行。

3、 條件轉移的影響(條件轉移)

如果第一條指令是一個

條件轉移指令

,那麼系統就會不清楚下面應該執行那一條指令。這時就必須等第一條指令的判斷結果出來才能執行第二條指令。條件轉移所造成的流水線停頓甚至比相關還要嚴重的多。

越是長的流水線,相關和轉移兩大問題也越嚴重,是以,流水線并不是越長越好,超标量也不是越多越好,找到一個速度與效率的平衡點才是最重要的。

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/171380.html原文連結:https://javaforall.cn