1. 程式人生 > 實用技巧 >CPU與快取記憶體

CPU與快取記憶體

目錄

CPU

CPU負責執行指令,是所有計算機硬體中速度最快的。一般用時鐘週期(時鐘頻率)來衡量CPU的效能。

時鐘週期

CPU時鐘週期是操作的最小時間單位,值是主頻的倒數,現代計算機的主頻可以達到幾GHZ。

指令週期是取出並執行一個指令的時間單位,一個指令需要多個CPU操作來執行,一般來說一個指令週期至少包含2個CPU時鐘週期(取指+執行)。

同一個硬體架構下不同CPU的時鐘週期越高,相同時間內能夠執行的指令就越多,效能就越好;但在不同的硬體架構下只比較CPU主頻大小意義不大,處理器結構不同,指令集就不同,相同意義的指令所需的CPU時鐘週期也就不同。

除了計算機架構不同外,在比較計算機整體效能的時候還需要考慮很多因素,例如前端匯流排("front side bus",FSB),記憶體的時鐘週期,CPU通用暫存器的資料寬度和機器的一級、二級快取等。

暫存器

暫存器是CPU的內部組成單元,是CPU運算時取指令和資料的地方,速度很快,可以理解為對於CPU來說讀/寫暫存器是不需要時間的,或者說如果只是操作暫存器(比如類似mov BX,AX之類的操作),那麼一秒鐘執行的指令個數理論上說就等於主頻,因為暫存器是CPU的一部分。

暫存器可以用來暫存指令、資料和地址。在CPU中,通常有通用暫存器,如指令暫存器IR;特殊功能暫存器,如程式計數器PC、sp等。

快取記憶體

快取記憶體(cache)通常分為L1,L2,L3三級,速度遞減,容量遞增,是為了彌補CPU與記憶體之間運算速度的差異而設定的硬體。

作用

Cache一詞來源於1967年的一篇電子工程期刊論文。其作者將法語詞“cache”賦予“safekeeping storage”的涵義,用於電腦工程領域。

當CPU處理資料時,它會先到Cache中去尋找,如果資料因之前的操作已經讀取而被暫存其中,就不需要再從主記憶體中讀取資料——由於CPU的執行速度一般比主記憶體的讀取速度快,主存時鐘週期(訪問主儲存器所需要的時間)為數個CPU時鐘週期。因此若要訪問主記憶體的話,就必須等待數個CPU週期從而造成浪費。L1快取的速度可以在2-4個CPU時鐘頻率內完成,速度很快。

Linux下可以通過lscpu命令來檢視CPU的資訊,其中包括cache層次。

原理

提供“快取”的目的是為了讓資料訪問的速度適應CPU的處理速度。

通常它不像系統主存那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。其基於的原理是記憶體中“程式執行與資料訪問的局域性行為”,即一定程式執行時間和空間內,被訪問的程式碼集中於一部分。為了充分發揮快取的作用,不僅依靠“暫存剛剛訪問過的資料”,還要使用硬體實現的指令預測與資料預取技術——儘可能把將要使用的資料預先從記憶體中取到快取裡。

資料結構

快取記憶體的資料結構類似於拉鍊式的散列表,key是記憶體地址,值是記憶體資料的副本或即將寫入記憶體的資料。

快取條目中又包含三個屬性:

其中tag可以理解為資料的記憶體地址,Data Block是記憶體資料,Flag用於標識資料狀態。

歷史

CPU的快取曾經是用在超級計算機上的一種高階技術,不過現今個人電腦上使用的微處理器都將L1快取整合在CPU晶片內部,用於儲存資料快取和指令快取;而L2快取曾經被放在CPU外部(主機板或者CPU介面卡上),但是現在已經成為CPU內部的標準組件;更昂貴的CPU會配備比L2快取還要大的L3快取。

概念的擴充套件

如今快取的概念已被擴充,不僅在CPU和主記憶體之間有Cache,而且在記憶體和硬碟之間也有Cache(磁碟快取),乃至在硬碟與網路之間也有某種意義上的Cache──稱為Internet臨時資料夾或網路內容快取等。凡是位於速度相差較大的兩種硬體之間,用於協調兩者資料傳輸速度差異的結構,均可稱之為Cache。

計算機的儲存體系金字塔

https://zh.wikipedia.org/wiki/%E6%97%B6%E9%92%9F%E9%A2%91%E7%8E%87

https://blog.csdn.net/hellojoy/article/details/54744231

《Java多執行緒程式設計實戰指南-核心篇》