為什麼CPU有緩存?
簡而言之,因為內存太慢了,實際上內存之所以誕生也是基於類似的原因。理論上來說,一台計算機只需要外部存儲器就能運行,但是這樣速度太慢,尤其是早期使用的紙帶、磁帶,完全跟不上處理器的運算速度。因此人們發明了內存作為CPU和外部存儲器之間的緩衝區域,CPU可以把讀取到的數據和指令暫時存放在內存中,以便後續立即使用。內存作為隨機存儲器,免去了尋道等操作,存取延遲比外部存儲器可以快上數個數量級,這樣大大提升了系統的運行速度。
隨機存儲器主要有兩種,靜態隨機存儲器SRAM和動態隨機存儲器DRAM。SRAM無需刷新,速度快,但密度小,造價高昂。DRAM需要不斷通電刷新,速度比較慢,但製造成本更低,容量更大。內存最開始有過SRAM的時期,隨後就被更廉價的DRAM取代。一開始DRAM的速度還能跟得上CPU,比如CPU的頻率在2MHz時內存的頻率可以達到4MHz。而從上世紀80年代開始,CPU的速度很快就遠遠甩開的內存,差距逐漸達到數個數量級。
CPU與DRAM的速度差距越來越大。圖片來自新澤西理工學院
這時候SRAM來救場了,它的速度仍能跟得上CPU,因此人們開始將其內置到CPU中,CPU緩存也因此誕生。最早有記錄使用緩存的系統是通用電氣的645和IBM360/67,它們配備了TLB轉換檢測緩衝區,用於加快內存定址,而最早有記錄搭載了數據緩存的系統是IBM System/360 Model 85。我們比較熟悉的摩托羅拉68k系列處理器中,發佈於1984年的68020是第一款真正搭載了緩存的68k CPU,擁有256位元組的指令緩存。
現在的CPU大都有一套多層緩存系統,將緩存分為L1、L2、L3等,有的還有L4。當L1發生緩存命中失敗後,CPU會嘗試去L2中讀取,如果又失敗,則繼續向下一層緩存尋找。數字越小,緩存的速度越快,但成本也越高,因此容量一般更小。緩存並不是越大越好,雖然更大的緩存雖然能存儲更多的數據和指令,但每一次定址需要花費更多的周期,可能最終得不償失。緩存的設計需要平衡時間、空間和製造成本,是CPU架構設計中的一個重要環節。
圖為英特爾CPU結構示意圖。圖片來自AnandTech

