Re: [理工] [計組] RAW WAR WAW...

看板Grad-ProbAsk作者 (JS)時間15年前 (2010/05/06 07:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
Three data dependencies: ================================================ RAW = read after write ---- = True dependency | << 兩者相同?? = read before write ---- read after write =/= read before write (read before write 應該像是 WAR) 所謂的True dependency,指的是read after write,且只有這種才算 這類的dependency是會造成程式結果錯誤的情形 發生的情形就是後面的資料會參考到前面指令的結果 而前面的指令又尚未完成,因此消極的作法就是等有結果後再接續後面的運作 比較常見的解決方式就是forwarding ================================================= WAR = write after read ------ = Anti dependency | ==? = write before read ---- write after read =/= write before read (write before read 應該像是 RAW) WAR 和 WAW 只會出現在允許out-of-order的架構下 因為指令完成的順序可能不會依照指令出現的先後 因此後面的指令有可能會比前面的指令先行完成 WAR 和 WAW 都是因為暫存器名字使用相同, 但是後面的指令卻比前面先完成的case Ex : I0: R4 <- R1 + R3 (後讀) I1: R3 <- R1 + R2 (先寫) 正常來說,I0執行完才會執行I1 但是因為允許out-of-order的情形下 I1如果一下子就做完了就先寫入結果 而I0拖到I1都已經覆蓋掉原本R3的data, 這時候才去抓R3的data就勢必會是錯誤的結果 ================================================== WAW =write after write ---- =Output dependency | = 這看起來就可能一樣 =write before write ---- 只不過我比較沒聽說過 XXX before OOO 這類的說法 這和WAR的例子很相似,也是出現在可out-of-order的架構下 一樣是後面的指令比前面的指令先完成的case Ex : I0. R0 <- R1 + R2 (後寫) I1. R0 <- R3 + R4 (先寫) I2. R6 <- R0 + R5 (最後讀到I0) 要使程式結果是正確的,I2中的R0必須是I1所運算完成後寫完的data 但是如果在out-of-order的情形下 I0 做的比較緩慢 I1 一下子就完成了 就會變成I1先寫入後,I0去覆蓋掉I1的data 之後要參考到R0暫存器的指令都是拿到I0算的data而不是I1算的data ======================================================== WAW, WAR 都是暫存器不夠用,使用到相同名字下,而且又是不照順序完成的case 所以傳統的pipeline 是可以不被考慮的 而他的解決方式就是讓暫存器換個名字(renaming)就OK了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.134.48
文章代碼(AID): #1BuWLkg_ (Grad-ProbAsk)
文章代碼(AID): #1BuWLkg_ (Grad-ProbAsk)