2013-11-04 48 views
4

我有英特爾酷睿IvyBridge處理器,英特爾®酷睿TM i7-3770 CPU @ 3.40GHz(L1-32KB,L2-256KB,L3-8MB)。我知道L3是包容性的,可以在多個核心之間共享。我想知道對於以下到我的系統包容還是獨家?英特爾酷睿IvyBridge處理器中的L1,L2緩存

PART1:

  1. L1是包容還是排斥?
  2. L2是包容還是獨佔?

PART2:

如果L1和L2是包括兩個端值然後找到L2的存取時間,我們首先聲明大小的陣列(1MB)大於L2高速緩存(256KB),然後開始訪問整個數組加載到二級緩存中。之後,我們訪問從開始索引到結束索引的數組元素,跨度爲64B,因爲緩存行大小爲64B。爲了獲得更準確的結果,我們重複這個過程(在索引處,開始 - 結束處訪問數組元素)多次,例如100萬次,並取平均值。

我的理解爲什麼這種方法提供了正確的結果如下 - 當我們訪問尺寸比L2高速緩存大小更多的陣列,那麼整個陣列從主存儲到L3,然後從L3到L2,L2,然後到L1裝。整個陣列的最後32KB在L1中,因爲它最近被訪問。整個陣列也存在於L2和L3緩存中,這也是由於包容性和緩存一致性。現在,當我開始從L1緩存中的起始索引(即而不是)開始再次訪問數組時,因此會出現緩存未命中並將從L2緩存中加載。這樣整個數組的所有元素都會有更高的訪問時間,總共我會得到整個數組的總訪問時間。要獲得單一訪問權限,我將採用訪問總數的平均值。

我的問題是 - 我說得對嗎?

在此先感謝。

回答

4

請參見英特爾優化指南中的第2.2.5節 -
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf

(注意,這適用於桑迪橋,但由於改變了常春藤橋,其中有隻有輕微的微量不會出現上一代的架構變化)。

所以,關於你的問題:

  1. 對於L1有沒有包容性的問題,因爲它沒有上一級緩存是L2緩存包容,含義包括-的
  2. 不能保證居住在L1中的線路也必須在L2中。然而在大多數情況下,它可能是可能在那裏,因爲它最初可能被核心請求填充到L2中,並且有很大的機會在L2中更長時間地存活,因爲它更大(因此驅逐更好地傳播到更多套),並通過L1(通常意味着更少的驅逐)

還要注意的是,如果你的基準是訪問一個數據集比L2大,它可能會失敗在L2坐(濾特別是如果你連續訪問它並超過L2的尺寸超過單一尺寸),並且您必須從L3獲取它。

+0

謝謝Leeor。你能告訴我L1是如何處理的嗎?它是否會檢查L2中的數據,然後直接檢查L1或L3中的數據?另外,還有一個疑問是,當在L1中發生未命中並且新線從高速緩存中取出時,當L1中的高速緩存行被替換時,是否會有L2或L3中的替換。 – bholanath

+0

未命中將查找下一個緩存級別,L1-> L2-> L3。當一條線被提取時,它應該填寫所有的緩存級別 - 填充L3是強制性的,因爲它是包容性的,L2不像我們所說的那樣包容,但是填充它仍然是一個好主意,因爲該線可能會悄悄地從L1 ,所以你希望它在其他層面上覆制。 – Leeor

+0

謝謝@leeor。 – bholanath

相關問題