作者jerry900287 ()
看板Grad-ProbAsk
標題[理工] 計組 101 台聯大電機 Pipeline 懲罰
時間Tue Dec 5 18:30:40 2017
想請教一下各位大大
題目如圖
https://i.imgur.com/o076BeK.png
紅框答案的部分
我的理解是說
程式在 compiler得時候
compiler會先看一下指令
安排順序
再進pipeline
如圖 :
https://i.imgur.com/JEGtoWy.png
當 Branch 預期跳的時候
Complier 會在 Branch 指令後面插目的的指令
所以當 Branch 真的跳則不會有懲罰
這部分我沒有問題
但是 Jump 指令
Compiler看到的時候
應該是會排 Jump 目的的指令吧?
我覺得應該是不會有懲罰的問題
同樣都是在ID2解碼才知道指令
人家Branch都可以排 跳躍目的 的指令了
為啥Jump這個必跳的指令後面一定要跟著 下一個指令 而不是 跳躍目的 的指令呢?
還是我整體的觀念有誤呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.243.93.151
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1512469844.A.B12.html
※ 編輯: jerry900287 (111.243.93.151), 12/05/2017 18:33:12
※ 編輯: jerry900287 (111.243.93.151), 12/05/2017 18:34:49
※ 編輯: jerry900287 (111.243.93.151), 12/05/2017 18:35:37
推 howard31622: 答案錯的 12/05 22:48
→ howard31622: unconditional branch 在predict taken是不會損失的 12/05 22:48
→ howard31622: 張帆上課有說 12/05 22:48
所以大大的意思是 Jump 的 Predict taken 那攔是 0
Predict not take 那攔是 3 嗎?
※ 編輯: jerry900287 (111.243.93.151), 12/05/2017 23:42:04
推 ms718293: 我上課時是聽他說 jump一律不能猜 所以都是損失3 cycles 12/06 00:30
→ ms718293: 然後我也沒有記錄到答案是錯的部分 3/3應該是對的 12/06 00:31
→ ms718293: 有錯麻煩指正@@ 12/06 00:31
→ ms718293: 我發現我應該是錯的了 答案是0/3沒錯 因為jump是一定跳 12/06 00:36
→ ms718293: 所以如果猜taken,則無損失。若猜not taken,必損失3 12/06 00:37
OK!!! 這樣感覺就通了 感謝尼們
※ 編輯: jerry900287 (61.230.79.66), 12/06/2017 13:02:51