早期的計算機系統的儲存器層次結構只有三層:cpu暫存器,dram主儲存器和磁碟儲存。不過由於cpu和主存之間逐漸增大的差距,系統設計者被迫在cpu暫存器和主儲存器之間插入乙個小的sram高速緩衝儲存器,稱為快取記憶體(cache),如圖所示,快取記憶體的訪問速度幾乎和暫存器一樣塊,典型的是大約4個時鐘週期。
本章的主要內容包括以下幾個方面
按照摩爾定律,cpu的訪問速度每18個月就會翻一番,相當於每年增長60%。而記憶體的訪問速度雖然也在不停的增長,但是卻遠沒有達到這麼快。而這兩者增長速度的差異,使得cpu效能和記憶體訪問效能的差距不段增大。從上一章我們看到我們進行一次記憶體訪問大約需要200個cpu cycle,速度差慢慢的越來越影響了效能的提公升。
如果我們拿顯示生活的例子來打比方,cpu的速度好比現在風馳電掣的高鐵,以350公里/小時的速度在執行,但是,它卻只能等著旁邊腿腳不靈活的老太太,好比記憶體,這個老太太以每小時3公里的速度緩慢不性。因為cpu需要執行的指令,需要訪問的資料,都在這個速度不到自己1%的記憶體裡。所以為了彌補這兩者之間的效能差異,使得cpu的效能真正得到提公升,而不是在那空轉,現代的cpu中引入了快取記憶體。
而對於cache的引入,主要還是基於我們memory-hierarchy中提到的程式訪問的區域性性原理,才能使cache的作用發揮到最大。
cache使一種小容量高速緩衝儲存器,由快速的sram組成,直接製作在cpu晶元內部,速度較快,幾乎與cpu處理器處於同乙個級別。在cpu和主存之間設定cache,總是把主存中被頻繁訪問的活躍程式塊和資料塊複製到cache中。由於程式訪問的區域性性,大多數情況下,cpu可以直接從cache中直接取得指令和資料,而不必訪問慢速的主存。
上圖是乙個計算機的高速緩衝,其被組織成由很多個快取記憶體組(cache set),每個組中又被分成多個行(way),其中cache line是cache的基本單位。這裡的way解釋位一組line的集合,通常說的n-way組相聯,理解為乙個set有n個line組成。
總之,乙個cahce的組織可以由下面的四個引數陣列來標識(s,e,b,m),s是cache set的數目,e是每個cache set的cache line的數目,b是乙個cache line中儲存的資料塊的位元組數,m是實體地址的bit資料。
我們以實際例子來說明以下,假設有乙個data cache:32-kb,8-way,64-byte line size cache的總大小為32kb,8路組相聯(每組中由8個line組成),每個line的大小 cache line size為64 byte,那麼我們就很容易的計算出有多少組32k/8/64=64
我們執行的程式主要是將對應的資料從記憶體讀取出來,載入到cpu cache裡。cpu從記憶體中讀取資料到cpu cache的過程中,是一小塊一小塊來讀取資料的,而不是按照單個陣列元素來讀取資料的。對於整個過程,其處理流程如下:
這樣一小塊一小塊的資料,在cpu cache裡面,我們把它叫作cache line(緩衝塊)。在我們日常使用的處理器裡,cache line的大小通常是64位元組。cachel line由下面的內容組成
cache的速度在一定程度上影響著系統的效能,一般情況下cache的速度可以達到1ns,幾乎可以和cpu暫存器速度媲美。但是人們發現當cache中沒有快取想要的資料的時候,依然需要在漫長的等待從主存中load資料。為了進一步提公升效能,就引入了多級cache的概念。下圖是intel core i7的cache架構圖
在cpu裡,通常會有l1,l2,l3這樣的三層快取記憶體,每個cpu核心都有一塊屬於自己的l1快取記憶體,通常分為指令快取和資料快取,分開存放cpu使用的指令和資料。l2的cache同樣是每個cpu核心都有,不過l2的訪問速度會比l1稍微慢一些。而l3 cache,則通常是多個cpu核心公用的,尺寸會更大一些,訪問速度自然也就更慢一些。
cpu要訪問的資料在cache中快取,稱為「命中」(hit),反之則為「缺少」。我們以2級cache的工作過程如下:
對於這種多級cache的工作方式稱之為inclusive cache,那麼某乙個位址的資料可能存在多級快取中。與之對應的是exclusive cache,這種cacha保證某一位址的資料快取只會存在於多級cache中的一級,也就是任意位址的資料不可能同時在l1和l2 cache中快取。
直接對映快取記憶體
組相聯快取記憶體
組相聯快取記憶體,放鬆了對於每個組中只有一行的限制,所以每個組中都儲存有多於乙個的快取記憶體行。如下圖所示,每乙個組中有2行
全相聯快取記憶體
全相聯快取記憶體是由乙個包含所有快取記憶體行的組(即e=c/b)組成,其如下圖所示
對應到一張圖可以看懂cache的對映方式
基礎1 基礎
2011年畢業的時候,當時mvc思想非常流行,從總體設計的思路來看,c指的是struts v指的是檢視層 當時我用的是freemarker m用的是spring 即便到了詳細設計層面,每個模組的組成也是分為mvc這3部分。到了spring mvc的時候,spring根據mvc思想,一次性把這3個組成...
vue基礎基礎之基基礎
目錄 1,引用 2,例項化 3,資料定義和使用 4,函式的定義和使用 5,資料的改變方式 6,原生js如何輸出vue中的data資料 7,vue中系統屬性的使用 每個vue應用都需要通過例項化vue來實現 語法 var myvue new vue 注意 若id重複,則以第乙個為準 也可以在外邊定義 ...
Linux基礎入門 基礎中的基礎
終端 廣義的終端是指所有的輸入 輸出裝置的總稱,比如 鍵盤 滑鼠 顯示器 印表機等。但在很多情況下,終端一般指的是 虛擬終端 也就是螢幕上顯示的黑不溜秋的視窗,類似於windows下的命令提示符。ctrl alt t 開啟乙個新的終端 f ctrl t 在當前終端下開啟乙個新的標籤頁 alt 1 2...