[英]How much of an object (containing std::vectors) is loaded in to the L1/L2/L3 cache?
[英]Measure the number of lines loaded in l1/l2 cache for reads(including prefetch)?
我正在嘗試確定L1緩存(處理器Intel Broadwell)中加載的緩存行數。 我的內核代碼是
a[i] = 2*b[i] + 2.3 // i from 0 to pow(10,8)
我正在使用perf事件L1-dcache-load-misses
。 測得的數量是預期的兩倍。 我期待6M負載和6M存儲。 但L1-dcache-load-misses
約為12M。 然而LLC-stores
如預期(6M)
i) L1-dcache-load-misses
是否計算加載和存儲未命中?
在英特爾軟件開發人員手冊 (表19.5)中,對於L2緩存,我發現了兩個指標
L2_TRANS.L2_FILL
(r20f0) L2_TRANS.L2_WB
(r40f0) ii)L2_TRANS.L2_FILL的確切含義是什么? 這是L2交易的總數嗎?
iii)L2_TRANS.L2_WB的確切含義是什么? 是L2寫入事務的總數嗎?
Perf使用映射到預定義計數器事件和掩碼的這些事件別名,但由於每個CPU可能具有不同的映射,這有時會發生變化,並且您可能最終會計算其他內容。
這個關於英特爾論壇的討論表明,至少有一些系統(Haswell,但Broadwell應該非常相似)有L1-dcache-load-misses
錯誤地映射到L1替換,這可以解釋雙重值(商店也會獲取行進入L1緩存)。
對於L2_trans事件,假設它們被正確映射,它們應該確實計算L2中的總填充和驅逐。 請注意,這可能包括更多的負載+存儲,因為L2也有代碼(在這么小的內核中可能忽略不計)和預取(可能很重要,因為您的數據在空間布局並且易於預取)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.