作者g1990822 (什麽东西?!)
看板Grad-ProbAsk
标题[理工] 计组 data与control hazard问题(白算盘)
时间Sun May 20 18:34:59 2018
最近两天在写白算盘的题目,遇到了几题问题
因为在网路上找到的解答和我的想法不太一样,
不确定是不是解答有误还是我的观念错误,希望版友可以帮忙指正
第一题:(来自白算盘第五版4.9题)题目给三个指令:
指令1: or r1,r2,r3
指令2: or r2,r1,r4
指令3: or r1,r1,r2
其中4.9.5题:Add nop instructions to this code to eliminate hazards
if there is ALU-ALU forwarding only
( no forwarding from MEM to EX stage)
我在网路上找到的解答:
or r1,r2,r3
or r2,r1,r4
or r1,r1,r2
也就是解答似乎认为没有任何的Data hazard,所以没有插入任何nop
而我的问题是,在有ALU-ALU forwarding的情况下,指令1,2的data hazard(r1)
和指令2,3的data hazard(r2)可以被解决,应该没有问题
但是指令1,3也有data hazard(r1)不是吗?而此data hazard只能够用
forwarding from MEM to EX stage解决吧?(因为相隔一个指令)
但是题目说""no ""forwarding from MEM to EX stage
因此不是应该要在中间插入一个nop,
让第三个指令在第一个指令於WB stage时才能ID吗?
像是: 指令1 IF ID EX MEM WB
指令2 IF ID EX MEM WB
nop IF ID EX MEM WB
指令3 IF ID EX MEM WB
这样的形式,才能让指令3读到正确的r1的值,但是这样的话,
指令2的r2又只能藉由forwarding from MEM to EX stage给指令三...
我想到的是要:再插入一个nop变成:
C1 C2 C3 C4 C5 C6 C7 C8 C9
指令1 IF ID EX MEM WB
指令2 IF ID EX MEM WB
nop IF ID EX MEM WB
nop IF ID EX MEM WB
指令3 IF ID EX MEM WB
这样一来指令3可以在C6时读到指令1,2已经写入的r1与r2的正确值
但是不知道这样想法对不对..
第二题:(来自白算盘第五版4.15题)
In this exercise,assume that the breakdown of dynamic instructions into
various instruction categories is as follows:
R-Type BEQ JMP LW SW
40% 25% 5% 25% 5%
Also , assume the following btanch predictor accuracies:
Always-Taken Always-Not-Taken 2-Bit
45% 55% 85%
其中4.15.1小题: Stall cycles due to mispredicted branches increase the CPI
What is the extra CPI due to mispredicted branches with the
always-taken predictor?Assume that branch outcomes are
determinid in the EX stage,that there are no hazards,and
no delay slots are used.
网路上解答: 3*(1-0.45)*0.25=0.41
我的问题是为什麽是"3"*(1-0.45)*0.25
而不是:"2"*(1-0.45)*0.25呢?
因为题目说是在EX stage决定要不要branch,
所以若猜错的penalty不是应该是两个CLK而已吗?
以上两个问题再麻烦大大们帮解答,谢谢了!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 58.115.180.73
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Grad-ProbAsk/M.1526812502.A.B16.html
1F:推 TWkobe: mem/wb 前馈至id/ex不用多1cycle 05/20 19:17
2F:推 TWkobe: 只要最迟到ex stage在进行alu前得到正确资料就好 05/20 19:23
T大你好,可是题目说no forwarding from MEM to EX stage
不是代表说没办法从MEM/WB前馈吗?
还是是我理解错误了呢@@..
3F:→ TWkobe: 不用非得在id stage就马上读到正确资料 05/20 19:25
4F:→ TWkobe: 但若没有前馈 指令1後方插入2个nop是对的 05/20 19:27
5F:→ TWkobe: 指令1後方插入2个nop是对的 05/20 19:27
那这题我的想法对吗?
因为no forwarding from MEM to EX stage>代表没办法从MEM/WB前馈
>要在指令2後面插入两个nop,让指令3可以在ID STAGE正确读到所需要的两个暂存器
(如文中所叙述)
6F:推 TWkobe: 对 插入两个nop後指令1在上升沿写 指令2下降延读 05/20 19:31
了解,谢谢T大!
7F:→ TWkobe: 至於指令3前方已有两个nop就不会有data hazard 05/20 19:33
可是我的想法是在指令2後面插入2个nop,不是在指令1後面就插入,
跟您前面所讲说插在指令1後面不太一样@@..
因为我的想法是指令1,2不会有 data hazard 就不要去更动
然後调整指令1,3和指令2,3的data hazard就好,所以插在指令2
後面而不是指令1後面
8F:推 TWkobe: 至於2不清楚 应该是他算上原本的cpi 1 05/20 19:37
9F:推 TWkobe: 指令2不是要读指令1结果 raw阿 05/20 19:40
指令2要读指令1的r1没错,
但是题目这句话:there is ALU-ALU forwarding only
我的理解是,这句话表示可以从EX/MEM stage前馈到EX STAGE
因此指令1,2就不会有data hazard 不知道这样对不对呢?
10F:推 TWkobe: 喔喔没看到 如果是fowarding only就可以了 05/20 19:44
好的,谢谢T大愿意花时间替我解答,感激不尽!
11F:推 TWkobe: 至於他说只能从mem到id就不确定 应该是指令2後插1个就好 05/20 19:57
12F:推 TWkobe: 少打id/ex 就是ex stage 05/20 19:59
可是如果只在指令2後面插,会变成这样:
指令1 IF ID EX MEM WB
指令2 IF ID EX MEM WB
nop IF ID EX MEM WB
指令3 IF ID EX MEM WB
此时指令3在ID stage的确可以读到指令1正确的暂存器r1(RAW)
不过指令3也需要指令2的暂存器r2,但是如果只插一个nop,
又变成说指令2的r2要给指令3,只能从MEM/WB前馈给指令3了@@..
所以我的想法是再插一个变成这样:
C1 C2 C3 C4 C5 C6 C7 C8 C9
指令1 IF ID EX MEM WB
指令2 IF ID EX MEM WB
nop IF ID EX MEM WB
nop IF ID EX MEM WB
指令3 IF ID EX MEM WB
延後两个clock,让指令3可以确实读取指令1和2正确的暂存器
不过我也不太确定到底需不需要插到两个nop 还是说有其他解法 囧
13F:推 SIGNAL2017: 请问第一个问题他的解答为何没有插NOP呀? 他不是说不 05/20 20:00
14F:→ SIGNAL2017: 能用MEM/WB接forwarding到EX吗? 那这样只能用NOP解决 05/20 20:00
15F:→ SIGNAL2017: 吧? 05/20 20:00
我就是不知道为什麽他解答上完全没有插nop才来问的@@,
因为解答是我随便在网路上找的,也不知道到底对不对
我自己的看法是要插两个NOP才能让三个指令的hazard都解决
不知道还有没有可以插更少nop的方法..
16F:推 TWkobe: 我的意思可能让你误会 我猜这题原本意思是 05/20 21:16
17F:→ TWkobe: 没有"从mem/wb register forwaring回id stage" 05/20 21:17
18F:→ TWkobe: 所以他的意思是无法从write back stage回给id stage 05/20 21:18
19F:→ TWkobe: 脑子错乱说错是回给"ex stage" 05/20 21:19
20F:→ TWkobe: 所以当指令1,2连续时 此时forwarding可以自ex/mem reg回 05/20 21:20
21F:→ TWkobe: 给ex stage 05/20 21:20
22F:推 TWkobe: 但如果1,2,3连续 此时ex/mem to ex stage不够用 05/20 21:22
23F:→ TWkobe: 但只看指令2,3是仍足够用 ex/mem reg 回ex stage 05/20 21:24
24F:→ TWkobe: 所以问题是出在指令1还要nop避开需要mem/wb reg 回ex 05/20 21:25
25F:→ TWkobe: 有错还请大大纠正 05/20 21:26
我的想法跟你应该一样
我的观念是只要是"间隔"指令(如指令1和指令3),就无法用 EX/MEM reg去前馈,
需要使用到 MEM/WB reg前馈,
而若是连续指令(如指令1和指令2,指令2和指令3)只需要EX/MEM reg前馈即可
但是题目说只有EX/MEM reg可以前馈,MEM/WB reg不可以前馈,
因此只看指令1和2,还有指令2和3,都是可以用EX/MEM reg前馈解决
但是若看指令1和3,则需要使用MEM/WB reg前馈,但是题目说不行,
因此先插入一个nop,让指令3可以在ID STAGE读到指令1写入後的暂存器值,如下:
指令1
指令2 ,这样指令3可以顺利的在ID STAGE读取到指令1写入後"正确的"暂存器值r1
nop
指令3
但是插入一个nop後,变成指令2和指令3有间隔了,
而不巧的是本题指令3也要读取指令2的暂存器值r2,
而间隔指令又只能利用MEM/WB reg前馈,因此只好再插入一个nop,变成:
指令1
指令2 ,这样指令3可以顺利的在ID STAGE读取到指令1写入後"正确的"暂存器值r1
nop 还有指令2写入後"正确的"暂存器值r2
nop
指令3
而不论nop是连插两个在指令1後面,还是插两个在指令2後面,应该都可以解决
但是好像就是要插两个才行@@..不知道我这样的想法有没有误?
再麻烦大大如果有其他想法的话提出来讨论一下,谢谢
26F:推 TWkobe: 我画了一次图还有用code detect应该插入2个 05/20 21:56
27F:→ TWkobe: 不过刚查了一下 有外国学校答案是1个 05/20 21:57
28F:推 TWkobe: 我没考虑周详真抱歉qq 05/20 21:59
29F:推 TWkobe: 而且cc6写回也来不及 指令3已经ex stage 05/20 22:01
30F:推 TWkobe: 我说是只插一个nop 05/20 22:10
喔喔,我搞错了XD
的确是只插一个的话会来不及写入,
目前看起来是要插两个没错了,看看有没有其他大大有更好解法了@@
31F:推 TWkobe: 刚查到亚大老师答案给两个nop 理由一样 05/20 22:44
大大你也太会查,我这题查了三四天都没有..
可以跟你要个网址或者关键字吗,感谢
33F:→ TWkobe: .pdf 05/20 22:53
感谢您~!
34F:推 SIGNAL2017: 我突然看到23有hazard,那13应该会无hazard了 05/20 23:45
35F:→ SIGNAL2017: 我记得所有hazard都可以用两个nop去解决,且不用前馈 05/20 23:47
36F:→ SIGNAL2017: 所以应该有很多种答案吧?不过我想说的是原文中的解答 05/20 23:48
37F:→ SIGNAL2017: 应该是对的(?) 12和23都可以用前馈解决13因为23前馈 05/20 23:49
38F:→ SIGNAL2017: 解决所以13会没有hazard,所以答案才给都没nop的答案 05/20 23:50
39F:→ SIGNAL2017: (我的想法) 05/20 23:50
40F:→ SIGNAL2017: 更正:不是所有hazard我的意思是data和control hazard 05/20 23:54
data hazard可以用nop解决没错,但是我想这题应该是希望求出在只有
ALU-ALU前馈的状况下,可以使用最少NOP的解法吧@@..
另外我想大大你所说的:23有hazard会让13没有hazard的情况应该不适用此题
例如 : I1 add $1, $1 ,$2
I2 add $1 ,$1 ,$3
I3 add $1 ,$1 ,$4
这三个指令的确会因为I2和I3有hazard所以I1,I3不会有hazard
原因是因为I2,I3都是写入$1然後读取$1,所以I3读的$1是I2写的,不是I1写的
因此I1和I3没有hazard
但是这一题:
指令1: or r1,r2,r3
指令2: or r2,r1,r4
指令3: or r1,r1,r2
指令3会读取两个暂存器:r1和r2,而其中读取的r1并不像上面举的三个add的例子,
会先被指令2写过,因此应该不会像三个add的例子一样,
指令2,3有hazard,指令1,3就没有hazard
我的想法是这样,如果有误再麻烦大大提出,谢谢!
41F:→ SIGNAL2017: 我在张凡的课本上有写到MEM HAZARD的情况其中要EX无 05/21 01:17
42F:→ SIGNAL2017: HAZARD 05/21 01:18
43F:→ SIGNAL2017: 好像是因为EX是最新的资料(23指令)会盖掉13的HAZARD 05/21 01:19
44F:→ SIGNAL2017: 我是个新手而已,可以讨论看看xd 05/21 01:20
恩恩,我在白算盘课本上也有看到这段
但是我想应该是因为3要读的暂存器已经先被2写过了,所以变成1,3没有hazard
看看有没有其他大大能解答了
(我也是新手,还有很多不懂XD)
※ 编辑: g1990822 (58.115.180.73), 05/21/2018 01:25:40
46F:→ SIGNAL2017: 没hazard,原因是因23有hazard,不知道跟你举的那例子 05/21 01:24
47F:→ SIGNAL2017: 是否相同? 05/21 01:24
这题1,3没有应该是因为3所需要的t1已经被指令2:add t1,s2,t1盖过去了
所以1,3没有,但是2,3有
但是我这题
指令1: or r1,r2,r3
指令2: or r2,r1,r4
指令3: or r1,r1,r2
指令3要读的r1,并没有被指令2盖过,好像不太一样
48F:→ SIGNAL2017: 阿对..不一样 你这题12的hazard和23的hazard不同,所 05/21 01:28
49F:→ SIGNAL2017: 以不能用这个看 05/21 01:28
50F:→ SIGNAL2017: 靠..所以我的观念是错的,我还以为只要23有13就一定没 05/21 01:29
51F:→ SIGNAL2017: 不用管是怎样的情况 05/21 01:29
我也不知道我的想法对不对,学校老师教得雾煞煞..
52F:→ SIGNAL2017: 你可以拍那题给我看看吗,我想去问别人 05/21 01:34
https://imgur.com/a/UlKNY0X 有问题的是4.9.5题
如果有问到再麻烦你跟我讲一下XD 感谢!
53F:→ SIGNAL2017: 恩恩 可能要下周六才能知道了(我问补习班老师) 05/21 01:40
好的,谢谢你~
※ 编辑: g1990822 (58.115.180.73), 05/21/2018 01:54:26