來(lái)源:新浪VR
每個(gè)現(xiàn)代處理器都具有少量的高速緩存。在過(guò)去的幾十年中,緩存體系結(jié)構(gòu)變得越來(lái)越復(fù)雜:CPU緩存級(jí)別已增加到三個(gè)級(jí)別:L1,L2和L3,每個(gè)塊的大小都已增加,并且緩存關(guān)聯(lián)性也發(fā)生了一些變化。
但是,在我們深入研究細(xì)節(jié)之前,讓我問(wèn)您,高速緩存到底是什么,為什么需要它?此外,現(xiàn)代處理器由L1,L2和L3緩存組成。這些緩存級(jí)別之間有什么區(qū)別?
高速緩存內(nèi)存與系統(tǒng)內(nèi)存:SRAM與DRAM
高速緩存基于更快(且更昂貴)的靜態(tài)RAM,而系統(tǒng)內(nèi)存則利用了較慢的DRAM(動(dòng)態(tài)RAM)。兩者之間的主要區(qū)別在于,前者由CMOS技術(shù)和晶體管制成(每個(gè)模塊六個(gè)),而后者則使用電容器和晶體管。
DRAM需要不斷刷新(由于漏電),以將數(shù)據(jù)保留更長(zhǎng)的時(shí)間。因此,它消耗的功率明顯更多,并且速度也較慢。SRAM不必刷新,效率更高。但是,較高的價(jià)格阻礙了主流技術(shù)的采用,從而限制了其在處理器緩存中的使用。
緩存在處理器中的重要性?
現(xiàn)代處理器比其80年代和90年代初的原始祖先要光明幾年。如今,高端消費(fèi)類芯片的運(yùn)行頻率超過(guò)4GHz,而大多數(shù)DDR4內(nèi)存模塊的額定頻率都低于1800MHz。結(jié)果,系統(tǒng)內(nèi)存太慢而無(wú)法直接與CPU一起使用而又不會(huì)嚴(yán)重降低它們的速度。這是高速緩存存儲(chǔ)器的來(lái)源。它充當(dāng)兩者之間的中介,存儲(chǔ)小塊重復(fù)使用的數(shù)據(jù),或者在某些情況下,存儲(chǔ)那些文件的存儲(chǔ)器地址。
L1,L2和L3緩存:有什么區(qū)別?
在現(xiàn)代處理器中,按大小增加和速度遞減的順序,高速緩存存儲(chǔ)器分為三個(gè)部分:L1,L2和L3高速緩存。L3高速緩存是最大也是最慢的(第三代Ryzen CPU具有高達(dá)64MB的大型L3高速緩存)高速緩存級(jí)別。L2和L1比L3小得多,并且速度更快,并且每個(gè)內(nèi)核都分開(kāi)。較早的處理器不包括三級(jí)L3高速緩存,并且系統(tǒng)內(nèi)存直接與L2高速緩存交互:
L1緩存進(jìn)一步分為兩部分:L1數(shù)據(jù)緩存和L1指令緩存。后者包含需要由CPU執(zhí)行的指令,而前者用于保存將被寫(xiě)回到主存儲(chǔ)器的數(shù)據(jù)。
L1高速緩存不僅充當(dāng)指令高速緩存,而且還保留預(yù)解碼數(shù)據(jù)和分支信息。此外,雖然L1數(shù)據(jù)高速緩存通常充當(dāng)輸出高速緩存,但L1指令高速緩存的行為類似于輸入高速緩存。當(dāng)進(jìn)行循環(huán)時(shí)這很有用,因?yàn)樗璧闹噶罹驮讷@取單元旁邊。
現(xiàn)代CPU最多可為旗艦處理器提供512KB的L1高速緩存(每個(gè)內(nèi)核64KB),而服務(wù)器部件的功能幾乎是后者的兩倍。
L2緩存比L1大得多,但同時(shí)也慢一些。旗艦級(jí)CPU的大小為4-8MB(每個(gè)內(nèi)核512KB)。每個(gè)內(nèi)核都有自己的L1和L2緩存,而最后一級(jí)L3緩存在裸片上的所有內(nèi)核之間共享。
L3緩存是最低級(jí)別的緩存。從10MB到64MB不等。服務(wù)器芯片具有多達(dá)256MB的三級(jí)緩存。此外,與競(jìng)爭(zhēng)對(duì)手的英特爾芯片相比,AMD的Ryzen CPU具有更大的緩存大小。這是因?yàn)镸CM設(shè)計(jì)與Intel方面的Monolithic比較。
當(dāng)CPU需要數(shù)據(jù)時(shí),它首先搜索關(guān)聯(lián)內(nèi)核的L1緩存。如果找不到,則接下來(lái)搜索L2和L3緩存。如果找到了必要的數(shù)據(jù),則稱為緩存命中。另一方面,如果緩存中不存在數(shù)據(jù),則CPU必須請(qǐng)求將其從主內(nèi)存或存儲(chǔ)設(shè)備加載到緩存中。這需要時(shí)間,并且會(huì)對(duì)性能產(chǎn)生不利影響。這稱為緩存未命中。
通常,當(dāng)高速緩存大小增加時(shí),高速緩存命中率會(huì)提高。在游戲和其他對(duì)延遲敏感的工作負(fù)載中尤其如此。
看一下內(nèi)存映射
有了關(guān)于高速緩存的基本說(shuō)明,讓我們討論一下系統(tǒng)內(nèi)存如何與高速緩存進(jìn)行通信。這稱為緩存或內(nèi)存映射。高速緩沖存儲(chǔ)器分為塊或組。這些塊又分為n個(gè)64字節(jié)行。系統(tǒng)存儲(chǔ)器被劃分為與高速緩存相同數(shù)量的塊(組),然后將兩者鏈接在一起。
如果您有1GB的系統(tǒng)RAM,則緩存將分為8192行,然后分成多個(gè)塊。這稱為n路關(guān)聯(lián)緩存。使用2路關(guān)聯(lián)高速緩存時(shí),每個(gè)塊每個(gè)包含2行,4路每個(gè)包含4行,8路包含8行,16路包含16行。如果總RAM大小為1GB,則內(nèi)存中的每個(gè)塊的大小均為512 KB。
如果您具有512 KB 4路關(guān)聯(lián)的高速緩存,則RAM將被分為2,048個(gè)塊(1GB為8192/4個(gè))并鏈接到相同數(shù)量的4行高速緩存塊。
以與16路關(guān)聯(lián)緩存相同的方式,將緩存分為512個(gè)塊,這些塊鏈接到內(nèi)存中的512個(gè)(2048 KB)塊,每個(gè)緩存塊包含16行。當(dāng)緩存中的數(shù)據(jù)塊用完時(shí),緩存控制器將用所需的數(shù)據(jù)重新加載一組新的塊,以繼續(xù)執(zhí)行處理器。
N向關(guān)聯(lián)緩存是最常用的映射方法。還有另外兩種方法,稱為直接映射和完全關(guān)聯(lián)的映射。在前者中,高速緩存行與內(nèi)存之間存在硬鏈接,而在后者的情況下,高速緩存可以包含任何內(nèi)存地址。基本上,每一行都可以訪問(wèn)任何主內(nèi)存塊。此方法具有最高的命中率。但是,它的實(shí)施成本很高,因此,芯片制造商通常會(huì)避免使用它。
哪種映射是最好的?
直接映射是最容易實(shí)現(xiàn)的配置,但同時(shí)效率最低。例如,如果CPU要求給定的內(nèi)存地址(在這種情況下為1,000),則控制器將從內(nèi)存中加載64字節(jié)的行并將其存儲(chǔ)在高速緩存中(1,000至1,063)。將來(lái),如果CPU需要來(lái)自相同地址或此地址之后的地址(1,000到1,063)的數(shù)據(jù),它們將已經(jīng)在高速緩存中。
當(dāng)CPU在映射到同一高速緩存行的存儲(chǔ)塊中需要一個(gè)接一個(gè)的下一個(gè)地址時(shí),這將成為一個(gè)問(wèn)題。例如,如果CPU首先請(qǐng)求地址1,000,然后再請(qǐng)求地址2,000,則將發(fā)生高速緩存未命中,因?yàn)檫@兩個(gè)地址位于同一內(nèi)存塊中(128 KB是塊大?。?。另一方面,映射到它的緩存行是從地址1,000到1,063開(kāi)始的行。因此,緩存控制器將在第一條緩存行中將地址從2000的行加載到2063,從而淘汰了較舊的數(shù)據(jù)。這就是為什么直接映射高速緩存是效率最低的高速緩存映射技術(shù)并已被廣泛放棄的原因。
完全關(guān)聯(lián)映射在某種程度上與直接映射相反。內(nèi)存高速緩存的行與RAM內(nèi)存位置之間沒(méi)有硬鏈接。緩存控制器可以存儲(chǔ)任何地址。上面的問(wèn)題不會(huì)發(fā)生。此高速緩存映射技術(shù)是最有效的,命中率最高。但是,正如已經(jīng)說(shuō)明的那樣,它是實(shí)現(xiàn)起來(lái)最困難,最昂貴的。
結(jié)果,使用了在完全關(guān)聯(lián)映射和直接映射之間混合的集合關(guān)聯(lián)映射。在這里,每個(gè)內(nèi)存塊都鏈接到一組線(取決于SA映射的類型),并且每一行都可以保存來(lái)自映射內(nèi)存塊中任何地址的數(shù)據(jù)。在4路集關(guān)聯(lián)緩存中,內(nèi)存緩存中的每個(gè)集最多可容納來(lái)自同一內(nèi)存塊的四行。通過(guò)16路配置,該數(shù)字將增加到16。
當(dāng)映射集上的插槽全部用完時(shí),控制器將逐出其中一個(gè)插槽的內(nèi)容,并從同一映射存儲(chǔ)塊中加載另一組數(shù)據(jù)。例如,將組關(guān)聯(lián)內(nèi)存緩存的方式從4路增加到8路,每組就有更多的緩存插槽可用。但是,如果不增加緩存量,則每個(gè)鏈接的內(nèi)存塊的內(nèi)存大小都會(huì)增加?;旧?,在不增加整體高速緩存大小的情況下增加集合高速緩存集上可用插槽的數(shù)量意味著該集合將鏈接到更大的內(nèi)存塊,由于刷新次數(shù)增加,有效地降低了效率。
另一方面,增加緩存大小意味著每個(gè)集合中會(huì)有更多行(假設(shè)集合大小也增加了)。這意味著每個(gè)存儲(chǔ)塊有更多數(shù)量的鏈接高速緩存行。通常,這會(huì)增加命中率,但是可以提高整體數(shù)字的限制是有限的。