Altifigence Academy

18 / 24 · 概念

相依性、資源危障與轉送

操作需要先前結果時,比較停頓與轉送。

重疊需要的不只是保留順序

獨立串流運算不讀取先前結果,因此交易可安全重疊。暫存器檔運算單元則可能需要前一操作的結果。在較舊寫入可用前讀取暫存器,會產生寫後讀資料危障。算術本身可能正確,但運算元取樣太早。

從 R1=4 開始。令 I0 執行 R1←R1+3,I1 執行 R2←R1×2。此範例中,I0 在邊緣 0 擷取運算元 4,於接下來週期算出 7,並在邊緣 1 寫入 R1。I1 在邊緣 1 取樣 R1,可能看到舊值 4,產生 R2=8。依序執行應得到 R2=14。必須明確訂定暫存器檔同邊緣讀寫行為。

解法I1 看到的運算元要求
讀取舊 R14此處不正確
停頓至邊緣 27保留操作與伴隨欄位
轉送執行結果邊緣 1 前的 7結果可用且路徑符合時序

轉送在運算結果抵達架構儲存之前,先選取它。只有目的暫存器編號相符並不足夠:產生端必須有效、確實寫入暫存器,且結果已就緒。多個產生端相符時,選擇最近的較舊操作。絕不轉送空泡或已清除操作。

載入的回應尚未到達時,不能靠轉送不存在的資料修正。停頓消費端,同時保留操作碼、來源識別與標籤。決定其他獨立級是否可以繼續。

結構危障發生於兩級同時需要同一個記憶體埠。即使沒有資料相依,也需要仲裁或額外資源。分支會產生控制危障,需要取消錯誤路徑工作。分析各操作等待什麼,以及哪些狀態必須保持。我們的總整實作仍是獨立串流;通過它不代表 CPU 相依性處理已驗證。

自己試試看

R1=4,I0 加三,I1 將結果加倍。比較 I1 讀舊儲存值與正確轉送時的結果。若 I0 是資料尚未可用的載入,應如何處理?

查看解說

讀取舊 4 得到 8;轉送 7 得到 14。載入結果尚未可用時,消費端必須停頓,並保留操作與標籤。目的端相符不能合理化轉送未完成的資料。

此選擇適用於本瀏覽器,隨時可從頁尾變更。