根據(jù)不同的分類標(biāo)準可以按以下3種方法對Cache進行分類。
?1)數(shù)據(jù)cache和指令cache
?● 指令cache:指令預(yù)取時使用的cache。
?● 數(shù)據(jù)cache:數(shù)據(jù)讀寫時使用的cache。
如果一個存儲系統(tǒng)中指令cache和數(shù)據(jù)cache是同一個cache,稱系統(tǒng)使用了統(tǒng)一的cache。反之,如果是分開的,那么稱系統(tǒng)使用了獨立的cache;如果系統(tǒng)中只包含指令cache或者數(shù)據(jù)cache,那么在配制系統(tǒng)時可以作為獨立的cache使用了。
使用獨立的數(shù)據(jù)cache和指令cache,可以在同一個時鐘周期中讀取指令和數(shù)據(jù),而不需要雙端口的cache,但這時候要注意保證指令和數(shù)據(jù)的一致性。
?2)寫通(write-through)cache和寫回(write-back)cache
?● 寫回cache CPU在執(zhí)行寫操作時,被寫的數(shù)據(jù)只寫入cache,不寫入主存,僅當(dāng)需要替換時,才把已經(jīng)修改的cache塊寫回到主存中,在采用這種更新算法的cache快表中,一般有一個修改位,當(dāng)一塊中的任何一個單元被修改時,這一塊的修改位被設(shè)置為1,否則這一塊的修改位仍保持為0;在需要替換這一塊時,如果對應(yīng)的修改位為1,則必須先把這一塊寫到主存中去之后,才能調(diào)入新的塊,否則,只要用新調(diào)入的塊覆蓋該塊即可。
?● 寫通cache CPU在執(zhí)行寫操作時,必須把數(shù)據(jù)同時寫入cache和主存,這樣,在cache的快表中就不需要“修改位”,
當(dāng)某一塊需要替換時,也不必把這一塊寫回到主存中,新調(diào)入的塊可以立即把這一塊覆蓋掉。
寫回cache和寫通cache的優(yōu)缺點比較如下表所示。
寫回cache與寫通cache比較
?3)讀時分配(read-allocate)cache和寫時分配(write-allocate)cache
?● 讀時分配cache當(dāng)進行數(shù)據(jù)寫操作時,如果cache沒命中,只是簡單地將數(shù)據(jù)寫入主存中,主要在數(shù)據(jù)讀取時,才進行cache內(nèi)容預(yù)取。
?●寫時分配cache當(dāng)進行數(shù)據(jù)寫操作時,如果cache未命中,cache系統(tǒng)將會進行cache內(nèi)容預(yù)取,從主存中將相應(yīng)的塊讀取到cache中相應(yīng)的位置,并執(zhí)行寫操作,把數(shù)據(jù)寫入到cache中。對于寫通類型的cache,數(shù)據(jù)將會同時寫入到主存中,對于寫回類型的cache,數(shù)據(jù)將在合適的時候?qū)懟氐街鞔嬷小?/p>
由于寫操作分配cache增加了cache內(nèi)容預(yù)取的次數(shù),增加了寫操作的開銷,但同時可能提高cache的命中率,因此這種技術(shù)對于系統(tǒng)整體性能的影響與程序中讀操作和寫操作的數(shù)量有關(guān)。
Cache替換算法
隨機替換算法
通過一個偽隨機數(shù)發(fā)生器產(chǎn)生一個偽隨機數(shù),用新塊編號為該偽隨機數(shù)的cache塊替換掉。這種算法很簡單且容易實現(xiàn),但沒有考慮程序的局部性特點,也沒有利用歷史上塊地址流的分布情況,因而效果較差,同時這種算法不易預(yù)測最壞情況下cache的性能。
輪轉(zhuǎn)替換算法
維護一個邏輯的計數(shù)器,利用該計數(shù)器依次選擇將要被替換出去的cache塊。這種算法容易預(yù)測在最壞情況下cache的性能。但在程序發(fā)生很小的變化時,可能造成cache平均性能的急劇變化,這是它的一個明顯缺點。
-
cpu
+關(guān)注
關(guān)注
68文章
10908瀏覽量
213109 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7157瀏覽量
89662 -
存儲
+關(guān)注
關(guān)注
13文章
4359瀏覽量
86202 -
Cache
+關(guān)注
關(guān)注
0文章
129瀏覽量
28445
發(fā)布評論請先 登錄
相關(guān)推薦
![](https://file1.elecfans.com/web2/M00/84/35/wKgZomRl_0mASjQlAAA1tQrEakI922.png)
在嵌入式中為什么要用到Linux系統(tǒng)呢
淺析cache控制器的分配策略與替換策略
基于修正LRU的壓縮Cache替換策略
基于BWDSP指令Cache的PLRU替換算法研究
一種有效的Cache優(yōu)化替換策略
![一種有效的<b class='flag-5'>Cache</b>優(yōu)化<b class='flag-5'>替換</b>策略](https://file.elecfans.com/web2/M00/49/68/poYBAGKhwK-AHePmAAAV_kXCPRg787.jpg)
OrCAD教程:如何對元件進行替換與更新
![OrCAD教程:如何對元件進行<b class='flag-5'>替換</b>與更新](https://file1.elecfans.com//web2/M00/A7/41/wKgZomUMQ12ASqQ3AAAQsTeFtj0252.jpg)
寄存器和cache的區(qū)別介紹
Python替換字符串的新方法
Python替換字符串的新姿勢
![Python<b class='flag-5'>替換</b>字符串的新姿勢](https://file.elecfans.com/web2/M00/94/17/pYYBAGP4JXiAHsODAACyZ0F2pxA930.png)
在組相聯(lián)cache中,用于替換cache line的算法有哪些?
Python 中怎么來實現(xiàn)類似 Cache 的功能
基于flashtext模塊使用FlashText算法進行字符串查找和替換
![基于flashtext模塊使用FlashText<b class='flag-5'>算法</b>進行字符串查找和<b class='flag-5'>替換</b>](https://file1.elecfans.com/web2/M00/AC/F4/wKgZomU_ERiABjMAAABEfG00970779.jpg)
評論