------ 文章開始 ------
作者 sitos (麥子) 看板 Grad-ProbAsk 標題 Re: [理工] [計組] WAR 時間 Tue Jul 19 13:46:13 2011 ─────────────────────────────────────── ※ 引述《privatewind (傷神客)》之銘言: : ※ 引述《mqazz1 (無法顯示)》之銘言: : : 1 add $s1, $2, $3 : : 2 sw $s2, 0($1) : : 3 lw $1, 4($2) : : 4 add $2, $2, $1 : : 請問為什麼WAR dependence有(2,4)? : : sw不是store word嗎 這樣會read到$s2嗎? : : 謝謝 有點久遠,不是很確定是否正確,但這題目裡面如果把 s 都拿掉 ($s1 -> $1, $s2 -> $2),是不是就能夠理解了? 1 add $1, $2, $3 2 sw $2, 0($1) 3 lw $1, 4($2) 4 add $2, $2, $1 store instruction 把 $2 的 value 寫到 0($1) 這個位置, 所以 $2 是被 read ,接下來在 add $2 會被 write , 所以 (2, 4) 之間有 WAR dependency 。 : (2,4)真的有WAR嗎?XD : 先講一下我認為的WAR是什麼意思: : WAR是指write after read,以字面上來說,這並不會有什麼問題, #1 : 但是套到multiple issue時,因為指令順序可能打亂,就會造成原本 一般來講 dependency 是不需要考慮 pipeline 跟 multiple issue 的。 所謂的 dependency 是 program 的特性,只和程式本身有關, 跟所採用的硬體架構無關,所以根本不用去想指令 out-of-order 執行的狀況。 : 的WAR變成RAW,以致出錯,所以WAR是指尚未打亂前的型式,請勿搞混了! #2 : 如上所示 原本的 1, 2, 3, 4的順序變成 1, 4, 2, 3 : 1 add $s1, $2, $3 : 4 add $2, $2, $1 : 2 sw $s2, 0($1) : 3 lw $1, 4($2) : 但是這樣我也看不出哪裡有WAR耶XD : 我怎麼覺得是答案錯了… : #1 最常見的RAW(read after write),會因為pipeline特性,而必須stall或forwarding : #2 請不要以WAR的指令順序去想為何有hazard,很明顯地,WAR是用來描敘打亂前的型式 dependency 和 hazard 是兩個相關,但不一樣的概念。 所謂的 dependency 是在程式裡面兩個指令間的關係,通常是指, 若是這兩個指令交換執行的順序就有可能造成錯誤的情況。 而 hazard 則是當特定的程式在特定的硬體上執行,造成無法同時的情況。 而程式有 dependency 的時候可能會產生上述的 hazard 導致要用 stall 來解。 但有 dependency 不一定會有 hazard ,例如兩個指令相離很遠, 兩者之間仍然有 dependency ,但不會在硬體執行上造成 hazard 。 沒有 dependency 也可能會有 hazard ,例如兩個指令要用同一個 functional unit , 就算兩者沒有 dependency ,但如果處理器只有一個該類型的 functional unit , 還是會造成 hazard 。 雖然很多題目把兩個概念混在一起講,也不會解錯。 但這兩者實際上是不一樣的。 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.31.132 |
------ 文章結尾 ------
[複製網址]
[開新視窗]
[加到我的最愛]
[檢舉短網址]
[QR條碼]
服務條款 - 完全手冊 - 加入會員(免費) - 聯絡偶們 -
© PPT.cc