取環(huán) CPU的一二三級(jí)緩存有什么用處?
CPU的一二三級(jí)緩存有什么用處?先看看為什么CPU會(huì)有L1、L2、L3這樣的緩存設(shè)計(jì),正如下圖所示,現(xiàn)在的處理器太快了,而從內(nèi)存中讀取數(shù)據(jù)實(shí)在太慢(一個(gè)是因?yàn)閮?nèi)存本身速度不夠,另一個(gè)是因?yàn)樗xCPU太
CPU的一二三級(jí)緩存有什么用處?
先看看為什么CPU會(huì)有L1、L2、L3這樣的緩存設(shè)計(jì),正如下圖所示,現(xiàn)在的處理器太快了,而從內(nèi)存中讀取數(shù)據(jù)實(shí)在太慢(一個(gè)是因?yàn)閮?nèi)存本身速度不夠,另一個(gè)是因?yàn)樗xCPU太遠(yuǎn)了,總的來(lái)說(shuō)需要讓CPU等待幾十甚至幾百個(gè)時(shí)鐘周期),這個(gè)時(shí)候?yàn)榱吮WCCPU的速度,就需要延遲更小速度更快的內(nèi)存提供幫助,而這就是緩存。
現(xiàn)在讓我們看看多級(jí)緩存(L1,L2,L3)的好處,而不僅僅是單個(gè)緩存。
1、高速緩存越靠近ALU等核心單元,訪問(wèn)速度就越快,所以會(huì)有靠近核心的L1緩存,雖然它小,但它真的快??;
2、高速緩存的容量越大,緩存命中(Cache hit)就越高,所以當(dāng)L1沒(méi)有命中時(shí),需要一個(gè)容量更大的但速度也不慢的緩存來(lái)提供數(shù)據(jù),這就是L2;
3、更大的緩存意味著更高的命中,同時(shí)也意味著更高的成本、更慢的速度、更多的晶體管,更大的面積,因此它不可能靠近所有核心單元,這就是L3;
這就是CPU緩存的層次結(jié)構(gòu),基于性能、成本、設(shè)計(jì)上的一個(gè)平衡,L1緩存可以最大化單個(gè)內(nèi)核的位置和速度(甚至分離指令和數(shù)據(jù))。L2高速緩存會(huì)更大些,命中更高,速度稍慢,一般還是位于每個(gè)核心內(nèi),而L3緩存通常在系統(tǒng)中的所有內(nèi)核間共享,提供合理的速度和容量。比如英特爾Core i7-8700K它的L1大小只有64K,還分為32K數(shù)據(jù)和32K指令,L2大小為256K,L3達(dá)到12MB。
現(xiàn)代CPU的高速緩存體系結(jié)構(gòu)是非常復(fù)雜的,其中包括硬件預(yù)取和數(shù)據(jù)轉(zhuǎn)發(fā),以便能提供最佳的高速緩存命中機(jī)會(huì)。有些CPU甚至還加入了L4緩存。
緩存什么意思?
在計(jì)算中,緩存是存儲(chǔ)數(shù)據(jù)的硬件或軟件組件,以便將來(lái)可以提供更快的數(shù)據(jù)請(qǐng)求;存儲(chǔ)在高速緩存中的數(shù)據(jù)可能是早期計(jì)算的結(jié)果,也可能是存儲(chǔ)在其他地方的數(shù)據(jù)的副本。當(dāng)可以在緩存中找到請(qǐng)求的數(shù)據(jù)時(shí),會(huì)發(fā)生緩存命中,而當(dāng)無(wú)法找到時(shí),則會(huì)發(fā)生緩存丟失。緩存命中是通過(guò)從緩存中讀取數(shù)據(jù)來(lái)實(shí)現(xiàn)的,這比重新計(jì)算結(jié)果或從較慢的數(shù)據(jù)存儲(chǔ)中讀取數(shù)據(jù)要快;因此,緩存中提供的請(qǐng)求越多,系統(tǒng)執(zhí)行得越快。
為了節(jié)省成本并能夠有效利用數(shù)據(jù),緩存必須相對(duì)較小。然而,緩存已經(jīng)在許多計(jì)算領(lǐng)域得到證明,這是因?yàn)榈湫偷挠?jì)算機(jī)應(yīng)用程序訪問(wèn)數(shù)據(jù)時(shí)具有高度的訪問(wèn)局部性。這種訪問(wèn)模式表現(xiàn)出時(shí)間局部性(請(qǐng)求最近已經(jīng)請(qǐng)求的數(shù)據(jù))以及空間局部性(請(qǐng)求物理上存儲(chǔ)在已經(jīng)請(qǐng)求的數(shù)據(jù)附近的數(shù)據(jù))。