[理工] 103交大资工 计组

楼主: HiltonCool (野兽疯)   2015-01-28 00:39:04
12. We know that ... the original MIPS design determines branches in the MEM
stage. Assume that originally 40% of the total instructions are beq, where
75% of them compare one register with zero. Other 25% original "beq" has
to be changed:
beq r3,r5,1000 → sub r1,r3,r5
bez r1,1000
想问的是(c)和(d)小题
(c) Assume no dynamic prediction and no assume-branch-not-taken prediction
are provided, the CPI of your new design will be 1.9.
(d) The overall speedup over the original design will be no more than 1.16.
(c)小题张凡的算法是 1 + 0.4x0.25 + 0.4x2 = 1.9
他的说法是:0.4x0.25 是多出来的 sub 指令所增加的 CPI
而 0.4x2 是因为 beq 指令造成的 pipeline stall
当初听的时候感觉很合理,所以就觉得没什么问题
但最近考古题写到这题的时候,想法完全不同
我的答案是:1 + 0.4x3 = 2.2
[疑问一] 题目说 branch 在 MEM 阶段决定要不要跳,所以如果是因为 beq 猜错
而造成的 penalty 不是应该是 3 个 clock 吗?
张凡的算法只停了 2 个 clock,是因为 new design 是指课本在把 beq
决定跳或不跳的时间点搬到 ID 之前,原本是在 EX 算出两个暂存器是否相等
即可决定决定跳或不跳的这个 design 吗?
[疑问二] 原本想说 beq 指令前面跟的是 R-type 指令,而这两个指令有 data hazard
那必须在这两个指令中间插一个 NOP,这样的话算法会变成是
1 + 0.4x3(beq stall) + 0.4x0.25x1(stall between R-type & beq) = 2.3
这个算法的前提是 beq 在 ID 阶段决定要不要跳的做法,但现在题目说
beq 在 MEM 阶段决定要不要跳,那前面的 R-type 指令即使把正确的资料
forward 给 beq 指令也没用,因为他在 ID 的时候也没决定跳或不跳,
还是要等到 MEM 才决定,如此一来,就算刚刚花了一个 clock forward
后面两个指令还是错的,整个程式的执行也是错的,所以根本也不用 forward
这样的算法就会是 1 + 0.4x3 = 2.2
[疑问三] 对于增加的 sub 指令可以直接加在 CPI 里面我觉得有点怪怪的
之前张凡好像是说可以把它看成类似 stall 一个 clock 的感觉
但就是有种说不上来很奇怪的感觉,这样不就变成 IC 跟 CPI 成正比?!
这样的话算法又会变成是 1 + 0.4x3 + 0.4x0.25x1(增加的sub) = 2.3
(d)小题姑且不论(c)小题算出来的 CPI 是多少
speedup 不是应该等于
IC_old x CPI_old x Cycle time 1 x (1 + 0.4x3) 2.2
──────────────── = ───────── = ─── = 1.0526
IC_new x CPI_new x Cycle time 1.1 x 1.9 2.09
题目说 no more than 1.16,所以我觉得是错的
不知道是我观念哪边出错了,最近有空闲的时间一直在想这题
跪求大家帮忙解惑
作者: GuardmanMart (Mart)   2015-01-28 01:09:00
(c)没有猜测branch-not-taken,所以只要有一个指令到ID阶段确定为branch指令后,之后的新指令都要stall,直到那个branch指令到MEM阶段确认完跳或不跳后,后面的指令才能继续,所以有2个cycle的stall可是解答上c选项是incorrect 所以算出来应该不是1.9!? 感觉怪怪的
作者: zero0o0o8279   2015-01-28 02:27:00
我想法也一样欸
作者: galapous (墨)   2015-01-28 22:39:00
我觉得没错捏,这题不是说呈上题,上题说这指令是在EX决定要不要跳,所以就是清ID跟IF的指令,所以stall 2 cycle因为他在EX决定要不要跳,所以有data hazard的话用forwarding就可以解决了不过我也觉得C是错的,CPI应该是1.9/1.1然后D是对的这样还有想问为啥这选项没给branch跳的机率就可以算,假如都跳得话不就都不用stall?哈哈,没写这年,想说看一下原题目才发现有呈上题,恭喜啦!
作者: acicularman (acicula)   2015-01-30 21:24:00
D是对的 旧的time是1+0.4*3 所以2.2/1.9=1.15x<1.16

Links booklink

Contact Us: admin [ a t ] ucptt.com