[理工] 101交大計組

看板Grad-ProbAsk作者 (O_O)時間9年前 (2016/12/30 16:32), 9年前編輯推噓5(5076)
留言81則, 5人參與, 最新討論串2/3 (看更多)
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

12/30 16:58, , 1F
啊前面其實有討論到同一題,因為題目一開始表明分支
12/30 16:58, 1F

12/30 16:58, , 2F
預測錯誤(misprediction), 所以bne的IF應該要跟lw的EX
12/30 16:58, 2F

12/30 16:58, , 3F
在同一個cycle
12/30 16:58, 3F
可以講詳細一點嗎,抱歉因為我爬很久還是搞不太懂>< 分支預測錯誤不就是在ID後把指令Flush為nop,而且不算在Stall裡嗎? 這樣和同一cycle有什麼關係呢? ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 17:06:41

12/30 18:00, , 4F
我好像說錯,應該是stall c6,c7沒錯
12/30 18:00, 4F

12/30 18:10, , 5F
請寫三個 ID ,dectect是在第一個ID 發生
12/30 18:10, 5F
但答案是cycle 7, 8 QQ ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 18:11:11

12/30 18:11, , 6F
然後於接下來兩個cycle執行stall
12/30 18:11, 6F

12/30 18:12, , 7F
但說是stall 其實只是把ID中的指令 留下來兩個cycle
12/30 18:12, 7F

12/30 18:13, , 8F
小小更正一下 第二個ID 也仍然會執行dectect 並且 if
12/30 18:13, 8F

12/30 18:13, , 9F
判斷式為true 執行stall
12/30 18:13, 9F

12/30 18:14, , 10F
這部分為什麼說第二個cycle if判斷式為true 是因為聖
12/30 18:14, 10F

12/30 18:14, , 11F
經本只寫了兩種forwarding 判斷式 但其實有四種
12/30 18:14, 11F

12/30 18:15, , 12F
總而言之,以目前我們所認知的pipeline 無法解決該
12/30 18:15, 12F

12/30 18:15, , 13F
問題
12/30 18:15, 13F

12/30 18:15, , 14F
就死記 lw beq會停兩cycle就好
12/30 18:15, 14F

12/30 18:18, , 15F
而第一個ID並非為stall 因為它並沒有被執行要stall
12/30 18:18, 15F

12/30 18:18, , 16F
的指令,而是下達要stall下一個cycle的cycle
12/30 18:18, 16F
太清楚了!感恩>< 不過我還有個額外問題,那為何第二次bne的Stall算在12呢? ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 18:21:09

12/30 18:20, , 17F
我覺得死記lw beq停兩cycle並不好,萬一題目改成beq在
12/30 18:20, 17F

12/30 18:20, , 18F
EX或MEM階段判斷要不要跳,就分別是停1和0個cycle了
12/30 18:20, 18F
而且依這樣說的話,第一小題中的Stall都要算多一個cycle了@@? ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 18:23:11

12/30 18:22, , 19F
原PO這樣畫應該是認為IF階段之後就開始暫停?
12/30 18:22, 19F

12/30 18:23, , 20F
是這樣沒錯 XD 我說的不夠好 還是畫圖最好
12/30 18:23, 20F

12/30 18:23, , 21F
應該是ID之後才開始暫停,所以才要畫三個ID
12/30 18:23, 21F

12/30 18:23, , 22F
第二次的bne應該是13才對,答案有錯
12/30 18:23, 22F

12/30 18:23, , 23F
那個答案錯的是13
12/30 18:23, 23F

12/30 18:25, , 24F
其實任何hazard都不可能在IF之後就暫停,除非是在等前
12/30 18:25, 24F

12/30 18:26, , 25F
面的指令,因為ID階段之後才知道這個指令是什麼,IF階
12/30 18:26, 25F

12/30 18:26, , 26F
段只是fetch根本不知道指令長什麼樣子,也無法暫停
12/30 18:26, 26F

12/30 18:28, , 27F
前面有一篇branch stall的位置,裡面k大有提供完整的
12/30 18:28, 27F

12/30 18:28, , 28F
execution diagram,可以好好看一下,思考為什麼這邊停
12/30 18:28, 28F

12/30 18:29, , 29F
為什麼那邊停,我就是靠那張圖想很久才把瓶頸解開的
12/30 18:29, 29F

12/30 18:30, , 30F
我現在沒有筆 但我記得 yupog 大講的狀況可以被forwa
12/30 18:30, 30F

12/30 18:30, , 31F
rding 解決(?
12/30 18:30, 31F
我記得只是不能提前到IF就forwarding而已? 還有,因為我本來以為的是,因為在ID判斷,所以要把ID延後到ME,確定好正確數值後再 判別。 那如果像大大們說的這樣,第一題中不也是bne直接連續執行到ME後再Stall ME重複判別 了嗎? ※ 編輯: ssssIssss (114.44.199.149), 12/30/2016 18:34:26

12/30 18:34, , 32F
k大是說改在EX或MEM階段判斷要不要跳可以被forwarding
12/30 18:34, 32F

12/30 18:34, , 33F
解決?
12/30 18:34, 33F

12/30 18:46, , 34F
哦哦 沒事我想錯了 EXE 還要STALL一次
12/30 18:46, 34F

12/30 18:47, , 35F
我好像有說錯,在MEM階段判別的話好像還是要stall 1個
12/30 18:47, 35F

12/30 18:47, , 36F
cycle
12/30 18:47, 36F

12/30 18:48, , 37F
疑XD 怎麼大家想錯剛好不同的東西
12/30 18:48, 37F

12/30 18:53, , 38F
其實我覺得會這麼混亂是因為課本沒把所有的forwarding
12/30 18:53, 38F

12/30 18:53, , 39F
path都講出來...
12/30 18:53, 39F

12/30 19:03, , 40F
我想清楚了 不會有題目問EXE的狀況
12/30 19:03, 40F

12/30 19:05, , 41F
為何將BEQ接在ID就是因為要無縫接下一個就是正確的
12/30 19:05, 41F

12/30 19:06, , 42F
instruction , 而MEM則是藉由原本的IF ,ID ,EX, M
12/30 19:06, 42F

12/30 19:11, , 43F
來執行BEQ ,因此forwarding 可在beq為id的階段
12/30 19:11, 43F

12/30 19:11, , 44F
LW 為EXE 的階段中 啟用forwarding來解決
12/30 19:11, 44F

12/30 19:59, , 45F
可以問一下stall cycles 前面的cycle2是答案之一嗎?
12/30 19:59, 45F

12/30 20:11, , 46F
不是
12/30 20:11, 46F
答案是我用紅筆寫的而已唷

12/30 20:48, , 47F
有人可以畫畫看MEM階段決定要不要branch的圖嗎
12/30 20:48, 47F

12/30 20:48, , 48F
有點畫不出來(1)
12/30 20:48, 48F
※ 編輯: 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

12/30 21:16, , 49F
我發現我前面講錯了 mem 還要一個stall 沒錯QQ
12/30 21:16, 49F

12/30 21:17, , 50F
果然還是要拿筆寫才對
12/30 21:17, 50F

12/30 21:25, , 51F

12/30 21:28, , 52F
原諒我字醜用excel:http://imgur.com/TOoeCtX
12/30 21:28, 52F
那我試著闡述我現在的理解,你們幫我確認是否為真感恩>< 第一題中的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

12/30 21:42, , 53F
我也想問為什麼lw和bne的時候stall要在cycle7,如果在MEM
12/30 21:42, 53F

12/30 21:43, , 54F
階段決定要不要跳,不是在MEM之前把資料傳給bne就行了嗎
12/30 21:43, 54F

12/30 21:45, , 55F
我也有T大的疑問,張凡上課的時候說課本並沒有把所有的
12/30 21:45, 55F

12/30 21:46, , 56F
forwarding path都介紹出來,像MEM forwarding to MEM
12/30 21:46, 56F

12/30 21:46, , 57F
就沒有介紹到,所以我在想是不是就不能這樣用...
12/30 21:46, 57F

12/30 21:50, , 58F
原po的理解跟我一樣,但是感覺如果可以把MEM的結果
12/30 21:50, 58F

12/30 21:51, , 59F
forwarding給下一個要進MEM的指令,這樣c7的stall就不
12/30 21:51, 59F

12/30 21:51, , 60F
必要了
12/30 21:51, 60F

12/30 21:53, , 61F
我當初也有這個疑問,直到看了multi cycle data path
12/30 21:53, 61F

12/30 21:53, , 62F
可是課本從頭到尾都把branch放在ID,放在MEM的作法沒講
12/30 21:53, 62F

12/30 21:55, , 63F
"或許" 這跟為什麼branch 會放在 mem有關係
12/30 21:55, 63F

12/30 21:55, , 64F
k大可以開釋一下嗎QQ
12/30 21:55, 64F

12/30 21:56, , 65F
https://goo.gl/JYRfxz 這是multicycle data path
12/30 21:56, 65F

12/30 21:58, , 66F
你會看到 ALU 被當全功能 然後連到PCsrc 做mux
12/30 21:58, 66F

12/30 21:58, , 67F
這其中也包含著 BEQ 的instruction
12/30 21:58, 67F

12/30 21:59, , 68F
然後連回 PC線 mux 選擇要傳進Dmem or Imem
12/30 21:59, 68F

12/30 22:00, , 69F
它們這張圖的關係跟Pipeline有很多不合理的原理可以
12/30 22:00, 69F

12/30 22:01, , 70F
看起來被解釋QQ ,只不過我看聖經本沒有太多琢磨
12/30 22:01, 70F

12/30 22:02, , 71F
意思就是說,雖然beq在MEM被決定,但那個zero的值必須
12/30 22:02, 71F

12/30 22:03, , 72F
在EX階段就被決定好,所以lw的結果也要在beq進EX時就決
12/30 22:03, 72F

12/30 22:04, , 73F
定好,所以要stall一個cycle,然後把MEM的結果forward
12/30 22:04, 73F

12/30 22:04, , 74F
到EX
12/30 22:04, 74F

12/30 22:04, , 75F
這樣整個都對的起來了耶...感謝k大
12/30 22:04, 75F

12/30 22:07, , 76F
這張圖能解釋的還有一個 為什麼對於Beq來說 regdst
12/30 22:07, 76F

12/30 22:07, , 77F
和 memtoreg是don't care
12/30 22:07, 77F

12/30 22:08, , 78F
因為BEQ根本碰不到它們這兩個控制端
12/30 22:08, 78F

12/30 22:20, , 79F
我想講的是,對於這張圖而言 MEM STAGE在最右端MUX
12/30 22:20, 79F

12/30 22:20, , 80F
和 最左端到記憶體之前
12/30 22:20, 80F

12/30 22:22, , 81F
或許Pipeline 也有可能是照著類似概念建成的
12/30 22:22, 81F
文章代碼(AID): #1OPXkuvk (Grad-ProbAsk)
文章代碼(AID): #1OPXkuvk (Grad-ProbAsk)