我在解Computer Architecture中pipeline的data hazard題目,有一題指令如下:
I1: LD R1, A
I2: LD R2, B
I3: ADD R2, R2, R1
I4: LD R3, C
I5: MUL R3, R2, R3
I6: ST R3, D
I7: ADDI R1, R1, #1
I8: ST R1, A
I9: STOP
5 stages pipeline: IF → ID → EX → ME → WB
要找出所有的data hazard。
解答如下:
I3 w/ I1: RAW – R1
I3 w/ I2: RAW – R2
I3 w/ I2: WAW – R2
I5 w/ I4: RAW – R3
I5 w/ I4: WAW – R3
I5 w/ I2: RAW – R2
I5 w/ I3: RAW – R2
I6 w/ I5: RAW – R3
I6 w/ I4: RAW – R3
I7 w/ I1: RAW – R1
I7 w/ I1: WAW – R1
I7 w/ I3: WAR – R1
I8 w/ I1: RAW – R1
I8 w/ I7: RAW – R1
紅色部份是我的疑問,不知道是不是我的理解有錯,I8在執行的時候,I1不是早就執行完畢,怎麼還會有Read after write hazard的發生?
我的理解是,要發生RAW,不是應該在距離5個指令內(或5 stages)才有可能發生,以這個為例子,I1在第5個cycle time已經跑完,I8是在第8個cycle time才開始執行,彼此應該不會有hazard的發生吧?