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