看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《lwtistunning (考驗)》之銘言: : ADDI r1,r0,#101 : ADDI r2,r0,A : Loop:LD r3,0(r2) : ADDI r3,r3,#1 : SD r3,0(r2) : ADDI r2,r2,#4 : SUBI r1,r1,#1 : BNE r1,r0,Loop : Assume that the branch is resolved during the instruction decode stage, : and full register forwarding are implemented. : Assume that all memory reference hit in the cache and TLBs. : the pipeline does not implement any branch prediction mechanism. : How many stall cycle are in one loop iteration including stalls caused : by the branch instruction? : 我想問的是 SUBI r1,r1,#1 : BNE r1,r0,Loop 這兩指令中 明顯有data hazard存在 : 題目說有支援forwarding,那不就應該靠forwarding就能解決這邊的data hazard了嗎? : 解答卻是說,需要在這兩道指令中再加一個stall才可。 : 有人能教我一下為什麼這邊還要stall一個clock呢? : (解答這樣說;Since branch decision is resolved during ID stage,a clock stall is : needed between SUBI and BEQ.) : 因為我在做其它考古題時,也有遇到類似情形,但如果有支援forwarding下 : 都是不用再加一個stall的。 : 例如中央97的一題 or $3,$2,$1 : beq $2,$3,loop 顯然也有data hazard存在 : 但解答是說用forwarding即可解。 依據白算盤提供的pipeline圖, branch的comparison是在EXE stage完成, 但result會流進EXE/MEM register中, 並在下一個cycle(MEM stage)決定是否branch, 所以只要在EXE stage取得正確的值就行了(EXE->EXE forwarding) IF ID EXE MEM WB IF ID EXE MEM WB : 難道是有提到branch decision is resolved during ID stage. : 那麼即使在有支援forwarding下,還是要stall一個clock?? : 麻煩各位指導一下,還是我觀念有錯? 謝謝!! 若每次都在MEM stage才決定是否branch, 則下一道指令至少要3個stall才能開始, 所以有些設計會在ID stage就先行comparison以減少下一到指令的stall cycle, 但也因此導致與先前的指令產生data dependency, 題目說branch會在ID stage就解決, 且支援所有pipeline register的forwarding, SUBI r1,r1,#1 //r1在EXE stage產出 BNE r1,r0,Loop //r1在ID stage就要 由於bne在ID stage就要r1, 所以勢必要等待一個stall cycle, IF ID EXE MEM WB IF * ID EXE MEM WB 指令1在運算完r1後可以直接將結果forward至ID stage (full forwarding) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.207.117 ※ 編輯: bennylu 來自: 140.113.207.117 (10/30 01:38)
lwtistunning:感謝 10/31 22:16