如果CPU的cache(緩存)容量上GB或更高,會有哪些不同?
其他條件都沒太大變化的情況下,
PS,
當年的內存也才64K成高配了,不知道CPU里的cache多會兒能上GB,現在大部分CPU還在個位數的MB停留著的,
題的過程中搜了下的,估計上2位數了,沒想到還真有,一個chache突破了個位數的i9 cpu,二級的是10M,三級的13.75M,就是沒找到一級緩存在哪。。四級的不指望了。。
Intel 酷睿i9 7900X參數
謝邀。
GB級別,你說的那個應該是DRAM cache
前段時間審到一篇paper,模擬器數據,做GB級別的DRAM cache可以在部分workload上提升40%~50%的性能。也有很多workload是cache不敏感,cache容量翻好幾倍,性能基本原地踏步。
開腦洞問題.
討論單核吧, 多核在這說不清.
題干有限制除了1G Cache, 其他條件沒什麼變化. 1G的SRAM在CPU同頻/半頻工作挺誇張的, 假設是L4吧, 如果實現了, 片內L4訪問的Lantecy可能需要100個周期以上, 這等於拖慢了訪問主存速度, 假設原來訪問主存Latency是200T, 那現在則是300T. 如果測試代碼是隨機訪問數據, 或流訪問數據, 總體性能會有較大下降.
如果測試代碼是計算型, 比如壓縮加密等, 不需要頻繁訪問Cache, 其性能還是受CPU主頻控制, 增加1G Cache沒什麼用, 性能不變.
對於需要使用&>8MB &<1GB內存的無規律訪問內存的測試程序, 1G Cache才能發揮作用. 這種畢竟是特殊程序, 其典型單線程代表, omnetpp的MKPI能從5降到0, mcf的MKPI能從10降到0. 對後者來說, 也就是每百條指令, 有一次Mem Hit變為L4 Cache Hit的收益. 估算當下處理器一次Mem Hit大致要200周期(50ns, CPU 4GHz), 變為L4 Hit後收益為100周期. 處理器IPC按1.5算. 算下來mcf上當下處理器做8個周期的工作, 擁有1G Cache的相同處理器只需要5個周期, 性能提升37.5%.
由於較多的程序都沒有上述特徵, 實際上這種1G Cache的CPU整體使用性能很可能是下降的, 這是由於1G Cache的ASIC實現較慢導致的. 如果開腦洞無視ASIC實現問題, 強行假設現在的Intel I7處理器L3 Cache=1G. 那麼"Fit 8M~1GB Memory"的這類程序能獲得37.5%+的提升.
接下來問題就轉換成了"有多少程序fit 8M~1G Memory?" 我不知道. 看了下Spec2k6, 按子調用來計數, 8M時MKPI在5以上的有12個, 佔21%. 當然MKPI是和CPU結構的相關項, 這裡也有偏差.
其實Spec2k6的程序特性分布特點, 和普通用戶日常程序特點也不一樣. 普通用戶上網, Spec在浪費電. 乾脆強行假設程序特性也一樣吧, 那麼結論是有21%的程序能提升37.5%, 平均提升量約7.9%.
回答完了, 下邊是扯淡
如果不是用SRAM實現就不算腦洞了, 但Cache到1G肯定是多核匯聚的, IBM Power9是120MB eDRAM Cache, 24Core. Core0訪問L3 Cache 0..23的latency應該不同, 用了NUCA. 單核性能並非處理器賣點, 性能上IBM強調的是on-die/IO Bandwidth, 要並發. 該討論的是, 單核程序怎樣寫(編譯)才能與硬體適配得好.
如果扯到並發, 1G Cache這個命題就要加更多的限定條件, 比如介面位寬, 比如是統一/分布訪問, 比如衡量性能指標. 不然沒法答, 像如果有1G RMB怎麼花一樣沒法答.
不過也有些能預測的, 1G Cache如果實現, 就會有大量在512M Cache上都會卡的代碼, 你以為好的硬體提供了好的用戶體驗? No. 提供了好的特效.
現代處理器幾M十幾M二十幾M的緩存,片上面積大小就幾乎跟處理器核心部分面積差不多了。
上圖是AMD剛發布的RYZEN APU,共2M L2 +4M L3加起來約等於四個ZEN CORE的面積。
intel這邊也差不多是這樣。
那麼問題來了,是核心重要還是緩存重要?這兩個的製造成本可是一樣的。
緩存再多,核心不行喂不飽,有啥用?弄那麼多緩存幹嘛?浪費錢?
補充一下,這個題目其實很有意思的。
它基本等價於L1 Cache Hit Ratio = 100%的情況。
結論其實還是很明顯的 —— 對優化做的越差的程序越有效果,但是對於已經寫得很好的代碼,其實快不了多少。
原回答見下方,主要是為了解決題主「不知道L1在哪」的問題。
--------------------------------------
Core i9-7900X - Intel
你說的這個不叫cache容量變大了,叫內存速度變快了。
cache珍貴不在於它的小,而在於它能跟得上cpu的速度。如果有一種存儲介質可以跟的上cpu速度,容量又很大,那就不需要cache這個概念了。達到內存容量要求就不需要cache的概念,如果達到tb級別,那多級存儲結構就不存在了。計算機達到了理想中的體系結構。加個小尾巴,歡迎關注我的知乎專欄,知乎專欄·「現代計算機」- https://zhuanlan.zhihu.com/modern-computing?utm_source=com.android.emailutm_medium=social
下一代EPYC是256MB L3,滿足你
現階段的CPU技術直接上1GB的L3或者L4是不可行的。
因為處理速度根本達不到使用這麼多Cache的要求。
cache有很多種翻譯,緩存/快取,很貼合它的意思——輔助作用,用低容量但低延遲高帶寬,來緩解讀取/保存壓力。
如果壓力不大,cache派不上用場,那就是很大的浪費了——無論是耗電,還是面積大帶來的製造成本。
事實上1G的cache要全部發揮的話,考慮到要比下一級內存的速度快,現有程序大概都不會在短時間釋放出這麼大量的數據吧……
如果把這個cache降一級,當作更高速的內存來用,那理論是會有幫助的,相當於提高了現有內存的參數,降低延遲提升帶寬。不過事實上現在內存速度一般不是瓶頸,價格和容量才是。不過對於核顯應該是有利的。
不過最大的問題還是在於價格。SSD比HDD貴了吧,傲騰更貴。內存貴得買不起了吧,你這1G的「cache」當然更貴。片上還會比外部的再貴一截。
實際生活中我們都是要考慮經濟因素,所以結果應該是性價比過高而成為歷史博物館的收藏吧。
話說有哪些程序是訪存密集型的?我能想到的也就各類壓縮演算法,還有cryptonight挖礦。
一、你確實會買不起:8G內存現在一條近800,L3的速度是其數十倍,內存的實際頻率也就200M(匯流排頻率的一至三倍,所謂的2400算上了預讀取的部分),L3的話是800M-4G(匯流排頻率乘倍頻)。換言之,這種存儲器的單位價格由於工藝要求會是內存的百倍,而且產能嚴重不足(如果你要做成內存的話),到時候可能會是內存的上萬倍。二、你不會獲得性能提升:緩存是用來存即將計算的數據的,內存是存所有CPU要求讀取的。內存會載入進程的全部代碼,而緩存則只預存活躍的進程。如果CPU沒能力在數據全部載入的過程中完成所有運算的話,緩存就沒必要那麼大。換言之即使三緩高達數G,CPU使用的也就那8M
為啥不用你的腳趾頭好好想想,緩存是怎麼用的?你搞那麼大,先不說物理上代價如何,如何搜索到你需要的內容?
超市(硬碟)有很多零食(數據),題主拿了一些回家,裝柜子(內存)里,又拿了一些放茶几(CPU緩存)上,躺沙發上邊看電視邊吃,美美的,順便開了個腦洞,要是有個柜子那麼大的茶几。。。甚至,超市那麼大的茶几?。。。會發生什麼應該很清楚了吧。
現有的軟體是為現有的緩存參數做優化的(反過來說也基本沒錯),要加大cpu緩存而基本不對軟體產生影響的話,只能增加路數。。那硬體複雜度可就很感人了。。
業界很早就發現超長流水線不是長期發展方向了,超大緩存應該很快就要發展見頂了。
我說的路數是多路緩存里的路數哈。
補充一波我下面的評論:
請教CPU的cache中關於line,block,index等的理解?
緩存大小=緩存線大小 乘以 內存地址哈希除子 乘以 路數。
我們拿x86來舉下例子:
緩存線大小: 大家都是按64位元組緩存線大小,來設計多線程的數據結構避免偽共享的,所以64這個值基本是不可能改的,改大了就可能產生某些過去不會發生的偽共享。
內存地址哈希除子: 多數內核或者用戶態程序對緩存命中率的優化都必須考慮 緩存線大小乘以內存地址哈希除子 這個值的大小。所以一般都是4K除以64(同一個內存頁的所有地址 對緩存的使用最好不要產生競爭,所以不要小於這個數值比較好), 8K除以64的比較少見。太大了的話,內存的頁換出和緩存的無效不是同調的,可能會對一些已有的優化工作產生負效果。
路數:純屬硬體細節,程序基本考慮不到他什麼。
所以只有路數,基本和應用程序優化沒有什麼關係,cpu可以隨便的加,而且可以不是2的冪,但是加大之後給硬體帶來的優化設計負擔可就大了。畢竟要選擇某一路多級逐出還是挺麻煩的事情。
會讓你買不起
CPU對緩存設計的是金字塔架構,見下圖
Cache有單核獨享和眾核共享,Cache中訪問數據消耗3個時鐘周期的話,訪問memory大約消耗200個時鐘周期,Cache設計少一來是成本,二來大了也會抬高時鐘周期。我覺得題主若是問「有上GB容量的寄存器」可能更接近題主想知道的答案。因為畢竟就算是L1 cache也不是最接近CPU的存儲設備。況且我認為有GB的cache性能也並不會提升太多,之所以設定memory hierarchy,主要是是因為程序運行有一個80/20原則,如此而已。
先回答為什麼現在不把cache做這麼大?
access time = hit_rate*access latency + miss_rate*miss penalty
主要原因是 容量大小和訪存速度是成非線性反比的。容量太大無法滿足系統要求的訪存的速度既訪問延時,所以減小容量來滿足訪存速度。既上述公式中的access latency增大了。
容量太小的問題是,既上述公式中的miss_rate增大了,而miss rate增大,需要向下一級cache或者主存去取數據,學術上交miss penalty。
所以如果容量能夠上GB並且更高不考慮面積功耗等等限制條件,並且能夠滿足訪存速度的要求,那麼顯然最大的好處就是大大減小了miss rate發生的情況,增加了hit rate,提高了訪存速度。
然而現實中受限於面積增大而導致的access latency非線性增長,面積增長導致晶元容納不下,功耗增長無法滿足晶元定義等等原因,總是選擇合適大小的緩存,來做性能的tradeoff。
除此以外訪存帶寬也是一個很重要的限制的條件,考慮上GB大小的DDR,除了比較高的訪問延時之外,DRAM的訪存帶寬也一直上不去,所以常常成為系統的瓶頸。而CACHE的訪問帶寬往往等於或者接近系統的匯流排帶寬,這是因為CACHE一般使用SRAM工藝,而DDR使用DRAM工藝,面積物理特性限定了它的傳輸帶寬與訪問延時。
BTW,為什麼一級緩存最小只有幾K,而三級四級緩存就能做到幾十M呢,原因很簡單,L1 CACHE離 CORE最近,往往能夠接受的access latency就是一個時鐘周期,既一拍就返回訪問L1 cache的數據,如果CPU跑在2GHZ,那麼允許的access latency在0.5ns,而二級緩存放寬了access latency的要求,所有可以做的更大來滿足更慢的access latency,三級緩存更甚,可以再放寬access latency的要求,再慢的access latency,不過無論如何當今的SRAM或者EDRAM技術只能允許MB的尺寸大小並且是在手工定製的情況下,如果要上到GB,那只有DRAM能夠勝任,而DRAM最大的問題上文已經提到,並不適合用來做CACHE使用。
cache大了有什麼用不好說,但是有一個相反的問題:last level cache小了會怎麼樣。
Micro13的paperThe reuse cache提出了doensizing cache的想法。
如果cache reuse rate很低,不僅繼續增加cache size意義不大,減小size也不會造成很多性能損失。
Intel KNL 有 2GB L4 DRAM cache。不過提高的主要是帶寬。
雖然我不懂,但我知道電腦是遵循短板效應的,總體性能取決於最差的那個點,而現在緩存應該不是那個點,所以應該沒什麼用吧
讀取的效率應該會降低不少 cpu價格漲了不知道多少倍 不如加內存性價比高
私以為,這個問題意義不大。成本的增長遠遠超過效率的增長。 緩存通過貼近cpu增加緩存級數來為cpu實現提前快速提取。但是現在摩爾定律已經可以預見的日子裡被打破。晶體管的極限已經快到了。 而且G級別的緩存放在cpu旁(極貼近)在技術上也是有壁壘的,最少近幾年是不可能實現的,也沒有實現的意義。 如果說最大的不同我認為兩個,一個就是緩存器的面積,一個就是成本。
Die-stack DRAM可以做到GB級別,on-die GB級別暫時還是不太可能實現。順帶一提,每個level的cache都是經過重重實驗優化得出的大小,其中也包括了符合當今fabrication的標準。 現在cpu普遍14nm吧,這樣一來大概一個CPU享有十幾MB到小几十MB的LLC。反著推一下,如果LLC 1GB on-die, 你的製程可能是多少?摩爾定律允許嗎?
CPU的cache太大或者太小都不行,cache太大了命中率上去了,但是定址成本太高,定址速度變慢,cache太小了命中率就會太低,導致需要經常直接訪問內存。所以cahe不用太多,計算下來的最優大小就好。
推薦閱讀:
TAG:中央處理器CPU | 應用計算機科學 | 高速緩存 | 中央處理器CPU計算機體系架構 |