2015-06-04 63 views
2

在MIPS體系結構與流水線和轉發:MIPS中是否存在執行存儲數據隱患?

add $s0, $t1, $t2 
sw $s0, 0($sp) 

add指令將具有結果準備在步驟3(執行動作),但是我推定該SW指示要在步驟2(指令解碼&寄存器中的結果讀)。

有一個解決的鍛鍊書中計算機組織與設計由David A.帕特森:查找下面的代碼段的危害和重新排序的說明,以避免任何管道攤位

lw $t1, 0($t0) 
lw $t2, 4($t0) 
add $t3, $t1,$t2 
sw $t3, 12($t0) 
lw $t4, 8($01) 
add $t5, $t1,$t4 
sw $t5, 16($t0) 

解決方案:

lw $t1, 0($t0) 
lw $t2, 4($t1) 
lw $t4, 8($01) 
add $t3, $t1,$t2 
sw $t3, 12($t0) 
add $t5, $t1,$t4 
sw $t5, 16($t0) 

在它正確識別負載使用的危險,並相應地重新排列碼,但有一個執行店內危險以及解決?

+2

負載使用危險源於負載需要兩個週期,而其他簡單指令(不包括例如乘法)只需要一個週期。簡單指令的結果可以被轉發到下一條指令的執行階段,所以即使對於基址寄存器值也沒有危險(例如'add $ t2,$ t2,1; sw $ t4,0($ T2)')。對於商店,因爲地址生成,緩存索引和標籤檢查必須在實際寫入存儲數據之前完成,甚至可以容忍更長的延遲;直到存儲指令的寫回階段才需要存儲數據。 –

回答

0

讓我們考慮一個激活轉發的MIPS。 我認爲在這種情況下不會發生任何危險:實際上,ADD指令是一種整數運算,在MIPS架構中只需要一個時鐘週期。 看看這個圖:

ADD $t3,$t1,$t2 IF ID EX MEM WB 
SW $t3,12($t0)   IF ID EX MEM WB 

正如你可以看到沒有發生危險,因爲SW指示兩個時鐘週期後,所儲存的數據,因爲結果放在$ T3的ADD。

實際上,在類似的情況下,只有當單元是多週期單元時(如果它需要多於一個時鐘週期來計算數據),纔會出現危險。 看廣告這個例子中,其中,所述指令ADD.D使用需要4個時鐘週期來執行的計算的浮點加法器:

ADD.D F2,F4,F5  IF ID A0 A1 A2 A3 MEM WB 
S.D F2,somewhere  IF ID EX X0 X1 X2 MEM WB 

X0和X1是RAW檔位而X2是結構檔位:在前一種情況SD必須等待ADD.D完成;在後者中,MIPS不能在相同的時鐘週期訪問存儲器兩次,因此會發生結構失速。

相關問題