儲存層次結構 cache 編譯

2021-09-30 07:55:09 字數 1641 閱讀 5065

先給出計算機儲存層次結構一組資料:

儲存層級 1

2 34 名稱

暫存器快取記憶體(cache) 主存

硬碟一般容量

<1kb

<16m

<512gb

>1tb

實現技術

cmos,

cmos/sram

cmos/dram 磁碟

訪問時間(ns)

0.25-0.5

5-25

50-250

5000000 頻寬

50000-500000

5000-20000

2500-10000

50-500

控制方式

編譯器 硬體

作業系統

作業系統

備份方式

快取記憶體 主存

硬碟光碟/磁帶

計算機使用tlb,l1 cache,l2 cache,虛存把虛擬位址空間對映為實體地址空間。接下來,我們看看計算機是如何做到的:

首先,把64位的虛擬位址邏輯上分成虛擬頁號和頁內偏移量。前者傳送到tlb,轉換為實體地址;後者的高幾位送到l1 cache中,作為查詢索引。如果tlb命中,物理頁號會傳送到l1 cache中作為標籤來檢測是否和cache中標籤匹配。如果匹配,l1 cache命中。然後頁內偏移量的後幾位作為cache中的偏移量,選擇cache中對應的內容,返回給處理器。

如果l1 cache缺失,記憶體位址會繼續用來查詢l2 cache,查詢l2 cache使用虛擬頁號的後幾位和頁內偏移量組成的位址。該位址會被分成l2 cache標籤、l2 cache索引和l2 cache偏移量三部分,如果l2 cache標籤,l2 cache索引在l2 cache中存在,就使用l2 cache偏移量直接取對應內容返回給處理器。

如果l1和l2 cache都沒有命中,則接著訪問記憶體。因為實際cpu中,訪存的延時比cache訪問延時大很多,而cache的命中率一般都很高。在90%-95%左右。所以在訪存之前,加點cache不算什麼。

現在的通用微處理,和cache有關的部分已經佔據了晶元面積的50%左右,cache功耗的也幾乎佔據了整個cpu功耗的一半。多核的微處理器,甚至增加了l3 cache。下圖就是ibm的power7處理器的版圖.l1,l2,l3 cache的面積幾乎佔了晶元面積的60%。

ibm power 7處理器的晶元版圖

雖然cache在x86系列處理器**現的初衷是減小訪存延時,對程式設計師不可見。但若程式的區域性性不好,cache 缺失率高,那效能的下降將會非常明顯。所以高效能的編譯器開發者都會和cache做一翻鬥爭。諸多的迴圈優化,結構體優化幾乎都是為了增加訪存區域性性。

《see mips run linux》上對cache和x86有些不同,x86的cache為了保持相容性,所以推崇在對程式設計師遮蔽的情況下提高效能。而mips的商用處理器中,沒有cache就不能稱之為risc。而cache的設計初衷是為了提高訪存速度而非幫助系統程式設計師,所以沒必要非得不可見。所以mips的cache可以作為spm,一種可控的cache,你可以把一部分內容鎖定到cache中,強制它不會被替換出去。比如當程式中有陣列時,當然這是極端的優化方法。

參考:§ 

§  see mips run linux 2ed. dominic sweetman

ps:上圖來自張曉東教授在中國科大龍星課程

的ppt。

暫存器層次結構(cache)

cache 中文翻譯就是快取記憶體 隨機訪問儲存器 random access memory,ram 分為sram 靜態 和動態dram sram將每個位儲存在乙個雙穩態的儲存器單元裡,每個單元用乙個六電晶體電路實現。只要有電,就會一直保持他的值不變,即使有干擾。動態ram 需要重新整理,每位電晶體...

快取記憶體Cache原理之 1 儲存器層次結構

儲存器層次結構 cache和主存的關係 實現cache需要解決的問題 cache的對映方式 cache命中率和缺失率 cache的關聯度 下面開始第一節內容,儲存器的層次結構,及cache在層次化結構中的位置。目前,我們所知道的儲存器有暫存器 sram dram 硬碟等,列出它們的相關指標 暫存器 ...

第4章 Cache的層次結構

我第一次接觸儲存器瓶頸這個話題是在上世紀九十年代,距今已接近二十年。至今這個問題非但沒有緩和的趨勢,卻愈演愈烈,進一步發展為 memory wall 在這些問題沒有得到解決之前,片面的發展多核,尤其是片面提高在乙個 cmp中的 cpu core 數目幾乎沒有太大意義,除非你所針對的應用是風花雪月的科...