# Ch.5-2 Basics of Cache ###### tags: `Computer Organization`, `計算機組織` ## Review 注意設計memory hierarchy的時候有四大重要問題: 1. block placement 2. block identification 3. block replacement 4. write strategy ## Direct-Mapped Cache :::info **KEY POINT**:一個蘿蔔一個坑 :::  ### Block Placement memory灰色的部分就對應cache灰色的部分 memory橘色的部分就對應cache橘色的部分 假設memory跟cache都有2的冪次方個block 則memory對應的cache block就是取餘數 (圖中memory有32個block,cache有8個blcok,則memory中2、10、18、26除以8的餘數都是2,所以這幾個對應到cache都是第2個block) (最簡單的判斷方式就是看低位元,cache有$2^N$個block,就看memory各個block的最低$N$位元) ### Block Identification 1. valid bit:判斷資料是否有效(剛開機的都是無效,因為是之前存留下來的,所以要將valid bit設為0,表示這資料不可以用) 2. tag:memory address中高位元的部分。因為從block placement中可以發現,有多個memory block會共用一個cache block,所以需要有個tag來判斷現在在cache中的資料是哪一個memory block。 ### Block Replacement 識別block之後,若發現不是自己要的,就要找新的對應的資料再放入cache 如果cache中已經有東西,如何選擇要擠掉誰呢? >選擇block編號一樣的! (注意valid bit不一定是0或1,但tag一定和要換進去的不一樣,不然就沒有換的必要了) (不過通常會選擇優先換掉valid bit = 0的無效資料) ### Write Strategy #### Cache Misses 我們常說的「跟記憶體拿資料」實際上是跟cache拿資料 - 如果cache hit,CPU就可以直接拿,速度很快 - 如果cache miss,CPU就要到下一層級的儲存單位拿資料(可能是cache/memory) :::info cache miss有兩種狀況: 1. Instruction cache miss:連指令是什麼都不知道→直接重新抓指令 2. Data cache miss:沒有需要用的資料→抓到cache中後再重新讀取 ::: #### Data-write hit的狀況 如果發生cache hit,就會取出其中資料來用,可能會寫入新的值。 此時若只更新cache,沒有更新memory,就會發生inconsistent。 當資料不同步,就可能影響後續其他運作。 有以下解決方法: 1. Write through 有新資料就同步給memory 缺點:會使得CPU運作下降 原因:(舉例) 假設`base CPI = 1`,有10%的資料是inconsistent的要被更新,每寫入一次記憶體要花費100個cycle 則`effective CPI = 1 + 0.1 * 100 = 11` 會變成原本的11倍之多,是我們所不樂見的 2. Write buffer 有新資料會同時放入cache跟buffer,然後CPU繼續做自己的事情,buffer中的資料再慢慢更新記憶體 缺點:buffer可能會滿,CPU還是要等到有空的buffer能用才可以繼續運作  一般write buffer不會太大,大約<font color=red>四個</font>;運作機制像queue一樣是**FIFO**。 CPU頻率若沒有太快,通常buffer不會滿, 可是當寫入頻率高,buffer來不及把資料更新給RAM時又有新資料來臨, 這樣CPU就要停下來,會造成系統效能下降。 3. Write-back 加入一個dirty bit的機制 有資料更新,只更動cache,不主動寫回memory 運作:剛開始dirty bit = 0 如果cache的資料有被更新,就令dirty = 1 下次要更新時,如果要更新的block的dirty = 0則直接更新 dirty = 1則將cache的資料放入write buffer再更新cache #### Data-write miss的狀況 解決方法: 1. Write-allocate:重新把資料從memory放入cache 2. Wrtie around:不要把資料寫入cache了,直接寫入memory 如何選擇? write around適合在程式一開始宣告並初始化一堆變數時使用,因為往往不會很快就用到他們;write-allocate則會用在預期很快就要用到的狀況。 所以write miss發生時,可以選擇要把資料放到cache還是memory ``` 通常write hit是使用write back的話,write miss會搭配write allocation 而write hit是使用write through的話,write miss會搭配write around ``` ### Example 1. P30-35頁 2. P36,假設cache大1KB,每個block大小是1 word->則有1K個blocks 3. P37,假設有64個blocks,每個block大小是16 bytes;問位址1234會在哪個block? 4. MIPS的cache architecture   ## Memory Design to Support Cache **調整memory設計以提升cache效能** 主要有三種方法將memory的資料傳給cache:  1. One-word-wide memory organization memory、cache的寬度是1 word 所以傳輸用的bus寬度也是1個word 缺點:慢 2. Wide memory organization memory、cache的寬度是4 word 所以傳輸用的bus寬度也是4個word 缺點:貴 3. Interleaved memory organization memory是4個word,但是cache只有1個word 採用寬度為1個word的bus 特點:速度慢了一點,但是省錢很多  ``` 如果沒有用interleave,記憶體之間的資料存取必須等待memory cycle過完才可以 (如圖中上半部) 如果採用interleave,則可以同時做memory access,再慢慢讓bus傳輸 ``` ### Example 假設memory傳資料給cache有以下硬體條件: * 1 memory bus clock to send the address傳輸地址 * 15 memory bus clocks for each DRAM access initiated做memory access * 1 memory bus clock to send a word of data傳輸資料 * A cache block = 4 words 則有以下各種organizations的狀況:  1. 一個word的寬度的bank & bus 傳輸一個block(4 words)所需的資料 需要先傳1次地址,再傳4次資料,再存取4次資料 2. 兩個word的寬度的bank & bus 傳輸一個block(4 words)所需的資料 需要先傳1次地址,再傳2次資料,再存取2次資料 3. 四個word的寬度的bank & bus 傳輸一個block(4 words)所需的資料 需要先傳1次地址,再傳1次資料,再存取1次資料 4. 四個word的寬度的bank & 一個word寬度的bus 傳輸一個block(4 words)所需的資料 需要先傳1次地址,再傳1次資料,再存取4次資料
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up