[理工] 104 交大 計組 題組C

看板Grad-ProbAsk作者 (Orange)時間9年前 (2017/01/17 11:42), 編輯推噓2(2048)
留言50則, 3人參與, 最新討論串1/1
我知道之前有人討論過這一題,但我整個control hazard 想了很久實在還是有點搞不懂 http://i.imgur.com/y0I9fRO.jpg
http://i.imgur.com/jNyZczo.jpg
像這一題,我搞不太懂CC4究竟發生什麼事@@ sub不是在CC4時MEM stage才把結果forwarding回去嗎,那同時and指令應該已經往前衝到ID stage,此時發IF.flush不是只能清空新抓出來的or指令? 不好意思資質愚鈍…還麻煩大家了,感謝! ----- Sent from JPTT on my HTC_M8Sy. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.246.141.37 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1484624550.A.F43.html

01/17 11:59, , 1F
所以beq跟and要待在原地等sub
01/17 11:59, 1F

01/17 12:01, , 2F
一樣的指令要在同個位置待兩週期
01/17 12:01, 2F

01/17 12:01, , 3F
or不能進來
01/17 12:01, 3F

01/17 12:02, , 4F
之前也有一篇在討論這題 也是沒結果
01/17 12:02, 4F

01/17 12:03, , 5F
只能說原地等待跟flush stall的概念不太一樣
01/17 12:03, 5F

01/17 12:04, , 6F
但差別在哪我也不清楚
01/17 12:04, 6F

01/17 12:05, , 7F
反正知道beq前面有rtype要暫停一次就可以解這題了
01/17 12:05, 7F

01/17 12:40, , 8F
非常感謝s大~我大概懂了
01/17 12:40, 8F

01/17 12:51, , 9F

01/17 12:52, , 10F
試著用推的 不要用記的 先腦海想著forwarding 的偵測
01/17 12:52, 10F

01/17 12:53, , 11F
碼,與這題不同的是 ID 在一般而言的pipeline 無法被
01/17 12:53, 11F

01/17 12:53, , 12F
偵測( 這裡指的是你所看過的任何一張pipeline圖 )
01/17 12:53, 12F

01/17 12:54, , 13F
它的 forwarding 表示 絕對無法被 提前於ID 的 beq
01/17 12:54, 13F

01/17 12:55, , 14F
給使用 這個原因主要是因為 聖經本 沒有將forwarding
01/17 12:55, 14F

01/17 12:56, , 15F
的線路全部畫完
01/17 12:56, 15F

01/17 12:56, , 16F
然後,真的無法嗎 ? 絕對可以
01/17 12:56, 16F

01/17 12:57, , 17F
這題交大考題 很好心的寫了一段 在題目一開始的(iii)
01/17 12:57, 17F

01/17 12:58, , 18F
如我圖所示的 : 強調forwading 可解決 ID 的Data
01/17 12:58, 18F

01/17 12:58, , 19F
hazard 這代表著 : 我們平常將值 forwarding 到exe
01/17 12:58, 19F

01/17 12:59, , 20F
供以 EXE STAGE 做正確的值 ;同個道理 我們也可以將
01/17 12:59, 20F

01/17 12:59, , 21F
forwarding 提前將正確的值於 ID 使用
01/17 12:59, 21F

01/17 13:00, , 22F
這個大前提了解之後,這題就很好做了
01/17 13:00, 22F

01/17 13:01, , 23F
SUB F D E M W
01/17 13:01, 23F

01/17 13:01, , 24F
BEQ F D D E M W
01/17 13:01, 24F

01/17 13:02, , 25F
依上述所示 我們可以想像 (sub)D&(beq)E 時如同一般
01/17 13:02, 25F

01/17 13:03, , 26F
偵測完後 將正確值拉回 D 做運算 故要停一個cycle
01/17 13:03, 26F

01/17 13:06, , 27F
剩下比較有爭議的題目大概就是這題組的最後一題了QQ
01/17 13:06, 27F

01/17 13:07, , 28F
= = 我上面 忘記空格
01/17 13:07, 28F

01/17 13:08, , 29F
SUB F D E M W
01/17 13:08, 29F

01/17 13:09, , 30F
BEQ F D D E M W
01/17 13:09, 30F

01/17 13:10, , 31F
(sub)D&(beq)M
01/17 13:10, 31F

01/17 13:14, , 32F
https://goo.gl/9bA3hu 補上完整 pipeline 圖(?
01/17 13:14, 32F

01/17 13:20, , 33F
想補充一下我覺得會stall 一cycle 的原因
01/17 13:20, 33F

01/17 13:20, , 34F
我認為是因為 一般而言 forwarding 會偵測的時候是
01/17 13:20, 34F

01/17 13:21, , 35F
D/E 的情況。 但因為在BEQ往前拉到ID時,它必須在ID
01/17 13:21, 35F

01/17 13:22, , 36F
偵測 & 運算且決定是否taken
01/17 13:22, 36F

01/17 13:22, , 37F
因此它 必須Stall 1 cycle 等待 上一個指令到達mem
01/17 13:22, 37F

01/17 13:23, , 38F
or wb stage 才能在 ID 中決定是否為跳 (不知不覺就
01/17 13:23, 38F

01/17 13:23, , 39F
打了快兩面了 QQ)
01/17 13:23, 39F

01/17 13:25, , 40F
而 Load use 則必須 等待上一個指令到達 WB 才能將
01/17 13:25, 40F

01/17 13:26, , 41F
其 forwarding 到 ID 故stall 2 cycle
01/17 13:26, 41F

01/17 13:26, , 42F
雖然我覺得這樣子根本沒用到 forwarding
01/17 13:26, 42F

01/17 13:27, , 43F
有啦@_@ 當 memory 不允許 instruction or data path
01/17 13:27, 43F

01/17 13:27, , 44F
同時 access 時 forwarding 就很好用了 QQ~
01/17 13:27, 44F

01/17 14:00, , 45F
非常感謝k大的詳細解釋~所以題目在(iii)的意思就是
01/17 14:00, 45F

01/17 14:00, , 46F
,sub在運算完之後的值(在MEM stage)可以直接forward
01/17 14:00, 46F

01/17 14:00, , 47F
ing回ID stage,然後beq因為要等sub forwarding的值
01/17 14:00, 47F

01/17 14:00, , 48F
,所以才要stall一個clock這樣嗎~
01/17 14:00, 48F

01/17 14:15, , 49F
我的理解是這樣子@@~ 只不過聖經本沒寫所以我只能從
01/17 14:15, 49F

01/17 14:15, , 50F
張凡課本所提到的結論以及自己的想法做推論
01/17 14:15, 50F
文章代碼(AID): #1OVPAcz3 (Grad-ProbAsk)