在計算機體系結構中,負載-使用延遲的效能如何?
在本節中,我們關注流水線載入/儲存處理的重要效能指標,例如負載-使用延遲。負載-使用延遲的值是載入流水線執行的特徵屬性。較大的負載-使用值會嚴重影響處理器效能,尤其是在超標量處理器中。
負載-使用延遲源於負載-使用依賴性,一種RAW依賴性。如果載入指令的結果不能及時地被流水線用於後續指令,則負載-使用依賴性會導致負載-使用延遲。
負載-使用延遲可以透過靜態或動態方式處理。如果使用靜態解析,編譯器會嘗試在載入指令和使用者指令之間插入儘可能多的獨立指令以補償負載延遲。
MIPS 計算機(例如 R2000 和 R3000)是透過靜態排程處理負載-使用延遲的示例。這裡假設編譯器在所有載入指令之後插入一個負載延遲槽。此槽由編譯器使用獨立指令或 NOP 填充。
處理負載-使用延遲的另一種最常用的技術是動態排程。這裡,專用硬體負責檢測和解決可能損害順序一致性的危險。通常,負載-使用延遲的值取決於快取的主要佈局和實現。
大多數當前處理器具有一個週期的負載-使用延遲,而少數處理器具有兩個或三個週期,如表中所示。一些處理器消除了負載-使用延遲,例如 Intel i486、奔騰、SuperSparc 和 R8000。
當前處理器的負載-使用延遲值(以週期為單位)
0 | 負載-使用延遲(以週期為單位) 1 | 2 或 3 |
i486 | MIPS X | MC 88100 |
奔騰 | R2000、R3000 | R4000 |
SuperSparc | R6000 | α21064(3 個週期) |
R8000 | PA 7100、PA 7200 Power1(RS/6000)PowerPC 601、603 Power2 | α21164(2/3 個週期) |
對於傳統的標量處理器,一個週期的負載-使用延遲是可以接受的,因為並行最佳化的 ILP 編譯器通常會找到獨立指令來填充載入後的槽。
然而,對於指令發出率為 2 或更高的超標量處理器,編譯器為每個載入指令找到兩個、三個、四個或更多獨立指令的可能性要小得多。因此,隨著超標量處理器中指令發出率的增加,負載-使用延遲成為瓶頸。
根據這些結果,負載-使用延遲從一個週期增加到兩個或三個週期會大大降低加速效果。例如,在 4 的發出率下,與 1 的負載-使用延遲相比,2 的負載-使用延遲會使效能降低約 30%。儘管這些數字僅對某些引數集有效,但可以預期這種一般的趨勢。