我有英特爾酷睿IvyBridge處理器,英特爾®酷睿TM i7-3770 CPU @ 3.40GHz(L1-32KB,L2-256KB,L3-8MB)。我知道L3是包容性的,可以在多個核心之間共享。我想知道對於以下到我的系統包容還是獨家?英特爾酷睿IvyBridge處理器中的L1,L2緩存
PART1:
- L1是包容還是排斥?
- L2是包容還是獨佔?
PART2:
如果L1和L2是包括兩個端值然後找到L2的存取時間,我們首先聲明大小的陣列(1MB)大於L2高速緩存(256KB),然後開始訪問整個數組加載到二級緩存中。之後,我們訪問從開始索引到結束索引的數組元素,跨度爲64B,因爲緩存行大小爲64B。爲了獲得更準確的結果,我們重複這個過程(在索引處,開始 - 結束處訪問數組元素)多次,例如100萬次,並取平均值。
我的理解爲什麼這種方法提供了正確的結果如下 - 當我們訪問尺寸比L2高速緩存大小更多的陣列,那麼整個陣列從主存儲到L3,然後從L3到L2,L2,然後到L1裝。整個陣列的最後32KB在L1中,因爲它最近被訪問。整個陣列也存在於L2和L3緩存中,這也是由於包容性和緩存一致性。現在,當我開始從L1緩存中的起始索引(即而不是)開始再次訪問數組時,因此會出現緩存未命中並將從L2緩存中加載。這樣整個數組的所有元素都會有更高的訪問時間,總共我會得到整個數組的總訪問時間。要獲得單一訪問權限,我將採用訪問總數的平均值。
我的問題是 - 我說得對嗎?
在此先感謝。
謝謝Leeor。你能告訴我L1是如何處理的嗎?它是否會檢查L2中的數據,然後直接檢查L1或L3中的數據?另外,還有一個疑問是,當在L1中發生未命中並且新線從高速緩存中取出時,當L1中的高速緩存行被替換時,是否會有L2或L3中的替換。 – bholanath
未命中將查找下一個緩存級別,L1-> L2-> L3。當一條線被提取時,它應該填寫所有的緩存級別 - 填充L3是強制性的,因爲它是包容性的,L2不像我們所說的那樣包容,但是填充它仍然是一個好主意,因爲該線可能會悄悄地從L1 ,所以你希望它在其他層面上覆制。 – Leeor
謝謝@leeor。 – bholanath