------ 文章開始 ------


 作者  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