延遲分支的設計空間是什麼?
有兩種可能的方法來擴充套件基本概念,例如增加延遲槽的倍數或在延遲槽中引入指令的取消。大多數體系結構只提供一個延遲槽。一些體系結構提供了多個延遲槽,例如 MIPS-X。
填充更多延遲槽的另一種可能性是引入取消(也稱為無效或壓縮)。基本思想是在使用延遲槽中引入選項,這允許填充比基本方案中更多的延遲槽。可以引入四種不同型別的取消。這四種變體透過在已取和未取路徑中延遲槽是否被取消來區分。
變體如下:
無取消(帶執行的分支)
如果分支未取,則取消延遲槽(分支或跳過)
如果分支已取,則取消延遲槽(帶跳過的分支)
始終取消
第一個變體是指定的帶執行的分支。它等效於基本延遲分支方案。分支或跳過方案允許在分支未取時取消延遲槽。它可以用於向後條件分支,將指令從迴圈體內部移動到延遲槽中。
帶跳過的分支變體允許在分支已取時取消延遲槽。這對於向前條件分支很有用,可以將指令從順序路徑重新定位到延遲槽中。最後,始終取消方案允許引入可選的延遲分支。
具有取消功能的體系結構通常根據選擇提供上述兩種可能性,如表所示。值得注意的是,在 1980 年代後半期出現的多數主流 RISC 體系結構中,已以某種形式引入了取消以提高效能。例如,HP PA、SPARC 和 MC 88100 體系結構。
具有延遲分支的體系結構提供的可能的取消選項
帶執行的分支 | 分支或跳過 | 帶跳過的分支 | 始終取消 | 延遲槽的倍數 | ||
---|---|---|---|---|---|---|
延遲槽中指令的取消 | ||||||
IBM 801(1978) | X | X | 1 | |||
MIPS-X(1986) | X | X | 2 | |||
HP PA(1986) | X | X1 | X2 | 1 | ||
SPARC(1987) | X | X | 1 | |||
MC 88100(1988) | X | X | 1 | |||
i860(1988) | X | X | 1 |
- 向後分支
- 向前分支
大多數提供擴充套件延遲分支方案的體系結構除了基本方案(帶執行的分支)之外,還提供了分支或跳過選項。這通常是透過為每個分支指令提供兩種不同的形式來完成的,一種不帶取消,另一種帶某種型別的取消。
這些形式通常在組合語言語法中透過不同的助記符(如 MIPS-X 中的 BNZ 和 BNZX)或可選後綴(如 MC 88100 系列中的 n)來區分。
它還提供了取消無條件分支延遲槽中指令的可能性,例如在 HP PA、SPARC 和 MC 88100 中。