作者bennylu (减肥)
看板Grad-ProbAsk
标题Re: [理工] [计组]-台大95-资工
时间Fri Oct 30 01:24:55 2009
※ 引述《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)
1F:推 lwtistunning:感谢 10/31 22:16