1. 程式人生 > >淺談CPU三級快取和快取命中率

淺談CPU三級快取和快取命中率

CPU

CPU快取(Cache Memory)是位於CPU與記憶體之間的臨時儲存,它的容量比記憶體小的多但是交換速度卻比記憶體要快得多。快取的出現主要是

瞭解決CPU運算速度與記憶體讀寫速度不匹配的矛盾,因為CPU運算速度要比記憶體讀寫速度快很多,這樣會使CPU花費很長時間等待資料到來或

把資料寫入記憶體。在快取中的資料是記憶體中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU呼叫大量資料時,就可避開記憶體直接

從緩存中調用,從而加快讀取速度。由此可見,在CPU中加入快取是一種高效的解決方案,這樣整個記憶體儲器(快取+記憶體)就變成了既有快取的高

度,又有記憶體的大容量的儲存系統了。快取對CPU的效能影響很大,主要是因為CPU的資料交換順序和CPU與快取間的頻寬引起的。

    快取的工作原理是當CPU要讀取一個數據時,首先從快取中查詢,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度內

存中讀取並送給CPU處理,同時把這個資料所在的資料塊調入快取中,可以使得以後對整塊資料的讀取都從快取中進行,不必再呼叫記憶體。

正是這樣的讀取機制使CPU讀取快取的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的資料90%都在快取中,大約10%需要從記憶體讀取。

這大大節省了CPU直接讀取記憶體的時間,也使CPU讀取資料時基本無需等待。總的來說,CPU讀取資料的順序是先快取後內存。按照資料讀取順

序和與CPU結合的緊密程度,CPU快取可以分為一級快取,二級快取,部分高階CPU還具有三級快取,每一級快取中所儲存的全

部資料都是下一

級快取的一部分,這三種快取的技術難度和製造成本是相對遞減的,所以其容量也是相對遞增的。當CPU要讀取一個數據時,首先從

一級快取中查詢,如果沒有找到再從二級快取中查詢,如果還是沒有就從三級快取或記憶體中查詢。一般來說,每級快取的命中率大概都在80%左

右,也就是說全部資料量的80%都可以在一級快取中找到,只剩下20%的總資料量才需要從二級快取、三級快取或記憶體中讀取,由此可見一級緩

是整個CPU快取架構中最為重要的部分

cpu形象圖:


賜教!

相關推薦

CPU三級快取快取命中率

CPU: CPU快取(Cache Memory)是位於CPU與記憶體之間的臨時儲存器,它的容量比記憶體小的多但是交換速度卻比記憶體要快得多。快取的出現主要是 為瞭解決CPU運算速度與記憶體讀寫速度不匹配的矛盾,因為CPU運算速度要比記憶體讀寫速度快很多,這樣會使CP

【併發程式設計】CPU cache結構快取一致性(MESI協議)

一、cache cpu cache已經發展到了三級快取結構,基本上現在買的個人電腦都是L3結構。 1. cache的意義 為什麼需要CPU cache?因為CPU的頻率太快了,快到主存跟不上,這樣在處理器時鐘週期內,CPU常常需要等待主存,浪費資源。所以cac

快取行、cpu偽共享快取行填充

由於在看disruptor時瞭解到快取行,以及快取行填充的問題,所以各處瞭解記在這裡 一、快取行 CPU 為了更快的執行程式碼。於是當從記憶體中讀取資料時,並不是只讀自己想要的部分。而是讀取足夠的位元組來填入快取記憶體行。根據不同的 CPU ,快取記憶體

Oracle資料庫中的快取-Cache (IO)

Cache和Buffer是兩個不同的概念,簡單的說,Cache是加速“讀”,而buffer是緩衝“寫”,前者解決讀的問題,儲存從磁碟上讀出的資料,後者是解決寫的問題,儲存即將要寫入到磁碟上的資料。在很多情況下,這兩個名詞並沒有嚴格區分,常常把讀寫混合型別稱為buffer

hibernate的sessionFactorysession

ber 讀取配置 簡單 開啟 mil fig 理解 name () 首先,講一個悲傷的故事。。。 有一天,一個以為自己javaEE很叼的程序員,在經歷了好久不寫Java代碼的情況下,去參加阿裏巴巴的java面試,然後,在被問到一個很簡單的問題的時候,結果沒有回答好。那麽接下

cookie,sessionStoragelocalStorage區別

一次 flash htm ddb coo 清除 rem 限制 web服務器 在客戶端存儲數據可以使用的技術有如下四種: Cookie技術:瀏覽器兼容性好,但操作比較復雜,需要程序員自己封裝,源生的Cookie接口不友好 H5 WebStorage:不能超過8

Mybatis中的 ${ } #{ }的區別

mybatis sql註入 語句 nbsp 之前 com pre 預編譯 sql 語句 一、舉例說明 1 select * from user where name = "dato"; 2 3 select * from user where name = #

maxMemory , totalMemory , freeMemory OOM 與 native Heap

空間 ora sse 3.x 設置 size 殺進程 p s 使用 作者:林冠宏 / 指尖下的幽靈 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/lingu

Mysql中wherehaving的區別

where和having的區別一、誤區:不要錯誤的認為having和group by 必須配合使用.二、where和having用法解析:1、 where和having都可以使用的場景: select goods_price,goods_name from goods where goods_price &g

C#NET抽象類接口的區別

直接 bstr 訪問 rtu 例如 virtual 索引 AC 特性 一、抽象類: 在類聲明中使用abstract修飾符的類稱為抽象類。含有一個或一個以上的抽象成員的類,必須定義為抽象類。當方法聲明包含abstract修飾符時,稱該方法為抽象方法,雖然抽象方法同時隱含為虛擬

Angular6的服務依賴注入

在開發中,元件一般用來寫檢視有關的功能,服務則寫一些其他的邏輯,諸如從伺服器獲取資料、驗證使用者輸入或直接往控制檯中寫日誌等工作. 先解釋兩個概念: Providers(提供商):是個比較抽象的名詞,我們把它想象為'圖紙'更好理解一些,就比如我們想要生產汽車,就需要先有汽車的圖紙,圖紙

電源濾波原理避免干擾方法

濾波電容可以降低電源的交流阻抗,原因就是實際電源總有內阻,傳輸線路也有阻抗,去耦電容可以讓一部分瞬間變化的電流直接在電容上交換。DC/DC電源電路具有功耗低,功率高的優點,吸收式濾波有電容和電容電路構成,可以將噪聲徹底消除。 DC/DC電路噪聲:紋波和噪聲 DC/DC電源電路具有功耗低,功率

線程runnablecallable的使用及區別

RoCE div unable 邏輯 exc pan service 但是 submit 線程使用比較廣泛,但實際上一般項目很少用上線程,線程常用於優化復雜的程序執行流程,把一些與業務關系關系不大但是必須要執行的流程使用線程的方式讓子線程去執行,主流程只返回跟業務有關的信息

Quartz的JobExecutionContextJobDataMap

一 點睛 1 JobExecutionContext是什麼 當Scheduler呼叫一個Job,就會將JobExecutionContext傳遞給Job的execute()方法 Job能通過JobExecutionContext物件訪問到Quartz執行時候的

Quartz的JobJobDetails

一 點睛 1 Job定義 實現業務邏輯的任務介面。 Job介面非常容易實現,只有一個execute方法,類似TimeTask的run方法,在裡面編寫業務邏輯。 2 Job介面原始碼 public interface Job { void

python 小數據池編碼

must 1byte some none 不同的 布爾值 語句 script standard ?. ?數據池   在說?數據池之前. 我們先看?個概念. 什麽是代碼塊: 根據提示我們從官??檔找到了這樣的說法: A Python program is constru

css中浮動清除浮動帶來的影響

淺談css中浮動和清除浮動帶來的影響 有很多時候,我們都會用到浮動,而我們有時候對浮動只是一知半解,卻不是太清楚它到底是怎麼回事,不知道各位有沒有和我一樣的感覺,只知道用它,卻不知道它到底是怎麼回事,所以,在學習的過程中,就要把一個概念不是很清晰的問題把它弄清楚了,便於我們以後的使用。早些時候,

Django學習migratemakemigrations的差別

Python manger.py makemigrations Python manger.py makemigrations user #對單個app python manager.py migrate python manger.py sqlmigrate theapp 0001 pyt

java編譯型別執行型別

背景:去某五星級酒店面試vi**,面試官拿出一段程式碼然購物寫輸出結果。考察點是:編譯型別和執行型別以及過載和覆蓋 話不多說,程式碼如下: class A{ public void show(A obj){ System.out.println(

資料庫樂觀鎖悲觀鎖

在單例項JVM中,常見的處理併發問題的方法有很多,比如synchronized關鍵字進行訪問控制、volatile關鍵字、ReentrantLock等常用方法。但是在分散式環境中,上述方法卻不能在跨jvm場景中用於處理併發問題,當業務場景需要對分散式環境中的併發