計算機體系結構中載入/儲存指令的流水線執行是什麼?
載入和儲存是頻繁的操作,尤其是在 RISC 程式碼中。在執行 RISC 程式碼時,我們可以預期會遇到大約 25%-35% 的載入指令和大約 10% 的儲存指令。因此,有效地執行載入和儲存指令具有重要意義。
它可以總結在載入或儲存指令期間必須執行的子任務,如圖形所示。
讓我們首先考慮一個載入指令。它的執行始於確定要從中提取資料的有效記憶體地址 (EA)。在這種情況下,像 RISC 處理器一樣,這可以透過兩個步驟完成:獲取引用的地址暫存器並計算有效地址。
在 CISC 處理器中,地址計算可能是一項困難的任務,需要多個後續暫存器獲取和地址計算,例如索引、後增量、相對地址。一旦有效地址可用,下一步通常是將有效(虛擬)地址轉發到 MMU 進行轉換並訪問資料快取。
在傳統的流水線實現中,載入和儲存指令由主流水線處理。這些載入和儲存與其他指令按順序執行,如圖形所示。
在這種情況下,載入/儲存指令所需的地址計算可以由執行階段的加法器執行。但是,每個載入或儲存指令都需要一個指令時隙。
這種低成本實現方法的代表是 MIPS R4000、Pentium(具有兩個整數單元)、PowerPC 601、Power2 和 DEC α 21164(也具有兩個整數單元)。乍一看,令人驚訝的是,當前面的 α 21064 和 α 21064A 提供了一個專用的自主載入/儲存單元時,α 21164 使用了順序載入/儲存處理技術。
載入/儲存指令處理的一種更有效的地址技術是與資料操作並行執行,如圖形所示。這種方法假設存在一個可以自行執行地址計算的自主載入/儲存單元。
越來越多的超標量處理器實現了自主載入/儲存單元。早期設計的示例包括 i80960 CA 或 MC 88110。最近的示例包括 DEC α 21064、DEC α 21064A、PowerPC 603、PowerPC 604、PowerPC 620 和 MIPS R8000。
自主載入/儲存單元可以與其他指令的處理同步執行,也可以解耦執行。在同步執行中,對記憶體(快取)的載入和儲存請求按順序發出。或者,可以將載入和儲存的執行與其他指令的執行解耦以提高效能。這可以透過為掛起的載入和儲存提供佇列並從佇列中執行這些操作來實現。