CPU快取的工作原理

2021-05-09 13:01:39 字數 2518 閱讀 9585

當cpu要讀取乙個資料時,首先會從快取(cache)中查詢,如果找到就立即讀取並送給cpu處理;如果沒有找到,就用相對慢的速度從記憶體中讀取並送給cpu處理,同時把這個資料所在的資料塊調入快取中,可以使得以後對整塊資料的讀取都從快取中進行,不必再呼叫記憶體。

通過優化的的讀取機制,可以使cpu讀取快取的命中率非常高(大多數cpu可達90%左右),也就是說cpu下一次要讀取的資料90%都在快取中,只有大約10%需要從記憶體讀取。這大大節省了cpu直接讀取記憶體的時間,也使cpu讀取資料時基本無需等待。總的來說,cpu讀取資料的順序是先快取後記憶體。

早期的cpu快取容量很小,並且功能單一,intel從pentium時代後把快取進行了分類,當時整合在cpu核心中的快取已不足以滿足cpu的需求,而製造工藝上的限制又不能大幅度提高快取的容量。因此出現了整合在與cpu同一塊電路板上和主機板上的快取等不同型別,於是當時便把cpu核心整合的快取稱為一級快取(l1 cache),而外部的稱為二級快取(l2 cache);後來隨著生產技術的不斷提高,最終二級快取也被挪進了cpu當中。通常一級快取中還分資料快取(data cache,d-cache)和指令快取(instruction cache,i-cache)。二者分別用來存放資料和執行這些資料的指令,而且兩者可以同時被cpu訪問,減少了爭用cache所造成的衝突,提高了cpu效能。此外,intel在pentium 4 cpu中還增加了一種一級追蹤快取,容量為12kb。

用於儲存資料的快取部分通常被稱為ram,掉電以後其中的資訊就會消失。ram又分兩種,其中一種是靜態ram(sram);另外一種是動態ram(dram)。前者的儲存速度要比後者快得多,我們現在使用的記憶體一般都是動態ram。cpu的l1級快取通常都是靜態ram,速度非常的快,但是靜態ram整合度低(儲存相同的資料,靜態ram的體積是動態ram的6倍),而且**也相對較為昂貴(同容量的靜態ram是動態ram的四倍)。擴大靜態ram作為快取是乙個不太合算的做法,但是為了提高系統的效能和速度又必須要擴大快取,這就有了乙個折中的方法:在不擴大原來的靜態ram快取容量的情況下,僅僅增加一些高速動態ram做為l2級快取。高速動態ram速度要比常規動態ram快,但比原來的靜態ram快取慢,而且成本也較為適中。一級快取和二級快取中的內容都是記憶體中訪問頻率高的資料的複製品(對映),它們的存在都是為了減少高速cpu對慢速記憶體的訪問。

二級快取是cpu效能表現的關鍵之一,在cpu核心不變化的情況下,增加二級快取容量能使效能大幅度提高。而同一核心的cpu高低端之分往往也是在二級快取上存在差異,由此可見二級快取對cpu的重要性。cpu在快取中找到有用的資料被稱為命中,當快取中沒有cpu所需的資料時(這時稱為未命中),cpu才訪問記憶體。從理論上講,在一顆擁有二級快取的cpu中,讀取一級快取的命中率為80%。也就是說cpu一級快取中找到的有用資料佔資料總量的80%,剩下的20%從二級快取中讀取。由於不能準確**將要執行的資料,讀取二級快取的命中率也在80%左右(從二級快取讀到有用的資料佔總資料的16%)。那麼還有的資料就不得不從記憶體呼叫,但這已經是乙個相當小的比例了。目前的較高階cpu中,還會帶有**快取,它是為讀取二級快取後未命中的資料設計的—種快取,在擁有**快取的cpu中,只有約5%的資料需要從記憶體中呼叫,這進一步提高了cpu的效率,從某種意義上說,預取效率的提高,大大降低了生產成本卻提供了非常接近理想狀態的效能。除非某天生產技術變得非常強,否則記憶體仍會存在,快取的效能遞增特性也仍會保留。

既然cpu快取能夠在很大程度上提高cpu的效能,那麼,有些朋友可能會問,是不是將來有可能,目前的系統記憶體將會被cpu取代呢?

答案應該是否定的,首先,儘管cpu快取的傳輸速率確實很高,但要完全取代記憶體的地位仍不可行,這主要是因為快取只是記憶體中少部分資料的複製品,所以cpu到快取中尋找資料時,也會出現找不到的情況(因為這些資料沒有從記憶體複製到快取中去),這時cpu還是會到記憶體中去找資料,與此同時系統的速度就慢了下來,不過cpu會把這些資料複製到快取中去,以便下一次不用再到記憶體中去取。也即是說,隨著快取增大到一定程度,其對cpu效能的影響將越來越小,在效能比上來說,越來越不合算。

就目前快取容量、成本以及功耗表現來看,還遠遠無法與記憶體抗衡,另外從某種意義上來說,記憶體也是cpu快取的一種表現形式,只不過在速率上慢很多,然而卻在容量、功耗以及成本方面擁有巨大優勢。如果內存在將來可以做到足夠強的話,反而很有取代cpu快取的可能。

即便cpu內部整合的快取資料交換能力非常強,也仍需要對調取資料做一定的篩選。這是因為隨著時間的變化,被訪問得最頻繁的資料不是一成不變的,也就是說,剛才還不頻繁的資料,此時已經需要被頻繁的訪問,剛才還是最頻繁的資料,現在又不頻繁了,所以說快取中的資料要經常按照一定的演算法來更換,這樣才能保證快取中的資料經常是被訪問最頻繁的。命中率演算法中較常用的「最近最少使用演算法」(lru演算法),它是將最近一段時間內最少被訪問過的行淘汰出局。因此需要為每行設定乙個計數器,lru演算法是把命中行的計數器清零,其他各行計數器加1。當需要替換時淘汰行計數器計數值最大的資料行出局。這是一種高效、科學的演算法,其計數器清零過程可以把一些頻繁呼叫後再不需要的資料淘汰出快取,提高快取的利用率。

小結

快取記憶體做為cpu不可分割的一部分,已經融入到效能提公升的考慮因素當中,伴隨生產技術的進一步發展,快取的級數還將增加,容量也會進一步提高。作為cpu效能助推器的快取記憶體,仍會在成本和功耗控制方面發揮巨大的優勢,而效能方面也會取得長足的發展。

cpu的工作原理

cpu 只能識別機器碼,如110001010。每一位只有兩種狀態,分別表示高電平和低電平。如果用這種法式去編碼,就顯得不便記憶和理解。所以隨著時代的發展,就產生了組合語言。相對機器碼,組合語言就好理解多了。它主要通過彙編指令集來實現編碼。不過cpu還是不能直接來識別出彙編碼,要通過編譯器來對組合語言...

CPU 的工作原理

cpu 的根本任務就是執行指令,對計算機來說最終都是一串由 0 和 1 組成的序列。cpu 從邏輯上可以劃分成 3 個模組,分別是控制單元 運算單元和儲存單元 其內部架構如下 控制單元 控制單元是整個cpu的指揮控制中心,由指令暫存器ir instruction register 指令解碼器id i...

cpu工作原理

眾所周知,cpu是電腦的 心臟 是整個微機系統的核心,因此,它也往往成了各種檔次微機的代名詞,如昔日的286 386 486,奔騰 pii k6到今天的piii p4 k7等。回顧cpu發展歷史,cpu在製造技術上已經獲得了極大的提高,主要表現在整合的電子元件越來越多,從開始整合幾千個電晶體,到現在...