精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

計算機中的高速緩存詳解

FPGA之家 ? 來源:嵌入式那些事 ? 作者:嵌入式那些事 ? 2021-03-22 10:22 ? 次閱讀

1. 什么是緩存??緩存又叫高速緩存,是計算機存儲器中的一種,本質上和硬盤是一樣的,都是用來存儲數據和指令的 。它們最大的區別在于讀取速度的不同。程序一般是放在內存中的,當CPU執行程序的時候,執行完一條指令需要從內存中讀取下一條指令,讀取內存中的指令要花費100000個時鐘周期(緩存讀取速度為200個時鐘周期,相差500倍),如果每次都從內存中取指令,CPU運行時將花費大量的時間在讀取指令上。這顯然是一種資源浪費。

如何解決這個問題呢?有人肯定會問,直接把程序存儲在緩存中不行嗎?

答案是可以的。但是,緩存的造價太貴了。具體如下圖所示。以2015年的售價為例,1GB SRAM的價格大約為327680美元,而1GB 普通硬盤的價格僅僅為0.03美元。用緩存來存儲程序成本太高了,得不償失。

751c70bc-8925-11eb-8b86-12bb97331649.png

SRAM和DISK價格比較

于是,有人就提出了這樣一種方法,在CPU和內存之間添加一個高速內存, 這個高速內存容量小,只用來存儲CPU執行時常用的指令。既保證了硬件成本,又提高了CPU的訪問速度。這個高速內存就是緩存(高速緩存)。

2. 緩存的定義??高速緩存是一個小而快速的存儲設備 ,它作為存儲在更大更慢的設 備中的數據對象的緩沖區域。使用高速緩存的過程稱為緩存 。

具體如下圖所示,主存可以作為一個存儲設備,L3是主存的緩沖區域,從L3存取數據的過程就叫做緩存。

存儲器的層次結構

3. 計算機中的高速緩存3.1 高速緩存相關名詞

如下圖所示,數據總是以塊為單位 在高速緩存和主存之間來回復制。

緩存和內存的數據交換

如果我們的程序請求一個數據字,這個數據字存儲在編號為10的塊中。將分以下幾種情況考慮:

1. 高速緩存行中為空,這叫做冷不命中 。

2.高速緩存中有數據塊,但沒有數據塊10,這叫做緩存不命中 。接下來緩存請求主存將該塊復制到高速緩存,高速緩存接收到之后將替換一個現有的數據塊,從而存儲新的數據塊在高速緩存中。最后,高速緩存將數據塊10返回給CPU。

3. 高速緩存中有數據,將內存中的數據塊放置到高速緩存中時,發生了沖突,這叫做沖突不命中 。

放置策略中最常用的是:第k+1層的塊i必須放在第k層的塊(i mod 4)中。比如,第k+1層的0,4,8,12會映射到第k層的塊0。塊1,5,9,13會映射到塊1。

4. 緩存中有數據塊10,則直接返回給CPU。這叫做緩存命中 。

3.2 計算機中的高速緩存存儲器模型

高速緩存完全由硬件管理,硬件邏輯必須要知道,如何查找緩存中的塊,并確定是否包含特定塊。因此,必須以非常嚴格且簡單的方式去構建高速緩存。在計算機中,高速緩存模型如下圖所示。

計算機中的高速緩存模型

我們可以將高速緩存存儲器視為有個高速緩存組的數組 。每個組包含個高速緩存行 。每個行是由一個字節的數據塊組成的。

一般而言,高速緩存的結構可以用元組(S,E,B,m)來描述。高速緩存的大小(或容量)C指的是所有塊的大小的和。標記位和有效位不包括在內 。因此,C=S×E×B。

每個高速緩存存儲器有m位,可以組成個不同的地址,。每個數據塊由以下三部分構成。

有效位:有效位為t位,t一般為1,指明這個行是否包含有效信息

標記位:標記位為s位。唯一的標識了存儲在高速緩存中的塊(數組索引)。

塊偏移:數據塊為字節。指明CPU請求的內容在數據塊中的偏移。

地址和計算機緩存模型

下面對以上內容出現的參數做個總結:

參數描述

S=2^s組數

E每個組的行數

B=2^b塊大小(字節)

m=log2(M)物理地址位數

M=2^m內存地址的最大數量

s=log2(S)組索引位數量

b=log2(B)塊偏移位數量

t=m-(s+b)標記位數量

C=B*E*S不包括像有效位和標記位這樣開銷的高速緩存大小(字節)

3.3 計算機中有哪些緩存

下表為現代計算機中用到的各種緩存。

類型緩存什么被緩存在何處延遲(周期數)由誰管理

CPU寄存器4字節或8字節芯片上的CPU寄存器0編譯器

TLB地址翻譯芯片上的TLB0硬件MMU

L1高速緩存64字節塊芯片上的L1高速緩存4硬件

L2高速緩存64字節塊芯片上的L2高速緩存10硬件

L3高速緩存64字節塊芯片上的L3高速緩存50硬件

虛擬內存4KB頁主存200硬件

緩沖區緩存部分文件主存200OS

磁盤緩存磁盤扇區磁盤控制器100000控制器固件

網絡緩存部分文件本地磁盤10000000NFS客戶

瀏覽器緩存Web頁本地磁盤10000000Web瀏覽器

Web緩存Web頁遠程服務器磁盤1000000000Web代理服務器

3.4 硬件讀取高速緩存的過程

當一條加載指令指示CPU從主存地址A中讀取一個字w時,會將該主存地址A發送到高速緩存中,則高速緩存會根據以下步驟判斷地址A是否命中:

組選擇:根據地址劃分,將中間的s位表示為無符號數作為組的索引 ,可得到該地址對應的組。

行匹配:根據地址劃分,可得到t位的標志位,由于組內的任意一行都可以包含任意映射到該組的數據塊,所以就要線性搜索組中的每一行,判斷是否有和標志位匹配且設置了有效位的行 ,如果存在,則緩存命中,否則緩沖不命中。

字抽取:如果找到了對應的高速緩存行,則可以將b位表示為無符號數作為塊偏移量 ,得到對應位置的字。

當高速緩存命中時,會很快抽取出字w,并將其返回給CPU。如果緩存不命中,CPU會進行等待,高速緩存會向主存請求包含字w的數據塊,當請求的塊從主存到達時,高速緩存會將這個塊保存到它的一個高速緩存行中,然后從被存儲的塊中抽取出字w,將其返回給CPU。

4. 直接映射高速緩存??上面我們介紹了計算機中的高速緩存模型,我們可以根據每個組的高速緩存行數E,將高速緩存分成不同的類型。下面我們看下直接映射高速緩存(E=1)的具體例子。

4.1 組選擇

組選擇示意圖如下所示。假設有 S 組,每組由一行組成,緩存塊為8字節。CPU發出地址要取數據字,高速緩存將該地址分解為三部分,對于圖中的地址來說,塊偏移量為4。組索引是 1 ,粉紅色的為t位標記位。因此,高速緩存提取的組索引為 1,即圖中第二行。

直接映射高速緩存組選擇

4.2 行匹配

然后,檢查地址中的標記位與緩存行中的標記位是否匹配。如果匹配,將進行下一步字選擇。如果不匹配,則表示未命中。在未命中時,高速緩存必須從內存中重新取數據塊, 在行中覆蓋此塊。

直接映射高速緩存行匹配

4.3 字選擇

當標記位匹配時,表示命中,接著檢查地址中的塊偏移為4,即要從緩存行數據塊的第5位開始取值,并返回給CPU。

直接映射高速緩存字選擇

4.4 模擬直接映射緩存

下面,我們模擬下直接映射高速緩存的過程,以便加深理解高速緩存是如何工作的。假設,內存地址為4字節,S=4組,E=1行/組,B=2字節/塊。其結構圖如下所示。

模擬直接映射高速緩存地址結構圖

我們模擬CPU要從高速緩存中讀取地址為0,1,7,8,0的數據。下面是具體的過程。

地址二進制是否命中

0[](t=0,s=00,b=0)

1[](t=0,s=00,b=1)

7[](t=0,s=11,b=1)

8[](t=1,s=00,b=0)

0[](t=00,s=0,b=0)

1. 讀地址0的數據。標記位為0,索引位為00,偏移位為0,塊號為0。緩存行中沒有數據,組0的有效位為0,地址的標記位和組0的標記位不匹配,因此,未命中。然后,高速緩存從內存中取出塊0,塊1, 共2字節,并存儲在組0中。具體如下圖所示。

模擬直接映射高速緩存讀地址0的數據

2. 讀地址1的數據。標記位為0,索引位為00,偏移位為1,塊號1。緩存行中已有數據數據,組0的有效位為1,地址1的標記位和組0的標記位匹配,因此,命中。具體如下圖所示。

模擬直接映射高速緩存讀地址1的數據

3. 讀地址7的數據。標記位為0,索引位為11(3),偏移位為1,塊號為3。緩存行中有數據,組3的有效位為0,地址的標記位和組0的標記位不匹配,因此,未命中。然后,高速緩存從內存中取出塊6,塊7, 共2字節,并存儲在組3中。具體如下圖所示。

模擬直接映射高速緩存讀地址7的數據

4. 讀地址8的數據。標記位為1,索引位為00,偏移位為0,塊號為4。緩存行中有數據,組0的有效位為1,地址的標記位和組0的標記位不匹配,因此,未命中。然后,高速緩存從內存中取出塊8,塊9, 共2字節,并存儲在組0中。具體如下圖所示。

模擬直接映射高速緩存讀地址8的數據

5. 讀地址0的數據。標記位為0,索引位為00,偏移位為0,塊號為0。緩存行中有數據,組0的有效位為1,地址的標記位和組0的標記位不匹配,因此,未命中。然后,高速緩存從內存中取出塊0,塊1, 共2字節,并存儲在組0中。具體如下圖所示。

模擬直接映射高速緩存再次讀地址0的數據

最終結果如下:緩存命中率為20%。

地址二進制是否命中

0[](t=0,s=00,b=0)否

1[](t=0,s=00,b=1)是

7[](t=0,s=11,b=1)否

8[](t=1,s=00,b=0)否

0[](t=00,s=0,b=0)否

注意:塊大小為2字節,所以從內存中取數據總是以偶數倍開始的,所以會看到M[8-9],而不是M[7-8]。

如果你看懂了上述高速緩存的整個過程,考慮下如何編程來模擬高速緩存呢?后面的文章我會詳細講解如何用C語言模擬高速緩存,歡迎關注我的公眾號【嵌入式Linux那些事】,第一時間獲取更新。

4.5 直接映射高速緩存的缺陷

觀察以上過程其實可以發現,在第5步,讀地址0的數據的時候,我們又得重新從內存中取數據到緩存行中。在讀地址8的數據的時候,M[8-9]替換了緩存行中的M[0-1]。

最主要的原因是每一個組中只允許存放一行緩存。假設,E = 2,每組中有2個緩存行,M[8-9]和M[0-1]就有很大可能同時存在于組0中。我們在第5步訪問時,就不需要重新從內存中取數據了。因此,就有了E = 2的兩路相聯高速緩存。

5. 兩路相聯高速緩存??直接映射高速緩存中沖突不命中造成的問題源于每個組只有一行這個限制。組相聯高速存放松了這條限制,所以每個組都保存有多于一個的高速緩存行。如下圖所示為兩路相聯的高速緩存。

5.1 組選擇

它的組選擇與直接映射高速緩存的組選擇一樣,組索引位標識組。具體如下圖所示,這里不再贅述。

兩路相聯高速緩存組選擇

5.2 行匹配

組相聯高速緩存中的行匹配比直接映射高速緩存中的更復雜,因為它必須每次檢查多個行 的標記位和有效位,以確定所請求的字是否在集合中。具體如下圖所示。

兩路相聯高速緩存行匹配

5.3 字選擇

字選擇的過程和直接映射高速緩存中的方式一樣,這里就不再贅述。

兩路相聯高速緩存字選擇

5.4 模擬兩路相聯高速緩存

下面,我們模擬下兩路相聯高速緩存的過程,以便加深理解高速緩存是如何工作的。假設,內存地址為4字節,S=2組,E=2行/組,B=2字節/塊。其結構圖如下所示。

兩路相聯高速緩存地址結構

我們模擬CPU要從高速緩存中讀取地址為0,1,7,8,0的數據。下面是具體的過程。

地址二進制是否命中

0[] (t=00,s=0,b=0)

1[](t=00,s=0,b=1)

7[](t=01,s=1,b=1)

8[](t=10,s=0,b=0)

0[](t=00,s=0,b=0)

1. 讀地址0的數據。標記位為00,索引位為0,偏移位為0,塊號為0。緩存行中沒有數據,組0的有效位為0,地址的標記位和組0的第一行和第二行的標記位都不匹配,因此,未命中。然后,高速緩存從內存中取出塊0,塊1, 共2字節,并存儲在組0第一行中。具體如下圖所示。

模擬兩路相聯高速緩存讀地址0的數據

2. 讀地址1的數據。標記位為00,索引位為0,偏移位為1,塊號為1。緩存行中已有數據數據,組0的第一行有效位為1,地址1的標記位和組0的第一行標記位匹配,因此,命中。具體如下圖所示。

模擬兩路相聯高速緩存讀地址1的數據

3. 讀地址7的數據。標記位為01,索引位為1,偏移位為1,塊號為1。緩存行中有數據,組1的有效位為0,地址的標記位和組1中的第一行和第二行的標記位不匹配,因此,未命中。然后,高速緩存從內存中取出塊6,塊7, 共2字節,并存儲在組1中。具體如下圖所示。

模擬兩路相聯高速緩存讀地址7的數據

4. 讀地址8的數據。標記位為10,索引位為0,偏移位為0,塊號為0。緩存行中有數據,組0的第一行有效位為1,第二行有效位為0,地址的標記位和組0的第一行和第二行的標記位不匹配,因此,未命中。然后,高速緩存從內存中取出塊8,塊9, 共2字節,并存儲在組0的第二行中。具體如下圖所示。

模擬兩路相聯高速緩存讀地址8的數據

5. 讀地址0的數據。標記位為00,索引位為0,偏移位為0,塊號為0。緩存行中有數據,組0的第一行有效位為1,地址的標記位和組0的第一行的標記位匹配,因此,命中。具體如下圖所示。

模擬兩路相聯高速緩存再次讀地址0的數據地址二進制是否命中

0[] (t=00,s=0,b=0)否

1[](t=00,s=0,b=1)是

7[](t=01,s=1,b=1)否

8[](t=10,s=0,b=0)否

0[](t=00,s=0,b=0)是

兩路相聯高速緩存與直接映射高速緩存相比,在每組中增加了一行,緩存命中率提升了15%。避免了緩存頻繁從內存中存取數據的情況,提高了程序運行速度。

6. 全相聯高速緩存??全相聯高速緩存中的行匹配和字選擇與組相聯高速緩存中的是一樣的,過程就不再贅述,其結構圖如下所示。

全相聯高速緩存結構示意圖

相聯度越高越好嗎?

答案是否定的。較高的相聯度會造成較高的成本。實現難度大,價格昂貴,而且很難使之速度變快。較高的相聯度會增加命中時間,因為復雜性增加了,另外,還會增加不命中處罰,因為選擇犧牲行的復雜性也增加了。

相聯度的選擇最終變成了命中時間和不命中處罰之問的折中。一般來講,高性能系統會為L1高速緩存選擇較低的相聯度(這里的不命中處罰只是幾個周期),而在不命中處罰比較高的較低層上使用比較小的相聯度。例如, Intel Core i7系統中,L和L2高速緩存是8路組相聯的,而L3高速緩存是16路組相聯的。

7. 真實計算機系統中的緩存??在此之前,我們一直假設高速緩存只保存數據。不過,實際上,高速緩存既保存數據,也保存指令。只保存指令的高速緩存稱為 i-cache 。只保存程序數據的高速緩存稱為 d-cache 。既保存指令又包括數據的高速緩存稱為 統一的高速緩存 。

如下圖所示為 Intel Core i7處理器的高速緩存層次結構。每個CPU芯片有四個核。每個核有自己的L1 i-cache, L1 d-cache和L2統一的高速緩存。所有的核共享片上L3統一的高速緩存。其具體參數如下表所示。

真實計算機的緩存模型緩存大小內部結構訪問時間

L132KB8路相聯4時鐘

L2256KB8路相聯10時鐘

L38M16路相聯40-75時鐘

8. 緩存的評價指標??最后介紹下衡量高速緩存性能的一些指標:

8.1 不命中率

在一個程序執行或程序的一部分執行期間,內存引用不命中的比率,它等于: 不命中數量/引用數量。

8.2 命中率

命中的內存引用比率。它等于: 1-不命中率。

8.3 命中時間

從高速緩存傳送一個字到CPU所需的時間,包括組選擇、行確認和字選擇的時間。一般來講,L1緩存的命中時間為:4個時鐘。L2緩存的命中時間為:10個時鐘。

8.4 未命中懲罰

未命中需要的額外時間。對于主存來說,一般為 50 ~ 200個時鐘周期。

舉個例子:

假設緩存命中時間為1個時鐘周期,緩存未命中懲罰為100個時鐘周期。

下面計算下97%緩存命中率和99%的緩存命中率的平均訪問時間為多少?計算公式為命中時間加上未命中處罰乘以百分系數。

97%的命中率:時鐘。

99%的命中率:時鐘。

結論:命中率增加2%,平均訪問時間減少了50%。

9. 總結??計算機中存在著各種各樣的緩存,比如, 文件緩存 把一些需要高速存取的變量緩存在內存中,每次訪問直接讀出即可。 瀏覽器緩存 根據一套與服務器約定的規則進行工作,如果在瀏覽過程中前進或后退時訪問到同一個圖片,這些圖片可以從瀏覽器緩存中調出而即時顯示。數據庫緩存 經常需要從數據庫查詢的數據、或經常更新的數據放入到緩存中,這樣下次查詢時,直接從緩存直接返回,減輕數據庫壓力。

我們了解這么多基本概念有什么用呢?如果我們理解了計算機系統是如何將數據在內存中組織和移動的,那么在寫程序時就可以把數據項存儲在合適的位置,CPU能更快地訪問到它們,提高程序的執行效率。

原文標題:24張圖7000字詳解計算機中的高速緩存

文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7430

    瀏覽量

    87733
  • 緩存
    +關注

    關注

    1

    文章

    233

    瀏覽量

    26649

原文標題:24張圖7000字詳解計算機中的高速緩存

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TMS320C64x在高性能DSP應用高速緩存使用情況

    電子發燒友網站提供《TMS320C64x在高性能DSP應用高速緩存使用情況.pdf》資料免費下載
    發表于 10-21 09:43 ?0次下載
    TMS320C64x在高性能DSP應用<b class='flag-5'>中</b>的<b class='flag-5'>高速緩存</b>使用情況

    德國建成歐洲首個量子計算機中

    IBM公司在德國Ehningen正式揭幕了其量子計算中心,標志著該公司在歐洲的首個、全球第二個此類中心的誕生,活動吸引了德國總理舒爾茨的出席。   這座位于Ehningen的計算機中心配備了
    的頭像 發表于 10-08 15:40 ?415次閱讀

    計算機存儲系統的構成

    計算機存儲系統是計算機中用于存放程序和數據的設備或部件的集合,它構成了計算機信息處理的基礎。一個完整的計算機存儲系統通常包括多個層次的存儲器,從高速
    的頭像 發表于 09-26 15:25 ?577次閱讀

    寄存器和高速緩存有什么區別

    寄存器和高速緩存(Cache)都是計算機系統中用于存儲數據的重要組成部分,但它們在功能、位置、容量、速度以及使用方式上存在著顯著的區別。
    的頭像 發表于 09-10 14:32 ?1043次閱讀

    計算機中總線的作用是什么

    計算機中,總線(Bus)扮演著極其重要的角色,它是計算機內部各功能部件之間傳送信息的公共通信干線。總線不僅連接了計算機的各個核心組件,還確保了數據、指令和控制信號的高效、準確傳輸。
    的頭像 發表于 08-26 15:57 ?903次閱讀

    邊沿觸發器在計算機中的應用

    邊沿觸發器在計算機中的應用極為廣泛,它們作為數字電路的基本單元,對于實現計算機內部的時序控制、數據存儲與傳輸、以及復雜邏輯功能等方面起著至關重要的作用。以下將從邊沿觸發器的定義、特點、工作原理及其在
    的頭像 發表于 08-12 14:20 ?377次閱讀

    三態緩沖器在計算機中的應用

    電路在不影響其他電路和總線的前提下,能夠靈活地控制其輸出狀態。以下將詳細探討三態緩沖器在計算機中的具體應用,內容將涵蓋其定義、優勢以及在不同計算機子系統的具體作用。
    的頭像 發表于 08-02 17:48 ?901次閱讀

    DRAM在計算機中的應用

    DRAM(Dynamic Random Access Memory,動態隨機存取存儲器)在計算機系統扮演著至關重要的角色。它是一種半導體存儲器,用于存儲和快速訪問數據,是計算機主內存的主要組成部分。以下是對DRAM在
    的頭像 發表于 07-24 17:04 ?936次閱讀

    如何為T2G的CM7高速緩存啟用ECC?

    如何為 T2G 的 CM7 高速緩存啟用 ECC。
    發表于 07-02 07:57

    工業計算機與普通計算機的區別

    在信息化和自動化日益發展的今天,計算機已經成為了我們日常生活和工作不可或缺的工具。然而,在計算機領域中,工業計算機和普通計算機雖然都具備基
    的頭像 發表于 06-06 16:45 ?1245次閱讀

    純硅振蕩器兼容SiTime在邊緣計算機中的應用

    純硅振蕩器兼容SiTime在邊緣計算機中的應用
    的頭像 發表于 04-29 10:09 ?316次閱讀
    純硅振蕩器兼容SiTime在邊緣<b class='flag-5'>計算機中</b>的應用

    量子計算機——高密度微波互連模組

    讓量子計算機走出實驗室造中國自主可控量子計算機量子芯片作為量子計算機的核心部件,扮演著類似于傳統計算機中‘大腦’的角色。而與此同時,高密度微波互連模組則像是‘神經網絡’,在量子芯片與外
    的頭像 發表于 03-15 08:21 ?655次閱讀
    量子<b class='flag-5'>計算機</b>——高密度微波互連模組

    【量子計算機重構未來 | 閱讀體驗】+ 了解量子疊加原理

    )。通過邏輯門來執行操作二進制數據,邏輯門是一種基本電路,它可以將一個或多個輸入轉換為輸出。邏輯門包括與門、或門、非門等等,將許許多多邏輯門組合起來就可以構建復雜的電路來執行各種操作,電子計算機中
    發表于 03-13 17:19

    一文了解CPU高速緩存

    CPU的核心功能包括數據運算和指令控制。CPU運算的數據和執行的指令全部存儲在CPU的寄存器,這些數據和指令又都來自于CPU高速緩存
    的頭像 發表于 01-02 16:01 ?1507次閱讀
    一文了解CPU<b class='flag-5'>高速緩存</b>

    量子計算機的作用有哪些

    認為是未來計算機技術的重要發展方向。 一、量子計算機的基本概念 量子計算機的核心是量子比特,與經典計算機中的比特不同,量子比特可以同時處于0和1的狀態,這種現象被稱為“疊加態”。此外,
    的頭像 發表于 12-30 14:32 ?1834次閱讀