# 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.