Re: [理工] [計組]管線危障
※ 引述《okjn816 (蔡包)》之銘言:
: 可是如果照我自己的解讀,那下面這題的我就看不太懂了
: http://ppt.cc/gyG4
: 以上是我的問題有請版上各位神人幫忙我解答
: 非常感激!!!
1 add $1 $1 $2
2 add $1 $1 $3
3 add $1 $1 $4
if(MEM/WB.RegWrite and (MEM/WB.RegisterRd≠0)
and not(EX/MEM.RegWrite and (EX/MEM.RegisterRd≠0)
and(EX/MEM.RegisterRd=ID/EX.RegisterRs))
and(MEM/WB.RegisterRd=ID/EX.RegisterRs)) ForwardA=01
這個是張凡課本裡面的程式碼
這邊是hazard混亂的情形,line1跟line2、3都有data dependence。首先我們要知道程式碼
是依序執行,很明顯的line3當中$1的資料來源是來自於line2的結果,並不是由line1提供
所以line1的$1是不能Forwarding給line3,若Forwarding給line3,line3的結果是一定錯。
以下將MEM hazard偵測碼依照判斷式分別說明:
1.首先檢察line1在MEM/WB是否要寫入Reg
2.接著檢查MEM/WB目的暫存器是否不等於0,為何要不等於0原因如下。
add $0 $3 $4
sub $2 $1 $0
今天sub就是要把$1跟0相減,不能把add的結果Forwarding給sub。
如果add Forwarding 給sub,sub整個式子就會錯誤,跟預期sub想要做$1與0相減就不符
3.再來依照前面的敘述,檢查line2跟line3有無data hazard,如果有data hazard就是代表
line1不能 Forwarding給line3,否則line3的結果就會錯誤。
所以(EX/MEM.RegWrite and (EX/MEM.RegisterRd≠0)
and(EX/MEM.RegisterRd=ID/EX.RegisterRs))
就是檢查line2跟line3有無data hazard,也就是用EX hazard的程式碼。
課本是 EX/MEM.RegisterRd≠ID/EX.RegisterRs,但張凡改成=,其實都會對。
前面加not目的是做互斥,就是代表當line2跟line3有EX hazard時,line1跟line3自然就
不會有hazard。兩者不可能同時存在。
4.最後再判斷line1跟line3是否有hazard,所以當Line1的目的暫存器Rd與Line3的來源暫存
器Rs相同,就代表有Data hazard。
如果當上面的條件全都成立,Forwarding unit就會把ForwardA設01,Line1就會把結果
Forwarding到line3,去拯救line3。
至於圖片中你們老師是直接把最強的條件當做判斷,直接檢查line2跟line3是否有資料相依
,只要EX/MEM.RegisterRd≠ID/EX.RegisterRs成立,就代表line2跟line3沒有資料相依。
接著就會直接判斷line1跟line3是否有資料相依。
總結:
Rt跟Rs都一樣,綠色部分就我認為其實是相等的,不過你們老師有簡化白算盤的版本
套張凡一句話「一切都照課本為主,老師沒這麼多的時間檢查考卷是不是寫錯。只要
長的像課本老師就會給分;若跟課本不一樣,老師還要檢查,整個心
情就會不好,考卷就有可能越改越嚴。
所以建議是以課本為主
以上,有錯歡迎大家請指證
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.140.98
→
08/16 12:37, , 1F
08/16 12:37, 1F
→
08/16 16:59, , 2F
08/16 16:59, 2F
→
08/16 17:00, , 3F
08/16 17:00, 3F
→
08/16 17:49, , 4F
08/16 17:49, 4F
推
08/18 02:21, , 5F
08/18 02:21, 5F
推
12/21 00:15, , 6F
12/21 00:15, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):