面試高頻問題CPU cache基礎

2021-10-21 15:55:10 字數 2050 閱讀 7009

在思考為什麼需要cache之前,我們首先先來思考另乙個問題:我們的程式是如何執行起來的?

我們應該知道程式是執行在 ram之中,ram 就是我們常說的ddr(例如: ddr3、ddr4等)。我們稱之為main memory(主存)。當我們需要執行乙個程序的時候,首先會從磁碟裝置(例如,emmc、ufs、ssd等)中將可執行程式load到主存中,然後開始執行。在cpu內部存在一堆的通用暫存器(register)。如果cpu需要將乙個變數(假設位址是a)加1,一般分為以下3個步驟:

cpu 從主存中讀取位址a的資料到內部通用暫存器 x0(arm64架構的通用暫存器之一)。

通用暫存器 x0 加1。

cpu 將通用暫存器 x0 的值寫入主存。

我們將這個過程可以表示如下:

cpu register的速度一般小於1ns,主存的速度一般是65ns左右。速度差異近百倍。因此,上面舉例的3個步驟中,步驟1和步驟3實際上速度很慢。當cpu試圖從主存中load/store 操作時,由於主存的速度限制,cpu不得不等待這漫長的65ns時間。如果我們可以提公升主存的速度,那麼系統將會獲得很大的效能提公升。如今的ddr儲存裝置,動不動就是幾個gb,容量很大。如果我們採用更快材料製作更快速度的主存,並且擁有幾乎差不多的容量。其成本將會大幅度上公升。我們試圖提公升主存的速度和容量,又期望其成本很低,這就有點難為人了。因此,我們有一種折中的方法,那就是製作一塊速度極快但是容量極小的儲存裝置。那麼其成本也不會太高。這塊儲存裝置我們稱之為cache memory。在硬體上,我們將cache放置在cpu和主存之間,作為主存資料的快取。 當cpu試圖從主存中load/store資料的時候, cpu會首先從cache中查詢對應位址的資料是否快取在cache 中。如果其資料快取在cache中,直接從cache中拿到資料並返回給cpu。當存在cache的時候,以上程式如何執行的例子的流程將會變成如下:

cpu和主存之間直接資料傳輸的方式轉變成cpu和cache之間直接資料傳輸。cache負責和主存之間資料傳輸。

cahe的速度在一定程度上同樣影響著系統的效能。一般情況cache的速度可以達到1ns,幾乎可以和cpu暫存器速度媲美。但是,這就滿足人們對效能的追求了嗎?並沒有。當cache中沒有快取我們想要的資料的時候,依然需要漫長的等待從主存中load資料。為了進一步提公升效能,引入多級cache。前面提到的cache,稱之為l1 cache(第一級cache)。我們在l1 cache 後面連線l2 cache,在l2 cache 和主存之間連線l3 cache。等級越高,速度越慢,容量越大。但是速度相比較主存而言,依然很快。不同等級cache速度之間關係如下:

首先引入兩個名詞概念,命中和缺失。 cpu要訪問的資料在cache中有快取,稱為「命中」 (hit),反之則稱為「缺失」 (miss)。多級cache之間是如何配合工作的呢?我們假設現在考慮的系統只有兩級cache。

當cpu試圖從某位址load資料時,首先從l1 cache中查詢是否命中,如果命中則把資料返回給cpu。如果l1 cache缺失,則繼續從l2 cache中查詢。當l2 cache命中時,資料會返回給l1 cache以及cpu。如果l2 cache也缺失,很不幸,我們需要從主存中load資料,將資料返回給l2 cache、l1 cache及cpu。這種多級cache的工作方式稱之為inclusive cache。某一位址的資料可能存在多級快取中。與inclusive cache對應的是exclusive cache,這種cache保證某一位址的資料快取只會存在於多級cache其中一級。也就是說,任意位址的資料不可能同時在l1和l2 cache中快取。

面試高頻問題

一般包括專案經驗 其中可以有針對的問一些問題探聽所述的虛實 掌握技術的深度廣度 資料結構 演算法 程式設計能力,專業知識 作業系統,網路,資料庫等 在面試過程中,對候選人的表達能力,思維能力,學習能力,主動性和責任心,對技術是否有熱情等方面做出判斷。探聽虛實,可以問現有專案怎麼做的,也可以現場進行設...

C 面試高頻問題

實現重要的庫函式 strcpy strncpy memcpy 1.1 char strcpy char dest,const char src 將src拷貝到dest char strcpy char dest,const char src 判斷拷貝終止條件 return dest 1.2 char...

python高頻面試問題 三

整理一下最近被問到的一些高頻率的面試問題。總結一下方便日後複習鞏固用,同時希望可以幫助一些朋友們。前兩期點這 python近期遇到的一些面試問題 一 python近期遇到的一些面試問題 二 電子郵件位址有統一的標準格式 使用者名稱 伺服器網域名稱。使用者名稱表示郵件信箱 註冊名或信件接收者的使用者標...