大家好,又見面了,我是你們的朋友全棧君。
1、多個任務在同一時間周期内争用同一個流水段(資源沖突)
例如,假如在
指令流水線
中,如果資料和指令是放在同一個儲存器中,并且通路接口也隻有一個,那麼,兩條指令就會争用儲存器;在一些算數流水線中,有些運算會同時通路一個運算部件。
2、資料依賴(資料相關)
比如,A運算必須得到B運算的結果,但是,B運算還沒有開始,A運算動作就必須等待,直到A運算完成,兩次運算不能同時執行。
3、 條件轉移的影響(條件轉移)
如果第一條指令是一個
條件轉移指令
,那麼系統就會不清楚下面應該執行那一條指令。這時就必須等第一條指令的判斷結果出來才能執行第二條指令。條件轉移所造成的流水線停頓甚至比相關還要嚴重的多。
越是長的流水線,相關和轉移兩大問題也越嚴重,是以,流水線并不是越長越好,超标量也不是越多越好,找到一個速度與效率的平衡點才是最重要的。
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/171380.html原文連結:https://javaforall.cn