作者wheels ()
看板Grad-ProbAsk
標題Re: [理工] [計組] pipeline
時間Wed Nov 30 01:42:25 2011
※ 引述《wsx02 (無酒罐)》之銘言:
: functional unit times
: memory access:200ps, ALU operation:100ps, register:50ps
: instruction frequencies
: 25%loads, 10%stores, 11%branches, 2%jumps, 52%ALU operations
: suppose the memory access became 2 clock cycles long
: half of the load instructions are immediately followed by an instruction that
: uses the result, that the branch delay on misprediction is 1 clock cycle,
: and that one-quarter of the branches are misspredicted. Assume that jumps
: always pay 1 full clock cycle of delay, so their average time is 2 clock cyles
: for branches assume the sasme prediction accuracy, but increase the penalty as
: appropriate. For loads, assume that the subsequent instructions depend on the
: load with a probability of 1/2, 1/4, 1/8, 1/16, and so on. That is, the
: instruction following a load by two has a 25% probability of using the load
: result as one of its sources.
: 求pipeline的execution time
: 這是張凡下冊63頁(4)的題目
你的題目是(1)跟(4)的混合版本...
如果是用(3)的架構來看的話,IM有兩個stage並非一個,
所以mispredition跟jump的penalty都會是2不會是1。
我用原本(4)的題目回你吧,如果想照你的題目就把關鍵數字改回來就好。
這題有一個重要的假設它沒寫,
就是沒有structure hazard產生,不然答案不會像是他寫的那樣。
這點我有去問過張凡。
如果現在沒有structure hazard產生,
也就是只有data hazard跟control hazard,而且是full forwarding,
現在我們已經有了各個指令的比例和執行時間,
而且題目還說memory access花2個clock cycles,
很明顯的clock cycle time = 100ps,
所以我們打算把每個指令的CPI算出來乘上它的比例再相加,最後乘上cycle time即可。
一開始先找出不會有hazard的指令:sotre跟ALU。
這兩個指令就直接設CPI = 1就好了。
第二步來找control hazard的指令:jump跟branch。
jump因為penalty為2,所以一定會多兩個clock的penalty,所以CPI = 3。
branch就要分開來看了,misprediction的penalty為2,
所以猜錯的CPI為3,猜對的話CPI為1,
又猜錯的比例是1/4 = 0.25,所以branch的CPI = (1 - 0.25) * 1 + 0.25 * 3 = 1.5
第三步最麻煩了,就是data hazard的部分:load
load-use data hazard有兩種:EX hazard跟MEM hazard。
原本的MEM hazard可以用forwarding解,EX hazard也只要停一個clock,
但是改成(3)的架構後,
MEM hazard也需要停一個clock才能把memory load出的東西forward給EX,
EX hazard更是要停兩個clock才能forward。
知道了要停多少後,接下來就要算這兩種出現的機率了!
EX hazard題目說出現的機率是1/2 = 0.5,
MEM hazard雖然題目說是1/4 = 0.25,
但是真正出現的前提是不能有EX hazard出現,所以機率是(1 - 0.5) *0.25 = 0.125,
剩下的load指令不會有hazard出現,其機率就是(1 - 0.5 - 0.125) = 0.325。
於是load的CPI = 3 * 0.5 + 2 * 0.125 + 1 * 0.325 = 2.125。
終於可以算avg CPI了,把各個指令的比例乘上上面算出來的各個CPI就是答案!
: 另外還想請問63頁的(3) pipeline的EX階段是同時進行讀和寫嗎?
EX階段一次只有一個指令會用到啊,不懂你的意思@_@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.24.157.177
推 qwertz:推台大軟今天 11/30 01:57
推 hochiko:真的很強堅持下去 11/30 02:04
推 showyoulovex:好強 推w大 猛 11/30 02:37
推 i78524:原來W大是台大的...難怪強到逆天.... 11/30 11:11
→ wheels:噗,你被我朋友騙了,我只是現在在台大念書而已= = 11/30 12:43
推 showyoulovex:w真的很猛 神人也~ 11/30 13:05