作者Transfat (Transfat)
看板Grad-ProbAsk
標題[理工] 103台大電機計結 第5題
時間Sat Jan 14 16:40:32 2017
http://imgur.com/a/IyaTs
這題困擾我好久,不過版上竟然只有一篇在討論
(a)使用Write allocate+Write through
Read hit:我一開始看到就有個疑問,CPU和Cache之間資了傳輸為什麼不用算到bus裡?這
題的解答bus使用量似乎只有算CPU和Memory, Memory和Cache之間的資料傳輸量
Read miss:要去Memory讀資料,每次讀一個block=4 words這我ok
Wrtie hit:採用wrtie throguh更新Cache和memory,為什麼每次只要更新1 word? 為什麼
不是每次更新1 block=4 words?
Wrtie miss:採用write allocate, 要從memory把block搬到cache,再寫入cache,同樣的
,這邊搬block要花4 words,但是寫入cache只有1 word?而且這邊如果寫入cache要花1 word
,那為什麼Read hit的時候從cache 班資料到CPU就不用佔用bus bandwidth?(還有write hit
時同時寫入cache和memory只要花1 word? 如果這邊寫入cache要花1 word,同時寫入cache和
memory應該要花2 words吧,假設一次只寫1 word的話)
(b)同(a)只是改數字
__________________________________________________________________________
(c)(d)(e)相同使用write through+write back
Read hit:同(a)的疑問,CPU和cache之間傳輸不用佔bus bandwidth 嗎?
以下都沒問題,寫出來讓大家參考
Read miss:要先把dirty的block(4 words)移回memory(花0.3*4 words),再把要讀出來的
block(4 words)送到CPU(從memory)這邊OK
write hit:用write back,僅更改cache block,並將dirty bit=1, 不用寫入memory , bandwidth=0
write miss:用wirte allocate,將memory 的一個block(4 words)搬到cache,並且同write
hit,所以只要花4 words
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Grad-ProbAsk/M.1484383235.A.C57.html
1F:→ ken52011219: 這題想到就好笑..昨天在寫看到這題就先跳過 01/14 16:43
2F:→ ken52011219: 結果到最後忘記寫 連答案都沒寫QQ 然後就對了 01/14 16:44
3F:→ ken52011219: 建議拿100 年的清大資工題目拿來比較 01/14 16:46
4F:→ yupog2003: cache是做在CPU裡面的,所以CPU跟cache之間傳輸不需要 01/14 17:13
5F:→ yupog2003: 用到bus,因為cache速度需求很高,用bus對他來說太遠太 01/14 17:15
6F:→ yupog2003: 慢,所以都做在CPU裡面,從CPU的規格書裡面都會寫他有 01/14 17:15
7F:→ yupog2003: 多少cache可以看出端倪 01/14 17:15
原來如此
8F:→ yupog2003: 也許write through就只會更新在記憶體中的那個位址的 01/14 17:33
9F:→ yupog2003: 資料?我也是看到這篇才知道@@ 01/14 17:35
似乎是,我看100清大寫說:Because we have write through policy we have to write to main memory on every hit. But we have to write only 1 word.
※ 編輯: Transfat (140.112.25.105), 01/14/2017 17:41:35
10F:→ yupog2003: 現在每天都還會跑出我不懂的東西,真的是很崩潰... 01/14 17:44
聽說這樣子才是會考得好的前兆,如果覺得自己都會的人通常都(?)
11F:→ yupog2003: 是說雖然課本都還是把北橋南橋獨立出來看,但現今的 01/14 17:47
12F:→ yupog2003: 個人電腦CPU已經把北橋整合到CPU裡面了,當然CPU到 01/14 17:48
13F:→ yupog2003: memory的bus還是在 01/14 17:48
14F:→ yupog2003: 喔喔我看到課本寫到這段了,之前沒看到QQ 01/14 17:50
謝謝ken和yu,我搞懂這題了。
※ 編輯: Transfat (140.112.25.105), 01/14/2017 17:52:20
15F:推 DZASHIANG: 請問這份詳解的(c)(d)write miss的部份,為什麼不是算 01/14 20:54
16F:→ DZASHIANG: 寫回dirty block 加上從mem搬入的1block,以c為例,也就 01/14 20:54
17F:→ DZASHIANG: 是10^7*0.2*0.05*(4*0.3+4)=0.052*10^7,這樣算的話c 01/14 20:54
18F:→ DZASHIANG: d選項true 01/14 20:54
這是個好問題,什麼時候要把dirty block寫回memory,網路上幾乎都只說當系統有空的時
候或是有其他使用率更高的address要來取代,或是講一些模稜兩可的話:The data in these locations are written back to the backing store when those data are evicted from the cache. 而103台大電機的答案和100清大的答案都說要在Read miss的時候把dirty block寫回memory. 所以我們就姑且相信他吧
※ 編輯: Transfat (140.112.25.105), 01/14/2017 21:49:28
※ 編輯: Transfat (140.112.25.105), 01/14/2017 21:49:52
※ 編輯: Transfat (140.112.25.105), 01/14/2017 21:50:33
19F:推 DZASHIANG: 我以為清大那題的(b)也就是write back+no-allocate 在 01/14 22:06
20F:→ DZASHIANG: 算write miss的時候,是因為他是no wirte allocate, 01/14 22:06
21F:→ DZASHIANG: 不用寫到cache,直接寫到mem,所以才不用先寫回dirty b 01/14 22:06
22F:→ DZASHIANG: lock。但在witeallocate 的情況下是不是應該先寫回, 01/14 22:06
23F:→ DZASHIANG: 畢竟題目說任何時刻dirty block都佔30%。有錯請指正 01/14 22:06
有道理,可是台大的老師似乎不是這樣想?因為台大這題是出write allocate+wrtie back,
也沒有在write miss的時候寫回dirty block
24F:推 yupog2003: D大沒說我還沒注意到,同樣疑問+1 01/14 23:05
哇這個解答覺得write miss和read miss都要寫回dirty block
27F:推 yupog2003: 原來還有另一種解答,不過這個解答的(a)(b)選項的 01/14 23:26
28F:→ yupog2003: write miss就沒有考慮到write through了 01/14 23:27
的確,因為wrtie through和write allocate一起用很怪,都已經在miss的時候把block搬
到cache了,結果寫入又要一併寫回memory,有種多此一舉的感覺
29F:→ yupog2003: 感覺要各取正確的部份來看XD 01/14 23:28
30F:推 ncku5656: 張凡是說write miss 時就看write allocate會怎麼操作就 01/14 23:37
31F:→ ncku5656: 好 不用在回去做write through 我也不太清楚是怎樣QQ 01/14 23:37
32F:→ yupog2003: 原來張凡有特別提到,那也許應該以老師講的為主... 01/14 23:38
※ 編輯: Transfat (140.112.25.105), 01/15/2017 14:56:03
※ 編輯: Transfat (140.112.25.105), 01/15/2017 15:00:18
33F:推 b10007034: 為什麼我覺得這題的答案意思是dirty block被取代時才 01/29 22:10
34F:→ b10007034: 要寫回去,所以被寫回來的4個word有30%的機會replace 01/29 22:10
35F:→ b10007034: dirty block,所以才會是4+4*0.3 01/29 22:10