緩存級數是否有上限?
現在CPU的緩存已經有4級的了,理論上,緩存級數是否有上限,還是可以繼續增加?
可能增加但是不會無止境的增加。
原本緩存有三層,L1取得的收益是最大的,因為L2和L3上的locality都是L1吃剩下的。L2和L3的存在目的是浪費一定的存儲單元儘可能的兜住絕大部分locality避免訪問片外存儲造成miss penalty(這個penalty絕大部分考慮的實際上是能耗,因為多發射和out of order可以較大程度上緩解cache miss latency)。
這實際上是在用晶元面積換功耗,要求L3和L2的大小指數級上升。這是沒辦法無休止的繼續下去的,第一個原因是由更多的晶體管增加的leakage power 會超過cache 節省下來的dynamic power, 使得多出來的一級cache毫無價值。
第二個原因是比L3再大一級的SRAM實在太大了。L3的面積已經佔到整個CPU die的一半以上了。再疊個更大的SRAM L4上去,CPU 的die size就到了不可接受的大小。這是會犧牲產量的,畢竟一片晶元只有300mm直徑,die越大邊角損耗越高。有人可能會問,die增加,增加晶元的大小不就可以了。但是增加晶元尺寸的成本可能更高,見這篇專欄(個人非常喜歡這個專欄,也很感謝作者老狼)。
450mm的晶圓在哪裡?
出現四級緩存的主要原因是DRAM可以做到片上了(eDRAM),而且顯示核心需要更大的緩存。這相當於新工藝提供了一種在片上以較小尺寸提供更大存儲單元的途徑。往後可能某種NVM也會成為緩存的一級,如果它能集成到片上的話。也有可能NVM會取代當前的eDRAM成為第四級.
不是搞這方面的 可能回答不準確。我的理解是:大體來說,邊際效益遞減是必然的,因為對於大部分程序,緩存命中率還是很高的,再增加級數,效益未必顯著。況且萬一Miss了 還有penalty。就像流水線級數也不是多多益善那樣。
瀉藥。
同意Chant Zine的觀點。這些緩存的面積真的很大很大。
下面說說我自己從CPU design的角度一些看法。
「理論上沒有上限,可以繼續增加」
但是,增加緩存級數,設計更複雜,效果未必十分明顯,投入產出比低,不划算。不是做不到,而是沒必要。
CPU的性能,不是單單增加緩存級數就能明顯增加的,應該去解決當前最大的瓶頸。不同時期,不同工藝節點,瓶頸不一樣。比如,現在,分支預測/cache命中率/cache替換演算法,這些往往能很大幅度提高CPU Core的性能,這些更像瓶頸。
首先明白一點,緩存的功能:為了緩解取數據/指令的速度與CPU Core內部處理指令的速度差距太大的問題。
通俗一點說就是,CPU Core吃飯(指令)的速度快,胃口大,而喂飯的速度跟不上,core經常挨餓,所以採用緩存來提高喂飯速度。
目前的L1在Core內,L2在Core外,但是只屬於單個Core,L3在Core外,被多Core共用。
但是,並不僅僅有這些cache,比如還有victim cache/ filter cache,又或者,write buffer也是類似緩存。只是這些cache還沒有被廣泛採用,也證明其效果並不十分突出,對性能提升沒有質的飛躍。
所以,最後一句話:
不是做不到,而是沒必要。
要確定緩存級數,首先要明確多級緩存的用處。一般來說工程上速度和造價是負相關的,所以L1小L2L3大。但其實他們在絕大多數型號CPU中都是SRAM,本質並沒有區別,不像內存和硬碟。L1比其他快的地方在於,一個是layout的時候速度優先,而L2L3一般是以減小面積優先的。還有就是L1離運算單元足夠近,可以減小延遲。L2目前是每個核獨有的緩存,而L3是多核共享的緩存。至於L4,有一種概念是CPU和GPU共享的緩存,還有概念是多CPU共享的緩存。
所以說多級緩存不是那種可以根據速度和成本的不同無限細分的結構。也許我們哪天要用一千個CPU同時運算的話,可能會有L5L6,在這之前還是解決散熱問題吧。
從cache操作的流程來說是可以的,簡單來說反正就是上一層缺失了往下一層走。問題是現在L4一般已經放在cpu片外了,再做大就和內存一樣得做成內存條插主板上了,延遲到和內存差不多的時候,幹嘛不用內存?sram cache一般每個單元6個晶體管,還有tag,這個做大了,功耗面積太誇張。現在的L4也是用edram做的,再做大直接當內存用不就好了。做成cache還得維護這麼多層cache之間的一致性,這個開銷和設計複雜度就大了。
會增加,但應該不會無限制的增加。
同意chant zine的觀點。補充一個,就是cache一致性協議,在當前多核時代已經很複雜了,忘記在那看的,當前的3級緩存,已經非常複雜,成本就已經非常大了,在增加,一致性就更複雜了推薦閱讀:
※在校學生一枚,面對高性能伺服器開發、分散式系統、緩存系統等等。該如何最快最好的提升自己的技術水平呢?
※1G緩存的機械硬碟,拷貝文件是否只是前幾秒快一些?
※如何設計網站的緩存?
※求教大神瀏覽器是根據什麼決定from disk cache 與 from memory cache?
※cdn的緩存數據是如何實現分片的,如何有效的實現各分片的存儲及刪除?