為什麼從Intel Core i系列開始加入L3緩存,而不是使用更大的L2緩存?

Core i系列以後每個核只有256KB的L2緩存,大容量的緩存放在了L3上。為什麼不是繼續擴大L2容量而是加一個下級的L3?


L2 Cache可以看做是更大但是慢一些的L1 Cache,但是L3 Cache和L1,L2 Cache有著本質的區別。如圖所示(有些數據參考了 @panda gaint 給的鏈接),L1和L2 Cache都是每個CPU core獨立擁有一個,而L3 Cache是幾個Cores共享的,可以認為是一個更小但是更快的內存。這樣的話,如果幾個Cores頻繁的寫同一個cache line(CPU cache - Wikipedia)里的數據,有L3 Cache之後,數據就不用每次回到內存了,每次寫就節省了57ns,讀的時候又節省了57ns。當然,並行編程的時候要盡量避免出現這種情況,不讓多個Cores寫同一個cache line。


這個主要還是多核的使用,不管事CMT還是SMT。32K L1 + 256K L2,可以達到L1命中80%,L2命中80%。不命中的數據基本很少了,L3的意義太小了對於單核。但是注意這只是針對單核,現在的處理器核越來越多,這下意義就大了,現在Intel處理器L3都是all cores的,就算一個核還有5%的數據L1,L2未中,4核8線程或者8核16線程也不少了。所以現在的L3越來越大了,而且sandybridge以後的處理器GPU也會使用L3 cache。現在Intel的處理器L3 cache已經不是傳統意義上的了,是一個LLC Ring。

上面提到cache的速度和成本,可以看下這個鏈接一目了然Intel Skylake。其實就算不考慮這些,狂堆L2的效果並不好。記得量化裡面有講,出來打工太久了,東西都還給老師了,記得不是很清楚了。


很大原因是頻率/時序~面積

core2那種L2很難往更大容量擴展,這個是集中式L2固有問題:每個核到L2都是對稱的,要做就要做到一樣的訪問路徑,對面積和時序都不友好,做個4核還湊合,做個8核要死人。

從nehalem開始,LLC是分塊的,每個核對每塊LLC並不是同樣的訪問路徑了,所以每塊LLC的訪問時序變好了,也可以做一些更高密度的LLC,容量變大也變成了局部容量變大,更容易擴展。但是總體訪問變慢了。

為了補償一下L3變長,加入L2,要不那些片上幾十M LLC訪問起來對性能的損失略大。

順便一說,2核的話其實沒必要分塊。


我的CPU還有L4緩存呢。。。這就是一個綜合成本問題


核心之間的通信需要,早期的p4,核心間通信繞fsb執行。現在只需要L3存一份數據即可核心共享該數據。


一般的,寄存器、L1、L2、L3成本倍增加,速度和面積成倍下降。

如果用大L2做全局聯通,價格和發熱量估計沒多少用戶能接受。


便宜,容量大,這就是不同級緩存的差別,L2做成L3的容量,你猜cpu會漲多少?已經有了1t的pcie ssd,sata3的ssd怎麼還這麼多?


推薦閱讀:

新浪微博、Twitter 等 SNS 社交網站如何合理規劃自己的緩存設計?
Android 系統里的 RSS 訂閱會產生大量緩存垃圾么?如何清理?

TAG:中央處理器CPU | 緩存 | 計算機組成原理 |