網(wǎng)頁(yè)設(shè)計(jì)與網(wǎng)站建設(shè)大作業(yè)友情鏈接搜讀
目錄
- 1.計(jì)算機(jī)存儲(chǔ)層次結(jié)構(gòu)
- 2.緩存相關(guān)概念
- 3.緩存組織方式
- 4.Cache回寫機(jī)制
- 5.Cache性能量化
1.計(jì)算機(jī)存儲(chǔ)層次結(jié)構(gòu)
計(jì)算機(jī)存儲(chǔ)層次結(jié)構(gòu)可以看作是一個(gè)金字塔,越靠上層,容量越小,速度越快
- L0:寄存器----CPU的寄存器保存著Cache取出的字,你要玩過單片機(jī)對(duì)這個(gè)肯定不陌生
- L1:高速緩存SRAM----L1中保存著L2取出的緩存行
- L2:高速緩存SRAM----L2中保存著L3取出的緩存行
- L3:高速緩存SRAM----L3中保存著主存中取出的緩存行,L1-L3也就是我們常說的三級(jí)緩存,用的都是SRAM芯片實(shí)現(xiàn),速度快
- L4:主存DRAM----主存保存著從本地磁盤取出的磁盤塊,用的是DRAM芯片實(shí)現(xiàn)
- L5:本地磁盤----保存著從遠(yuǎn)程網(wǎng)絡(luò)或者服務(wù)器磁盤上取出的文件
- L6:遠(yuǎn)程二級(jí)存儲(chǔ)----如web服務(wù)器
那為什么需要緩存呢?我看下面的一張圖,此圖說明了處理器的性能發(fā)展遠(yuǎn)遠(yuǎn)比內(nèi)存性能的發(fā)展要快,而處理器訪問內(nèi)存的速度會(huì)因?yàn)樾阅懿钐蠖档?#xff0c;因此出現(xiàn)了高速緩存Cache
往常的PMD(個(gè)人移動(dòng)設(shè)備)的存儲(chǔ)結(jié)構(gòu)如下圖,都是通過CPU+Cache+Memory+Flash的形式,層級(jí)傳遞
2.緩存相關(guān)概念
- 緩存命中----當(dāng)程序需要在底層次的存儲(chǔ)原件里面的數(shù)據(jù)的時(shí)候,發(fā)現(xiàn)在比它高層次的存儲(chǔ)原件中存在數(shù)據(jù),那么程序就不用去訪問底層次的存儲(chǔ)原件,直接訪問高層次的原件,這就叫緩存命中。舉個(gè)例子:當(dāng)CPU想獲得L4層的主存中的某數(shù)據(jù)s,卻發(fā)現(xiàn)在L2Cache有數(shù)據(jù)s,這就可以直接訪問快速的L2層取得數(shù)據(jù),這就是緩存命中。
- 緩存不命中:高層中沒有想要的數(shù)據(jù),只能替換和驅(qū)逐高層次的一些塊,再去訪問。
- 緩存不命中/缺失的三種種類 (1)強(qiáng)制缺失:第一次訪問緩存必定不命中,因?yàn)榈谝淮尉彺胬锩媸强盏?#xff08;2)容量缺失:緩存不能包含程序運(yùn)行期間所需要的全部塊,容量已經(jīng)滿了(3)沖突缺失:多個(gè)塊映射到一個(gè)塊中的組中,明明有空位給你緩存你卻不要去空位,偏要擠出其他塊。
3.緩存組織方式
高速緩存一般被組織成這樣的情形:
①高速緩存分為若干個(gè)組
②組又分為若干個(gè)行
③行包含了數(shù)據(jù)塊、有效位、標(biāo)記位
④可以用向量(S,E,B,m)來表示高速緩存的組織情況
- 直接相聯(lián)高速緩存:根據(jù)每個(gè)組的高速緩存行數(shù)E, 高速緩存被分為不同的類。每個(gè)組只有一行(E = 1)的高速緩存稱為直接映射高速緩存。
- 組相聯(lián)高速緩存:直接映射高速緩存很容易出現(xiàn)沖突不命中的情況,因?yàn)槊總€(gè)組只有一行。組相聯(lián)高速緩存放松了這條限制,所以每個(gè)組都保存有多于一個(gè)的高速緩存行。一個(gè)1<E<C/B的高速緩存通常稱為E路組相聯(lián)高速緩存。
- 全相聯(lián)高速緩存:全相聯(lián)高速緩存是由一個(gè)包含所有高速緩存行的組組成的(只有一個(gè)組)
4.Cache回寫機(jī)制
①兩種寫入策略
- 寫直達(dá):信息被寫入緩存的過程中同時(shí)寫入低一級(jí)的存儲(chǔ)器的塊
- 寫回:信息被寫入緩存,只有塊被替換踢掉的時(shí)候才被寫回低一級(jí)存儲(chǔ)器進(jìn)行更新
②兩種寫的比較
- 寫直達(dá)雖然占了很多帶寬(通過寫緩沖區(qū)減少停頓),但是保持了數(shù)據(jù)一致性,緩存永遠(yuǎn)是最新的
- 寫回策略少帶寬,節(jié)省功耗,但是在一致性方面有點(diǎn)問題
③寫缺失時(shí)采用的兩種策略
- 寫分配:如果寫缺失,把寫缺失的塊緩存進(jìn)來,然后再進(jìn)行寫命中時(shí)的操作(通常跟寫回搭配)
- 非寫分配:直接修改低一級(jí)的存儲(chǔ)器(通常跟寫直達(dá)搭配)
其實(shí)說白了還是要保證Cache一致性的問題
5.Cache性能量化
①一些概念
- 缺失率:一次訪問存儲(chǔ)器缺失的概率
- 缺失數(shù):一條指令缺失的概率
- 相互關(guān)系:缺失數(shù) = 缺失率*存儲(chǔ)器訪問指令數(shù)在指令數(shù)的占比(IC)
- 命中時(shí)間:緩存命中的時(shí)間
- 缺失代價(jià):將塊從存儲(chǔ)器讀取到緩存所需要的時(shí)間
②重要公式
存儲(chǔ)器的平均訪問時(shí)間 = 命中時(shí)間 + 缺失率 * 缺失代價(jià)
③6個(gè)基本優(yōu)化方案
根據(jù)上述公式提出優(yōu)化方案:
- 增大塊的大小降低缺失率(可能增加沖突缺失,到后面會(huì)增加缺失率,也可能增加缺失代價(jià))
- 增大緩存以降低缺失率(延長(zhǎng)命中時(shí)間,一般采用在片外緩存)
- 提高相聯(lián)度以降低缺失率(減小沖突缺失,但會(huì)延長(zhǎng)命中時(shí)間)
- 采用多級(jí)緩存降低缺失代價(jià)(市面處理器基本上就是多級(jí)緩存)
- 使讀缺失的優(yōu)先級(jí)高于寫缺失,以降低缺失代價(jià)
- 避免索引期間進(jìn)行地址轉(zhuǎn)換,以縮短命中時(shí)間(跟虛擬內(nèi)存相關(guān))