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