MIPS 體系和CISC體系結構有什么不同
(1)延遲分支:MIPS CPU的流水線結構意味著當一個跳轉/分支指令到達執(zhí)行階段產生新的程序計數器值時,跟在跳轉指令后的指令已經開始了,該體系結構并不是丟棄這部分有潛在用途的工作,而是要求緊跟分支后的指令總是在分支目標指令之前執(zhí)行。緊接分支指令后的指令位置稱為分支延遲槽。
要是硬件沒有特殊處理,是否分支的決定以及分支的目標地址,就會在ALU流水階段結束時得到——到此時,如圖1.3所示,已經太晚了,甚至在下下一個流水線槽都來不及提供一個指令地址。
但是分支指令的重要性足以給予特殊處理。從圖1.3所示,提供了一條經ALU的特殊路徑可以讓分支目標地址提早半個周期到達。連同取指階段多出來的半個時鐘周期的偏移,就剛好來得及去除分支目標指令作為下下一個指令。這樣硬件就會運行分支指令、接著運行分支延遲槽指令、然后是分支目標指令——再沒有其它的延遲。
編譯器系統或者匯編程序應該考慮甚至利用分支延遲;結果是通常有可能通過適當安排使得延遲槽中的指令做些有用的工作。經??梢园褎e處的指令一道延遲槽中。
對于條件分支問題會有點復雜,分支延遲指令應當對兩條分支路徑都無害。實在找不到有用的事情可做時,延遲槽中填入一條nop指令。除非明確要求,否則許多MIPS匯編器都對程序員隱藏這個古怪的特性。
圖1.4:流水線和加載延遲
(2)數據加載延遲:流水線的另一個后果就是一條加載指令的數據在下一條指令的ALU階段的開始才從高速緩存/內存系統到達——所以在下一條指令中不能使用加載的數據。
緊接加載指令后的指令位置稱為加載延遲槽,一個優(yōu)化的編譯器將試圖用它做些有用的事情。匯編器對程序員隱藏這一點,但可能插入一條nop指令。
在現代的MIPS CPU上,加載結果是互鎖的:如果你試圖過早使用結果,CPU將停下來等待數據到達。但是早期的MIPS CPU沒有互鎖,在延遲槽中試圖使用數據將導致無法預料的結果。本文引用地址:http://www.ex-cimer.com/article/151202.htm
評論