CPU的一級快取為什麼不能做得大一點?

時間 2021-05-06 23:21:19

1樓:

l1追求的是速度,為什麼不能將其做大呢?因為物理限制,更大的l1面積更大,到達其遠端搜尋時間會更長,根據光速一旦這個超出同步時限,那麼就不能視作乙個訊號了,如果增大時限閥值,那麼在l1反饋結果之前,要麼讓cpu空等,要麼降低核心速度去適配cache營造沒有空等的假象。如果堆疊,先不說技術困難,堆疊的方式會遇到熱阻礙,更大的l1還會遇到的另乙個熱阻礙是cpu核心同步雜湊會產生很多能耗,一旦同步處理太多的l1 set,那麼cpu核心的發熱可能會超過閥值,要麼降低核心速度,要麼減少cache管理的能耗。

而且,因為邊際效益問題,再多的同步雜湊帶來的提高也是有限的,因為再大的l1還是會產生miss,所以需要各種折中

2樓:

來嘗試寫乙個答案,提供乙個電路到系統設計的視角吧。

1)首先需要明確的是,即便是數位電路,決定速度的也不是頻率,頻率實際上還是受邏輯電路的充放電物理時間約束決定。比如邏輯電路訊號達到建立到穩定的時間是1ns,那就可以跑到1Ghz,如果是10ns,就只能跑在100Mhz。為了提高頻率需要不停插D觸發器,降低每段邏輯電路的充放電時間。

但是代價是一件事變成好多個週期才完成,一條指令的執行時間就分割成了單週期延時*週期數,D觸發器優化的tradeoff也就出現在這裡。比如插一級D觸發器,每一級電路可能降到60ns,需要2個時鐘週期,雖然頻率提高到133Mhz,但一件事完成的時間反而提公升到120ns;這個太展開了就不說了。總之知道這些就同時知道不同電路的頻率和效能是沒有絕對對應關係的。

2)最底層,cmos電路可以簡化為一堆級聯的rc電路,邏輯功能的1/0本質上是c的充放電。那麼既然是rc電路,就可以理解rc乘積越大,充放電時間越長。因此mos管的面積越大,r約小但c越大。

這裡是一部分需要取捨的地方來找到最合適的rc乘積,這是單管尺寸優化的tradeoff。cache多採用sram,6個管子才能完成1bit,而且p管空穴導電電阻率大,比如亞微公尺的時代p是n管2倍大,而dram也就乙個nmos管再加個電阻,體積小很多很多。這就決定了sram做不大。

更何況L1優化要做速度優化,每個管子體積是小不了的,所以單個bit的體積比l2/l3的sram又要大不少,因此l1的代價是非常高的

3)這還沒完,上面講的是乙個bit的情況。如果一堆呢?這就要提扇入扇出了。

數位電路的選擇不是for一樣去找,而是map reduce的樣子,所以輸入位址線需要連到每乙個cache line的單元,也就是這些下一級的管子的電容直接併聯形成乙個超大電容。所以在位址訊號來的時候,每一位上的0/1變換都會導致在給這個巨大的電容充放電。因此同時連入的路數(暫時可以等效為大小,下一條解釋)越多,充放電越慢,篩選出需要cache line的速度也越慢。

4)這個時候就上公升到系統級設計了。cache的定址是比較白痴的,核心的部分是取出N位位址線中X位來選擇cache line,剩下N-x位對比是否命中。比如位址線32位,cache有64個line,任何位址每個cache line都可以用,直接全部32根線都同時給64個line的比較器充電(也就是全相聯)。

慢都慢死了,怎麼辦呢?所以設計了組相聯。先拿5根線選出1組2個,再拿剩下1根線選1/2,這樣電容不就小多了麼。

所以就變成了具有32組的2路組相連。那如法炮製下去,不分青紅皂白,就拿6根線找到cache line,剩下28條看是不是需要的,這就成了直接對映。這下皆大歡喜了,扇出降到了最小,不用給那麼多電容充電了,一定執行的很快,頻率高的飛起。

5)然而現實是殘酷的,直接對映的代價是,每個位址只能對應某乙個cache line,比如訪問1000001和200001位址會不停洗刷同一塊cache line,那麼命中率會急劇下降,導致雖然充放電時間降低了,但是命中率下降帶來的缺失懲罰加重了,還是不行。所以另外乙個設計的trade-off就出來了,要有合適的組相聯路數,但組數又不能太高也不能太低。

說到這裡,核心的幾個trade-off就出來了,

1)一組裡面的路數不能太少,不然cache miss太多影響效能;但一組裡面的路數也不能太多,不然扇出電容太大充電時間受不了;組數其實也不能太多,畢竟選組也是有扇出的。

2)儘管電容C可以靠降低mos管體積減小,但還是要足夠大來降低電阻R,所以要找合適的尺寸平衡RC,優化充電時間

3)L1的sram做的比較大,面積和功耗受不了,為了保證數量,最優的RC也未必可以達到,所以面積限定下容量和充放電時間也是一對tradeoff

綜上所述,每家設計商只能和代工廠不停磨合,找出在當前工藝和體系結構下最適合的L1尺寸設計。當然上面列出的只是一些通用的核心tradeoff,還有大量的只有在實際設計中的tradeoff,甚至和應用場景的統計資料也有關係,過於細節了就不表了

3樓:勝勳

問題1:一級快取為什麼不能做得大一些?問題2:

一級快取和二級快取是用什麼材料製成的?我的回答:都是直接在CPU上用電晶體做成的,也就是「矽半導體」

問題3:如果一級快取足夠大,二級快取還有存在的必要嗎?我的回答:兩種方法都可以吧

如果一級快取特別大,達到16MB級別,那麼可以不要二級快取,而且一級快取必須直接和記憶體交換資料,電路會很複雜吧

分開的話,一級快取64KB,專門用來給暫存器提供資料,二級快取專門用來讀取記憶體資料,兩者分工明確,電路也許會簡單一些吧

4樓:MebiuW

一級快取(L1)、二級快取(L2)等本身都屬於計算機裡「記憶體層級」細分後的產物。

SCALING THE GROWING SYSTEM MEMORY HIERARCHY

首先從硬體上來說,暫存器 、L1、 L2、L3、記憶體、硬碟等儲存裝置本身的本質工作都是類似的,都是進行資料的儲存和讀取。他們需要分層的原因是在有限成本下,速度和容量的置換與平衡。暫存器的速度最快,成本也最高,隨後L1 L2 L3 記憶體等的速度依次減少,而容量依次增大。

L1固然快,但是造價真的高,所以做不大。

其次從定位上來說,在現在的計算機體系的「記憶體層級」中,L1、L2、L3承擔的都是我們通常說的「記憶體 Memory」的Cache,L1、L2、L3等相對於程式設計師是「透明」的,由CPU自行管理。在實際的程式設計中,我們不會顯式的使用這些第X級快取(L-X),程式操作的是「記憶體 Memory」,使用「記憶體 Memory」的位址來儲存和讀取資料。 因此L-X所存的資料並不能直接通過程式使用的記憶體位址來進行儲存和讀取,L-X只儲存「記憶體 Memory」的一部分資料,因此當我們要讀取或者操作的時候,要查詢和判斷L-X是否包含給定記憶體位址的資料,而這個操作是有複雜度代價的。

隨著快取容量的增加,通常伴隨著操作延遲的增加,並不是越大越好。

我舉個例子:假設在程式A中,資料在L2上一定訪問得到,L1 Data=32KB的命中率是90%,延遲是3個週期,而如果L1命中失敗則是12週期(Skylake水平),那麼我們的資料操作的期望是:0.

9*4+0.1*12=3.6+1.

2=4.8週期。 此時如果說將L1翻倍到64KB,延遲順應增加到4個週期(很保守了,Iclelake增加到48KB就變成了5週期),命中率提公升到 95%,L2不變,那麼期望是:

0.95*5 + 0.05*12=5.

35。那麼實際上L1雖然做大了,但是整體的操作開銷反而增加了,所以說在同樣的技術下,L1並不是越大越好,而是要根據當前的實際L1的命中率去考慮,只有最適合(我的90%只是乙個例子,實際並不是,也會發生改變)在提公升L1容量的同時保證延遲不增加這件事情,是非常艱難的,付出的成本是難以想象的。

5樓:norton zhang

快取大了,速度就慢了,cpu等待的時間就長了,寶貴的時間在等待,怎麼運算呢。

快取的作用,就是快取啊,不是儲存。不要想放很多。

最終結論是,做取捨,要考慮,物理尺寸,速度,命中率,等待時間,功耗,效能,浪費,還要看應用程式的特徵,處理資料的複雜度是否能夠很好的應用,哦成本。

牽一發動全身,不要只想著單一性的解決問題。

6樓:

光考慮容量,不考慮延遲和速度,是片面的。

記得在1997~1998時代,Pentium II整合了非片上的半速512KB L2 Cache。而Celeron整合了128K全速L2 Cache,在頻率相近且Celeron也使用100MHz外頻的情況下兩者的效能差距微乎其微。而Pentium III E系列處理器,更是改成片上256KB全速快取,效能也有小幅提公升。

L2是如此,L1其實也是如此。

7樓:Chant Zine

各位講得都很好了,我來補充乙個點吧。

L1I/D還有乙個Virtual Memory System施加的限制。Cache Line Adress用於決定set id和in-set addresss的部分是不會經過TLB(Translation look-aside buffer)進行virtual address -> physical address的轉換的,以此來降低L1的hit time來達到提高系統效能,這是工程界常用的優化。因此L1 Set Size 不能超過page size,來保證set id和in-set address 在virtual address 和physical address下的一致性(in-page address在virtual address和physical address中是一樣的)。

於是有#set * L1 set size = L1 cache size/L1 assoc ways <= pagesize(4KB). 如果有興趣的話去翻一下intel cpu近幾年的L1引數就會發現這個不等號一直取等號來最大可能降低miss rate。

在保證#set * L1 set size = pagesize(4KB)時,做大L1也就是做大assoc ways會導致用來選擇set結果的MUX寬度變大,進而使得MUX latency增加,這就是其它答主所說的miss rate和hit time之間的trade off了。L1這裡還不用考慮power和area,因為無論如何都有比它更大的L2 L3是power/area的主要消耗。

思考題:請思考一下是如何實現訪問L1 cache和 TLB 的pipeline的。

一級指標為什麼不能指向一級指標?

醬油 沒錯指標都是四個位元組但是指向的值就不一定是四個位元組了。每個指標所指向的值的型別必須是確定的 如果按著題主這樣寫的話會出現乙個問題 現在有乙個指標指向了0xcccccccc,那麼如何知道怎麼解釋這個值呢?到底是乙個整形的常量還是乙個整形常量的位址,又或者可能是乙個存放整形常量位址的常量的位址...

為什麼gpu沒有像cpu那樣的二級快取?

執壹 首先明確一下是否有二級快取這個問題,我的確記不住什麼時候GPU開始帶二級快取,至少英偉達的GPU晶元發展到Kepler這個級別的時候,都已經帶2級快取。我猜樓主是對GPU為什麼以前沒有二級快取有疑惑吧,只是簡單地提一下 首先明確的是,CPU對訪存時延的要求很高,所以用了大快取 亂序執行的方式容...

航母為什麼不能做得更大,航母的甲板為什麼不能做得更長?這不就可以大大降低了艦載機研製難度了嗎?

alucrad 首先,和工程難度沒有任何關係,和工程難度沒有任何關係,和工程難度沒有任何關係 大型軍事裝備,在效能滿足需求的大前提下,一定是越小越好。小裝備隱蔽性更好,造價一般更低,也不易被擊中。而對航母來說,效能滿足需求 中最關鍵的需求在於能一條能保證艦載機安全降落的降落通道 起飛可以靠彈射器 只...