計算機組成原理一書中指出流水線中有三種數據相關:寫後讀(RAW)相關、讀後寫(WAR)相關、寫後寫(WAW)相關。
那麼這裏該怎麼理解這個A(after)呢?比如說第一條指令中讀取了X,第二條指令中要寫X,本來應該先讀再寫,但是由於流水線的存在,發生了第二條指令寫完後第一條纔讀的情形,也就是發生了先寫後讀,稱之爲讀後寫(WAR)相關。
這裏的重點是:前後有兩條指令,分爲三種情況:
- 第一條指令是讀操作,第二條指令是寫操作,那麼只可能發生讀後寫(WAR)相關
- 第一條指令是寫操作,第二條指令是讀操作,那麼只可能發生寫後讀(RAW)相關
- 第一條指令是寫操作,第二條指令也是寫操作,那麼只可能發生寫後寫(WAW)相關
舉三個例子:
- LDA R1, A ;M(A)->R1,M(A)是存儲單元
ADD R2, R1 ;(R2)+(R1)->R2
分析:第一條指令向R1中寫入了新值,第二條指令讀取了R1中的值,先寫後讀,寫後讀(RAW)相關。 - ADD R3, R4 ;(R3)+(R4)->R3
MUL R4, R5 ;(R4)*(R5)->R4
分析:第一條指令讀取了R4中的內容,第二條指令向R4中寫入了新值,先讀後寫,讀後寫(WAR)相關。 - LDA R6, B ;M(B)->R6,M(B)是存儲單元
MUL R6, R7 ;(R6)*(R7)->R6
分析:第一條指令向R6中寫入了新值,第二條指令也向R6中寫入了新值,先寫後寫,寫後寫(WAW)相關。