ARM存儲(chǔ)器之:高速緩沖存儲(chǔ)器Cache
15.3.6Cache的替換策略
在Cache訪問過程中,發(fā)現(xiàn)查找的Cache行已經(jīng)失效,則需要從主存中調(diào)入新的行到Cache中。在采用組相聯(lián)的Cache中,一個(gè)來自主存的行可以放入多個(gè)Cache組中。當(dāng)所有組中的對(duì)應(yīng)行都已經(jīng)裝滿時(shí),就要使用Cache替換算法,從這些組中找出一個(gè)Cache,把它調(diào)回到主存中原來存放它的地方,騰出新行來存放新調(diào)入的行。被選中替換的Cache行被稱為丟棄者(victim)。如果丟棄者中包含有效的臟數(shù)據(jù),那么在該行被寫入新數(shù)據(jù)之前,控制器必須把該行中的數(shù)據(jù)寫到主存。選擇和替換丟棄Cache行的過程被稱為淘汰(eviction)。
Cache控制器選擇下一個(gè)丟棄Cache行的策略被稱為替換策略。在ARM常用的替換算法有兩種:輪轉(zhuǎn)算法和隨機(jī)替換算法。
輪轉(zhuǎn)算法又叫循環(huán)法,這種算法維護(hù)一個(gè)邏輯計(jì)數(shù)器,每進(jìn)行一次替換,計(jì)算器加1,當(dāng)計(jì)算器達(dá)到最大值時(shí),就被復(fù)位成預(yù)先定義好的一個(gè)基值。這種算法容易預(yù)測(cè)最壞情況下的Cache性能。但它一個(gè)明顯缺點(diǎn)就是,在程序發(fā)生很小變化時(shí),可能造成Cache性能急劇下降。
隨機(jī)算法從特定的位置上隨機(jī)地選出一行替換出去。它通過一個(gè)隨機(jī)發(fā)生器來完成上述操作。當(dāng)每次需要替換Cache行時(shí),隨機(jī)發(fā)生器將產(chǎn)生一個(gè)隨機(jī)數(shù),用新行將編號(hào)為該隨機(jī)數(shù)的行替換出去。這種算法與輪轉(zhuǎn)算法最大的區(qū)別在于它在每次產(chǎn)生替換行時(shí),增加的是一個(gè)非連續(xù)值,這個(gè)值是由控制器隨機(jī)產(chǎn)生的。同樣,當(dāng)丟棄計(jì)算器達(dá)到最大值時(shí),會(huì)被復(fù)位成預(yù)先定義好的一個(gè)基值。
相比之下,隨機(jī)算法沒有考慮到程序的局部性特點(diǎn),因而效果有時(shí)不盡人意,同時(shí)這種算法不易預(yù)測(cè)最壞情況下Cache性能。而輪轉(zhuǎn)法就有更好的可預(yù)測(cè)性,容易預(yù)測(cè)最壞情況下Cache性能,在一些實(shí)時(shí)系統(tǒng)中,十分重視這一點(diǎn)。但是,輪轉(zhuǎn)法替換策略在存儲(chǔ)器訪問發(fā)生很小變化時(shí),可能造成Cache性能有較大變化。
表15.13顯示了目前比較流行的ARM核所使用的策略。
表15.13 常見ARM核使用的替換策略
內(nèi)核 | 寫策略 | 替換策略 |
ARM720T | 直寫法 | 隨機(jī) |
ARM740T | 直寫法 | 隨機(jī) |
ARM920T | 直寫法、回寫法 | 隨機(jī)、輪轉(zhuǎn) |
ARM940T | 直寫法、回寫法 | 隨機(jī) |
ARM926EJ-S | 直寫法、回寫法 | 隨機(jī)、輪轉(zhuǎn) |
ARM946E | 直寫法、回寫法 | 隨機(jī)、輪轉(zhuǎn) |
ARM1020E | 直寫法、回寫法 | 隨機(jī)、輪轉(zhuǎn) |
ARM1026EJS | 直寫法、回寫法 | 隨機(jī)、輪轉(zhuǎn) |
IntelStrongARM | 回寫法 | 輪轉(zhuǎn) |
IntelXscale | 直寫法 | 輪轉(zhuǎn) |
15.3.7與Cache相關(guān)的編程接口
與Cache編程相關(guān)的CP15的寄存器共有3個(gè),它們分別為c1、c7及c9。
(1)寄存器c1中與Cache相關(guān)的位
c1寄存器在前面CP15寄存器一節(jié)中已經(jīng)介紹過,下面對(duì)Cache的控制位進(jìn)行詳細(xì)介紹。
表15.14顯示了c1中與Cache有關(guān)位的作用。
表15.14 c1中與Cache相關(guān)的位
相關(guān)位 | 作用 |
C(bit[2]) | 當(dāng)數(shù)據(jù)Cache和指令Cache分開時(shí),本控制位禁止/使能數(shù)據(jù)Cache 當(dāng)數(shù)據(jù)Cache和指令Cache統(tǒng)一時(shí),本控制位禁止/使能整個(gè)Cache 0:禁止Cache 1:使能Cache 如果系統(tǒng)中不含Cache,讀取時(shí)該位返回0,寫入時(shí)忽略該位 當(dāng)系統(tǒng)中Cache不能禁止時(shí),讀取返回1,寫入時(shí)忽略該位 |
續(xù)表
相關(guān)位 | 作用 |
I(bit[12]) | 當(dāng)數(shù)據(jù)Cache和指令Cache是分開的,本控制位禁止/使能指令Cache 0:禁止指令Cache 1:使能指令Cache 如果系統(tǒng)中使用統(tǒng)一的指令Cache和數(shù)據(jù)Cache或者系統(tǒng)中不含Cache,讀取該位時(shí)返回0,寫入時(shí)忽略該位 當(dāng)系統(tǒng)中的指令Cache不能禁止時(shí),讀取該位返回1,寫入時(shí)忽略該位 |
RR(bit[14]) | 如果系統(tǒng)中Cache的淘汰算法可以選擇的話,本控制位選擇淘汰算法 0:選擇常規(guī)的淘汰算法,如隨機(jī)淘汰算法 1:選擇預(yù)測(cè)性的淘汰算法,如輪轉(zhuǎn)(round-robin)淘汰算法 如果系統(tǒng)中淘汰算法不可選擇,寫入該位時(shí)被忽略,讀取該位時(shí),根據(jù)其淘汰算法可以簡(jiǎn)單地預(yù)測(cè)最壞情況,并返回1或者0 |
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
評(píng)論