看板 Grad-ProbAsk 關於我們 聯絡資訊
http://i.imgur.com/aYEt7M0.jpg 如圖,第七題 想請教的是b小題,關於lw接著bne的stall 因為是在ID判別要不要跳,那這麼一來應該是要把ID延後到lw的ME做完才對吧? 那這樣stall應該是要在cycle6跟7才對吧@@ 像這樣: lw IF ID EX ME WB bne IF XX XX ID EX WB -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.199.149 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1483086776.A.E6E.html ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 16:39:39
Transfat: 啊前面其實有討論到同一題,因為題目一開始表明分支12/30 16:58
Transfat: 預測錯誤(misprediction), 所以bne的IF應該要跟lw的EX12/30 16:58
Transfat: 在同一個cycle12/30 16:58
可以講詳細一點嗎,抱歉因為我爬很久還是搞不太懂>< 分支預測錯誤不就是在ID後把指令Flush為nop,而且不算在Stall裡嗎? 這樣和同一cycle有什麼關係呢? ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 17:06:41
Transfat: 我好像說錯,應該是stall c6,c7沒錯 12/30 18:00
ken52011219: 請寫三個 ID ,dectect是在第一個ID 發生12/30 18:10
但答案是cycle 7, 8 QQ ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 18:11:11
ken52011219: 然後於接下來兩個cycle執行stall12/30 18:11
ken52011219: 但說是stall 其實只是把ID中的指令 留下來兩個cycle12/30 18:12
ken52011219: 小小更正一下 第二個ID 也仍然會執行dectect 並且 if12/30 18:13
ken52011219: 判斷式為true 執行stall12/30 18:13
ken52011219: 這部分為什麼說第二個cycle if判斷式為true 是因為聖 12/30 18:14
ken52011219: 經本只寫了兩種forwarding 判斷式 但其實有四種12/30 18:14
ken52011219: 總而言之,以目前我們所認知的pipeline 無法解決該 12/30 18:15
ken52011219: 問題 12/30 18:15
ken52011219: 就死記 lw beq會停兩cycle就好 12/30 18:15
ken52011219: 而第一個ID並非為stall 因為它並沒有被執行要stall12/30 18:18
ken52011219: 的指令,而是下達要stall下一個cycle的cycle12/30 18:18
太清楚了!感恩>< 不過我還有個額外問題,那為何第二次bne的Stall算在12呢? ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 18:21:09
yupog2003: 我覺得死記lw beq停兩cycle並不好,萬一題目改成beq在 12/30 18:20
yupog2003: EX或MEM階段判斷要不要跳,就分別是停1和0個cycle了 12/30 18:20
而且依這樣說的話,第一小題中的Stall都要算多一個cycle了@@? ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 18:23:11
yupog2003: 原PO這樣畫應該是認為IF階段之後就開始暫停?12/30 18:22
ken52011219: 是這樣沒錯 XD 我說的不夠好 還是畫圖最好 12/30 18:23
yupog2003: 應該是ID之後才開始暫停,所以才要畫三個ID 12/30 18:23
yupog2003: 第二次的bne應該是13才對,答案有錯 12/30 18:23
ken52011219: 那個答案錯的是13 12/30 18:23
yupog2003: 其實任何hazard都不可能在IF之後就暫停,除非是在等前 12/30 18:25
yupog2003: 面的指令,因為ID階段之後才知道這個指令是什麼,IF階 12/30 18:26
yupog2003: 段只是fetch根本不知道指令長什麼樣子,也無法暫停 12/30 18:26
yupog2003: 前面有一篇branch stall的位置,裡面k大有提供完整的 12/30 18:28
yupog2003: execution diagram,可以好好看一下,思考為什麼這邊停 12/30 18:28
yupog2003: 為什麼那邊停,我就是靠那張圖想很久才把瓶頸解開的 12/30 18:29
ken52011219: 我現在沒有筆 但我記得 yupog 大講的狀況可以被forwa 12/30 18:30
ken52011219: rding 解決(?12/30 18:30
我記得只是不能提前到IF就forwarding而已? 還有,因為我本來以為的是,因為在ID判斷,所以要把ID延後到ME,確定好正確數值後再 判別。 那如果像大大們說的這樣,第一題中不也是bne直接連續執行到ME後再Stall ME重複判別 了嗎? ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 18:34:26
yupog2003: k大是說改在EX或MEM階段判斷要不要跳可以被forwarding 12/30 18:34
yupog2003: 解決? 12/30 18:34
ken52011219: 哦哦 沒事我想錯了 EXE 還要STALL一次 12/30 18:46
yupog2003: 我好像有說錯,在MEM階段判別的話好像還是要stall 1個 12/30 18:47
yupog2003: cycle 12/30 18:47
ken52011219: 疑XD 怎麼大家想錯剛好不同的東西 12/30 18:48
yupog2003: 其實我覺得會這麼混亂是因為課本沒把所有的forwarding 12/30 18:53
yupog2003: path都講出來... 12/30 18:53
ken52011219: 我想清楚了 不會有題目問EXE的狀況 12/30 19:03
ken52011219: 為何將BEQ接在ID就是因為要無縫接下一個就是正確的 12/30 19:05
ken52011219: instruction , 而MEM則是藉由原本的IF ,ID ,EX, M 12/30 19:06
ken52011219: 來執行BEQ ,因此forwarding 可在beq為id的階段 12/30 19:11
ken52011219: LW 為EXE 的階段中 啟用forwarding來解決 12/30 19:11
superdurian: 可以問一下stall cycles 前面的cycle2是答案之一嗎? 12/30 19:59
yupog2003: 不是 12/30 20:11
答案是我用紅筆寫的而已唷
Transfat: 有人可以畫畫看MEM階段決定要不要branch的圖嗎 12/30 20:48
Transfat: 有點畫不出來(1) 12/30 20:48
※ 編輯: ssssIssss (140.112.25.99), 12/30/2016 20:51:32 我畫第一題的流程好了,然後我想請問一下這樣子的話為何是Stall在cycle7? 因為若像是第二題這樣,那應該會是先IF ID EX ME ME WB 才是吧? 而這樣stall的地方就會是cycle9了? lw IF ID EX ME WB add IF ID XX EX ME WB lw IF XX ID EX ME WB bne XX IF ID XX EX ME WB NOP IF NOP XX IF NOP IF add IF ID EX ME WB ※ 編輯: ssssIssss (140.112.25.99), 12/30/2016 20:57:13
ken52011219: 我發現我前面講錯了 mem 還要一個stall 沒錯QQ 12/30 21:16
ken52011219: 果然還是要拿筆寫才對 12/30 21:17
ken52011219: http://i.imgur.com/SXPqFSP.jpg 12/30 21:25
yupog2003: 原諒我字醜用excel:http://imgur.com/TOoeCtX 12/30 21:28
那我試著闡述我現在的理解,你們幫我確認是否為真感恩>< 第一題中的load-use datahazard,等到lw的數值在MEM正確後便可forwarding給bne, 因此就如同其他datahazard的解決方式一樣,把要用到的stage延後到可forwarding 的地方即可。 而在第二題中,因為判別提早到ID便出現,因此情況便會是ID不斷Stall,持續判別 直到lw的reg正確傳遞給bne為止? ※ 編輯: ssssIssss (140.112.25.99), 12/30/2016 21:43:38
Transfat: 我也想問為什麼lw和bne的時候stall要在cycle7,如果在MEM 12/30 21:42
Transfat: 階段決定要不要跳,不是在MEM之前把資料傳給bne就行了嗎 12/30 21:43
yupog2003: 我也有T大的疑問,張凡上課的時候說課本並沒有把所有的 12/30 21:45
yupog2003: forwarding path都介紹出來,像MEM forwarding to MEM 12/30 21:46
yupog2003: 就沒有介紹到,所以我在想是不是就不能這樣用... 12/30 21:46
yupog2003: 原po的理解跟我一樣,但是感覺如果可以把MEM的結果 12/30 21:50
yupog2003: forwarding給下一個要進MEM的指令,這樣c7的stall就不 12/30 21:51
yupog2003: 必要了 12/30 21:51
ken52011219: 我當初也有這個疑問,直到看了multi cycle data path 12/30 21:53
yupog2003: 可是課本從頭到尾都把branch放在ID,放在MEM的作法沒講 12/30 21:53
ken52011219: "或許" 這跟為什麼branch 會放在 mem有關係 12/30 21:55
ssssIssss: k大可以開釋一下嗎QQ 12/30 21:55
ken52011219: https://goo.gl/JYRfxz 這是multicycle data path 12/30 21:56
ken52011219: 你會看到 ALU 被當全功能 然後連到PCsrc 做mux 12/30 21:58
ken52011219: 這其中也包含著 BEQ 的instruction 12/30 21:58
ken52011219: 然後連回 PC線 mux 選擇要傳進Dmem or Imem 12/30 21:59
ken52011219: 它們這張圖的關係跟Pipeline有很多不合理的原理可以 12/30 22:00
ken52011219: 看起來被解釋QQ ,只不過我看聖經本沒有太多琢磨 12/30 22:01
yupog2003: 意思就是說,雖然beq在MEM被決定,但那個zero的值必須 12/30 22:02
yupog2003: 在EX階段就被決定好,所以lw的結果也要在beq進EX時就決 12/30 22:03
yupog2003: 定好,所以要stall一個cycle,然後把MEM的結果forward 12/30 22:04
yupog2003: 到EX 12/30 22:04
yupog2003: 這樣整個都對的起來了耶...感謝k大 12/30 22:04
ken52011219: 這張圖能解釋的還有一個 為什麼對於Beq來說 regdst 12/30 22:07
ken52011219: 和 memtoreg是don't care 12/30 22:07
ken52011219: 因為BEQ根本碰不到它們這兩個控制端 12/30 22:08
ken52011219: 我想講的是,對於這張圖而言 MEM STAGE在最右端MUX 12/30 22:20
ken52011219: 和 最左端到記憶體之前 12/30 22:20
ken52011219: 或許Pipeline 也有可能是照著類似概念建成的 12/30 22:22