[理工] 計組forwarding

看板Grad-ProbAsk作者 (里歐一代)時間8年前 (2017/09/22 12:19), 8年前編輯推噓5(5050)
留言55則, 3人參與, 最新討論串3/3 (看更多)
各位大大安安 計組有幾個小問題想請教一下 假設 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

09/22 12:42, , 1F
不會,因為clock time是根據執行時間最久的stage來設定
09/22 12:42, 1F
clock time 不會變沒錯,我指的是execution time~

09/22 12:45, , 2F
就算t1還沒算出來,第二行指令也會被卡在DE/EX之間,等到
09/22 12:45, 2F

09/22 12:45, , 3F
下個clock來了才會跟t1一起輸入EX做運算
09/22 12:45, 3F
我會這樣覺得是因為張凡上冊p527的第四小題答案有提到,而且如果卡在ID/EX Pipeline register的話 forwarding 似乎就沒辦法在當下的那個clock來做 forwarding 的判斷 ※ 編輯: leoone (1.164.146.245), 09/22/2017 12:55:26

, , 4F
考古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

09/22 14:38, , 5F
我想法是那一階段的九個控制信號都被flush成0了,故為NOP
09/22 14:38, 5F

09/22 14:43, , 6F
*第6 cycle時的EXE
09/22 14:43, 6F
根據白算盤來看,只有control signal會清成0不會整根pipeline register都清掉,所以 還是會有資料流過去,只是都會卡在control signal為0的input前面 ※ 編輯: leoone (1.164.146.245), 09/22/2017 14:47:58

09/22 14:51, , 7F
你要重考@@?
09/22 14:51, 7F
K大 對QQ 都只找到3年的教授XDD

09/22 14:55, , 8F
的確資料一樣會流進ALU,只是因控制信號都變0而無影響
09/22 14:55, 8F

09/22 14:57, , 9F
不過這個題目的情況是stall了一個cycle,才有這種狀況吧
09/22 14:57, 9F

09/22 14:59, , 10F
lw緊接add、add緊接beq才需要stall
09/22 14:59, 10F

09/22 15:00, , 11F
還有lw緊接beq,要stall兩個cycle
09/22 15:00, 11F
※ 編輯: 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

09/22 15:06, , 12F
有題目嗎
09/22 15:06, 12F

09/22 15:08, , 13F

09/22 15:08, , 15F
HYVp.jpg
09/22 15:08, 15F

09/22 15:09, , 16F

09/22 15:09, , 17F

09/22 15:09, , 18F
K大 第四題~
09/22 15:09, 18F

09/22 15:23, , 19F
我太久沒碰可能有點生疏所以會講錯 QQ
09/22 15:23, 19F

09/22 15:23, , 20F
當第4 Cycle 時 lw & add 到達 ID & EXE 時
09/22 15:23, 20F

09/22 15:24, , 21F
位於ID 的「 hazard Detection」偵測到會data hazard
09/22 15:24, 21F

09/22 15:25, , 22F
因此此時Stall指令執行(flush all signal=xx)
09/22 15:25, 22F

09/22 15:26, , 23F
此時已經於 4th cycle 末 ~ 5 cycle 初,因此就只考
09/22 15:26, 23F

09/22 15:27, , 24F
慮 5th Cycle 被 stall (EXE signal=XX)
09/22 15:27, 24F

09/22 15:30, , 25F
而到了 6th Cycle 則藉由forwarding signal就恢復原
09/22 15:30, 25F

09/22 15:30, , 26F
樣了
09/22 15:30, 26F

09/22 15:33, , 27F
講錯 (ID Signal = XX)
09/22 15:33, 27F

09/22 15:34, , 28F
簡單來看,被Stall的stage 是第一個ID ,其Signal是
09/22 15:34, 28F

09/22 15:35, , 29F
被暫停的,而第二個ID 才是正常執行,不知道是不是
09/22 15:35, 29F

09/22 15:35, , 30F
L大對這個地方有疑慮@@?
09/22 15:35, 30F

09/22 15:36, , 31F
想稍微更正一下 forwarding 可能會被誤會的說法
09/22 15:36, 31F

09/22 15:37, , 32F
應該說 hazard detection 偵測到 data hazard的條件
09/22 15:37, 32F

09/22 15:38, , 33F
已經消失了,故signal 由1改0 而不是靠著forwarding
09/22 15:38, 33F

09/22 15:38, , 34F
signal 才恢復正常
09/22 15:38, 34F

09/22 16:00, , 35F
咦 k大說的data hazard 應該是第3跟4的instruction吧XD
09/22 16:00, 35F

09/22 16:00, , 36F
那應該是stall是在5被hazard dection才對?
09/22 16:00, 36F

09/22 16:07, , 37F
我怎麼記得 Hazard dection 條件式是IF & ID @@
09/22 16:07, 37F

09/22 16:08, , 38F
這樣不會拖到 lw 進 alu 時才被dection到
09/22 16:08, 38F

09/22 16:09, , 39F
detection XD
09/22 16:09, 39F

09/22 16:12, , 40F
算是在ID跟EXE 偵測的 EXE的lw跟ID的instruction做hazard
09/22 16:12, 40F

09/22 16:12, , 41F
detection IF的時候 還不知道哪個reg啦XDD
09/22 16:12, 41F

09/22 16:21, , 42F
ID/IF pipeline register & ID/EXE pipeline regist
09/22 16:21, 42F

09/22 16:21, , 43F
還沒進 EXE stage 剛剛稍微查了一下
09/22 16:21, 43F

09/22 16:29, , 44F
4th cycle(lw: ID stage) 偵測到Data hazard
09/22 16:29, 44F

09/22 16:31, , 45F
add: IF stage
09/22 16:31, 45F

09/22 16:32, , 46F
5th cycle ,stall ID stage(signal=xx)讓lw先跑
09/22 16:32, 46F

09/22 16:32, , 47F
6th cycle hazard Detection沒偵測到Data hazard
09/22 16:32, 47F

09/22 16:33, , 48F
因此接收IF/ID pipeline register的暫存值(含signal)
09/22 16:33, 48F

09/22 16:34, , 49F
執行add 在 ID stage中未完成的工作
09/22 16:34, 49F

09/22 16:52, , 50F
K大我想問另一個問題! hazard detection跟forwarding uni
09/22 16:52, 50F

09/22 16:52, , 51F
t都是在pipeline register拉出所需的值嗎? 而不是在stage
09/22 16:52, 51F

09/22 16:52, , 52F
的線路上?
09/22 16:52, 52F

09/22 16:55, , 53F
對,它們都是從pipeline reg. 獨自拉出的值
09/22 16:55, 53F

09/22 17:14, , 54F
囧 到現在才知道 看圖一直以為是“順便”從stage拉一條線
09/22 17:14, 54F

09/22 17:14, , 55F
到unit上的...
09/22 17:14, 55F
文章代碼(AID): #1Pn8zBCb (Grad-ProbAsk)
文章代碼(AID): #1Pn8zBCb (Grad-ProbAsk)