Re: [理工] [计系] 101 台大电机丙

楼主: kather (Kather)   2015-01-09 17:12:49
※ 引述《winnie48 (winnie)》之铭言:
: 先附上题目连结:
: http://exam.lib.ntu.edu.tw/sites/default/files/exam/graduate/101/101404.pdf
: 想要问第7题和第18题(答案分别是AD及CE)
第7
首先没有stall时CPI是1
题目说系统执行指令是假定j跟beq都不会更改原有流程
直接把剩下的指令都拿进pipeline跑
=> 如果流程有变(jump换了位置 beq成立换了位置)
=> 原本吃进来的指令都是错的
=> 系统就要stall 把错误的指令清出pipeline
先了解一下清除这些指令的所需花费
j =>一定要清除 j是在第二个时脉就跳走了
=>pipeline的IF阶段是个错误的指令
=>stall一个
beq =>第三阶段跳
=>stall两个
这台机器上的程式有
5%jump 20%branch,其中的60%会跳
5%的指令 (j)会stall 1个cycle=>多 5%的cycle在stall上
12%的指令(br)会stall 2个cycle=>多24%的cycle在stall上
总cycle129%
又指令数不变,CPI => 129%
原本的执行时间就是(Ins指令数先不管它 反正执行的都一样多)
CPI * Ins * CycleTime
129% * ins * 10ns
看看后来
把第一个阶段改成两阶段,stall多一个cycle了
j的stall变成2个cycle=>多10% cycle
b的stall变成3个cycle=>多36% cycle
总cycle:146%
后来的执行时间
CPI * Ins * CycleTime
146% * Ins * 8ns
就是1290%ins vs 1168%ins(时间)(ins是指令数)
速度差异是1.1倍,后来的较快
第8
TLB找到了=>知道他在mem中的哪个位置,直接去那个位置找
=>1次TLB,1次mem
TLB找不到=>先去查表,表几层就查几次
=>例如one-level:
=>一次查TLB 一次查表(mem) 最后一次知道在哪了去拿(mem)
=>1次TLB,2次mem
存取的花费=>TLB:50ns , Mem:300ns
(A)90%hit , one-level
90%*(50+300) +
10%*(50+300+300)
= 380
题目说390,错
(B)99%hit , one-level
99%*(50+300) +
1% *(50+300+300)
= 353
题目说356,错
(C)90%hit , two-level
90%*(50+300) +
10%*(50+300+300+300)
=410 对
(D)一样的算式...
356
(E)99%hit , three-level
359
: 遇到这种计算都不太会算(但是好像蛮常考...)
: 拜托能给我详细的解法,谢谢大家!!
作者: shanbb (Moriz)   2015-01-09 17:23:00
好详细的第七题 感谢~~
作者: skellroyal (skellroyal)   2015-01-09 18:41:00
原来我想错j和b跳走的stage,答案算出来还对XD 感谢K大
作者: winnie48 (winnie)   2015-01-09 19:14:00
太感谢了!我都懂了!

Links booklink

Contact Us: admin [ a t ] ucptt.com