CACHE的Miss和Hit


1.L1 CACHE的Miss和Hit

1.1 Read Miss

見2.1。

1.2 Write Miss

L1D是Read-allocate CACHE,意味着僅在發生Read Miss時才會讀入新的行。如果寫Miss發生,數據通過一個Write Buffer寫到低一級內存,從而把L1D CACHE旁路。寫buffer包含4個entries,每個entry是64位寬。

1.3 Write Hit

         發生寫命中,數據被寫到CACHE中,但並不立刻就送到低一級內存。既然CACHE的類型是write-back,那么當CACHE中的數據被CPU寫操作修改后,在以后某個時間會回寫到內存中。為了回寫修改的數據,你必須知道哪個行被CPU修改。為了這個目的,每個行都有一個Dirty狀態,只要CPU寫一個CACHE行,那么這個行的dirty位就設為1。,只有dirty行才會因為被驅逐而回寫到內存,如果行沒有被修改,也就是這一行是Clean,那么它的內容會被廢棄。回寫操作也可以由程序指令來主動觸發。

2.L2 CACHE的Miss和Hit

2.1 Read Miss和Hit

CPU對一個可CACHE的外部內存產生讀請求,如果在L1(可能是L1P或L1D)發生Miss,再如果這個地址在L2 CACHE中也Miss,那么對應行被讀入到L2 CACHE。LRU位決定哪個Way的Line Frame被定位取代,如果這個Line Frame包含Dirty數據,它首先在新的行去進來之前被writeback到外部內存(如果這個Line也包含在L1D中,則L1D中的這個Line首先在L2這一行送到外部內存之前被writeback到L2),形成的L1行(包含請求的地址)被送到L1,L1存儲這行數據,並最終把它送給CPU。之后,如果新的Line代替的是一個Dirty行,則這行寫到L2 CACHE中。從這個過程我們發現L2和L1 CACHE是一致的。

         如果L2命中,則對應行直接送到L1

         對於不可CACHE的外部內存區域,請求的數據簡單地直接由外部內存送到CPU,不會存儲在任何CACHE中。

2.2 Write Miss和Hit

         CPU對外部可CACHE的內存進行寫請求,這個數據地址在L1D中Miss,於是通過Write buffer送到L2,如果L2檢測到這個地址是Miss,對應的L2 CACHE Line從外部內存取進來,然后更新。LRU位決定哪個Way的Line Frame被定位取代,如果這個Line Frame包含Dirty數據,它首先在新的行去進來之前被writeback到外部內存。注意這個行不會存儲在L1D,所以如果在L1D中Miss,因為L1D是僅read-allocate的,絕對不會因為寫操作而修改CACHE內容。當然如果被L1D命中,則直接修改L1D內容。

         如果L2命中,直接修改L2。

         對於不可CACHE的外部內存區域,請求的數據簡單地直接寫到外部內存,不會存儲在CACHE中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM