流水線中數據相關的理解(RAW、WAR和WAW)

計算機組成原理一書中指出流水線中有三種數據相關:寫後讀(RAW)相關、讀後寫(WAR)相關、寫後寫(WAW)相關。

那麼這裏該怎麼理解這個A(after)呢?比如說第一條指令中讀取了X,第二條指令中要寫X,本來應該先讀再寫,但是由於流水線的存在,發生了第二條指令寫完後第一條纔讀的情形,也就是發生了先寫後讀,稱之爲讀後寫(WAR)相關。
這裏的重點是:前後有兩條指令,分爲三種情況:

  1. 第一條指令是讀操作,第二條指令是寫操作,那麼只可能發生讀後寫(WAR)相關
  2. 第一條指令是寫操作,第二條指令是讀操作,那麼只可能發生寫後讀(RAW)相關
  3. 第一條指令是寫操作,第二條指令也是寫操作,那麼只可能發生寫後寫(WAW)相關

舉三個例子:

  1. LDA R1, A    ;M(A)->R1,M(A)是存儲單元
    ADD R2, R1   ;(R2)+(R1)->R2
    分析:第一條指令向R1中寫入了新值,第二條指令讀取了R1中的值,先寫後讀,寫後讀(RAW)相關。

  2. ADD R3, R4    ;(R3)+(R4)->R3
    MUL R4, R5    ;(R4)*(R5)->R4
    分析:第一條指令讀取了R4中的內容,第二條指令向R4中寫入了新值,先讀後寫,讀後寫(WAR)相關。

  3. LDA R6, B    ;M(B)->R6,M(B)是存儲單元
    MUL R6, R7    ;(R6)*(R7)->R6
    分析:第一條指令向R6中寫入了新值,第二條指令也向R6中寫入了新值,先寫後寫,寫後寫(WAW)相關。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章