在 CPU 中,存在多種不同的資料風險(Hazard),這些風險可能會影響指令的執行順序或導致指令的停滯。
常見的Hazard種類有:
- 結構風險(Structural Hazards):當多個指令同時要求同一個硬體結構時,可能會發生結構風險,總之意思就是硬體資源不夠。例如,當一個指令正在寫入記憶體但同時另外一個指令需要訪問相同記憶體的位置。
- 控制風險(Control Hazard):有分支條件(條件式或迴圈)時,由於指令的執行取決於運算時的條件,因此在分支目標確定之前,流水線可能會有停滯,這樣停滯的行為會導致流程耗費時間也會降低處理器的效能。解決方法:處理器通常使用分支預測(Branch Prediction)技術來預測分支指令的執行方向,以提前繼續執行流水線(Pipeline)中的後續指令。
- 資料風險(Data Hazard):當一個指令需要等待前一個指令的結果才能進行,可能導致流水線的停滯。資料風險分為三種類型:
- 輸出相依性:當後續指令依賴前一個指令的計算結果時,可能導致資料風險。
- 輸入相依性:當前一個指令正在寫入後續指令需要的資料時,可能導致資料風險。
- 控制相依性:當後續指令的執行取決於前一個分支指令的結果時,可能導致資料風險。
解決方法-資料前推(Data Forwarding):資料在執行指令之前,該資料 從產生位置直接傳遞到需要使用資料的指令。可以在硬體層面 上,通過多儲存位置來儲存中間結果。