看板 Grad-ProbAsk 關於我們 聯絡資訊
各位大大安安 計組有幾個小問題想請教一下 假設 1. add t1,s1,s2 2. add t2,t1,s0 以上兩個指令有data hazard,再有forwarding情況下,第一個指令會在ALU計算完,到下 個cycle,經過EXE/MEM Pipeline register後回饋到EXE再經過forwarding unit來控制MU X給出正確的t1,計算出第二個指令正確的t2 那在這個正確的t1尚未回饋到EXE,在同一個cycle下,是否也會先做一次錯誤的t1,s0的A LU相加呢? 那這樣整個execution time不就被拉長了嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.146.245 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1506053963.A.325.html
sarsman: 不會,因為clock time是根據執行時間最久的stage來設定09/22 12:42
clock time 不會變沒錯,我指的是execution time~
sarsman: 就算t1還沒算出來,第二行指令也會被卡在DE/EX之間,等到09/22 12:45
sarsman: 下個clock來了才會跟t1一起輸入EX做運算09/22 12:45
我會這樣覺得是因為張凡上冊p527的第四小題答案有提到,而且如果卡在ID/EX Pipeline register的話 forwarding 似乎就沒辦法在當下的那個clock來做 forwarding 的判斷 ※ 編輯: leoone (1.164.146.245), 09/22/2017 12:55:26
sarsman: 考古7第四小題?
09/22 13:19 對~ 因為他有說from beginning 但那個cycle 是NOP在 EXE 但add的rs rt 一樣會流到E XE的MUX 進到ALU 但ALU的control signal為0所以不作用,不知道這樣理解這題對不對XD ※ 編輯: leoone (1.164.146.245), 09/22/2017 13:43:35 ※ 編輯: leoone (1.164.146.245), 09/22/2017 13:44:27
sarsman: 我想法是那一階段的九個控制信號都被flush成0了,故為NOP09/22 14:38
sarsman: *第6 cycle時的EXE 09/22 14:43
根據白算盤來看,只有control signal會清成0不會整根pipeline register都清掉,所以 還是會有資料流過去,只是都會卡在control signal為0的input前面 ※ 編輯: leoone (1.164.146.245), 09/22/2017 14:47:58
ken52011219: 你要重考@@?09/22 14:51
K大 對QQ 都只找到3年的教授XDD
sarsman: 的確資料一樣會流進ALU,只是因控制信號都變0而無影響09/22 14:55
sarsman: 不過這個題目的情況是stall了一個cycle,才有這種狀況吧09/22 14:57
sarsman: lw緊接add、add緊接beq才需要stall 09/22 14:59
sarsman: 還有lw緊接beq,要stall兩個cycle09/22 15:00
※ 編輯: leoone (49.217.116.4), 09/22/2017 15:03:57 S大 這題最後張凡改的答案感覺還是怪怪的 Src1跟2的 初始應該是跟著cycle5的穩態 但 張凡給的感覺是 cycle6lw 跟add已經穩態後的control signal@@ ※ 編輯: leoone (49.217.116.4), 09/22/2017 15:07:04
ken52011219: 有題目嗎 09/22 15:06
leoone: https://i.imgur.com/J4mFM3w.jpg 09/22 15:08
sarsman: HYVp.jpg 09/22 15:08
leoone: https://i.imgur.com/VnvpMLN.jpg 09/22 15:09
sarsman: http://i.imgur.com/wAoHYVp.jpg 09/22 15:09
leoone: K大 第四題~ 09/22 15:09
ken52011219: 我太久沒碰可能有點生疏所以會講錯 QQ 09/22 15:23
ken52011219: 當第4 Cycle 時 lw & add 到達 ID & EXE 時 09/22 15:23
ken52011219: 位於ID 的「 hazard Detection」偵測到會data hazard 09/22 15:24
ken52011219: 因此此時Stall指令執行(flush all signal=xx) 09/22 15:25
ken52011219: 此時已經於 4th cycle 末 ~ 5 cycle 初,因此就只考 09/22 15:26
ken52011219: 慮 5th Cycle 被 stall (EXE signal=XX) 09/22 15:27
ken52011219: 而到了 6th Cycle 則藉由forwarding signal就恢復原 09/22 15:30
ken52011219: 樣了 09/22 15:30
ken52011219: 講錯 (ID Signal = XX) 09/22 15:33
ken52011219: 簡單來看,被Stall的stage 是第一個ID ,其Signal是 09/22 15:34
ken52011219: 被暫停的,而第二個ID 才是正常執行,不知道是不是 09/22 15:35
ken52011219: L大對這個地方有疑慮@@? 09/22 15:35
ken52011219: 想稍微更正一下 forwarding 可能會被誤會的說法 09/22 15:36
ken52011219: 應該說 hazard detection 偵測到 data hazard的條件 09/22 15:37
ken52011219: 已經消失了,故signal 由1改0 而不是靠著forwarding 09/22 15:38
ken52011219: signal 才恢復正常 09/22 15:38
leoone: 咦 k大說的data hazard 應該是第3跟4的instruction吧XD 09/22 16:00
leoone: 那應該是stall是在5被hazard dection才對? 09/22 16:00
ken52011219: 我怎麼記得 Hazard dection 條件式是IF & ID @@ 09/22 16:07
ken52011219: 這樣不會拖到 lw 進 alu 時才被dection到 09/22 16:08
ken52011219: detection XD 09/22 16:09
leoone: 算是在ID跟EXE 偵測的 EXE的lw跟ID的instruction做hazard 09/22 16:12
leoone: detection IF的時候 還不知道哪個reg啦XDD 09/22 16:12
ken52011219: ID/IF pipeline register & ID/EXE pipeline regist 09/22 16:21
ken52011219: 還沒進 EXE stage 剛剛稍微查了一下 09/22 16:21
ken52011219: 4th cycle(lw: ID stage) 偵測到Data hazard 09/22 16:29
ken52011219: add: IF stage 09/22 16:31
ken52011219: 5th cycle ,stall ID stage(signal=xx)讓lw先跑 09/22 16:32
ken52011219: 6th cycle hazard Detection沒偵測到Data hazard 09/22 16:32
ken52011219: 因此接收IF/ID pipeline register的暫存值(含signal) 09/22 16:33
ken52011219: 執行add 在 ID stage中未完成的工作 09/22 16:34
leoone: K大我想問另一個問題! hazard detection跟forwarding uni 09/22 16:52
leoone: t都是在pipeline register拉出所需的值嗎? 而不是在stage 09/22 16:52
leoone: 的線路上? 09/22 16:52
ken52011219: 對,它們都是從pipeline reg. 獨自拉出的值 09/22 16:55
leoone: 囧 到現在才知道 看圖一直以為是“順便”從stage拉一條線 09/22 17:14
leoone: 到unit上的... 09/22 17:14