![](/img/trans.png)
[英]Why does Perf and Papi give different values for L3 cache references and misses?
[英]Measure L1 data cache miss with perf and papi
PAPI_L1_LDM
中的PAPI_L1_LDM
與perf中的L1-dcache-load-misses
PAPI_L1_LDM
什么區別?
我使用了相同的設置,就像這篇文章一樣。
因此,我得到了papi:
PAPI_L1_DCM: 515 <- L1 data cache miss (probably L1D_READ_MISSES_ALL + L1D_READ_MISSES_RETRIED?)
PAPI_L1_ICM: 300 <- L1 Instruction cache miss
PAPI_L1_LDM: 441 <- L1 Load data miss
PAPI_L1_TCM: 815 <- L1 Total cache miss
不幸的是,這台機器不支持PAPI_L1_DCA
。
對於perf(僅在用戶空間,因為papi也只測量用戶空間而沒有內核空間):call: perf stat -B -e L1-dcache-load-misses:u,cache-misses:u ./perf
16,539 L1-dcache-load-misses
128 cache-misses:u
對於N=1000000
1000000,16,539似乎更合理。 load-data-miss(papi中的PAPI_L1_LDM)和數據緩存未命中(papi中的PAPI_L1_DCM)之間有什么區別?為什么這些數字在papi和perf中有所不同? cache-misses:u
是否與L2緩存未命中相關?
編輯:硬件(Xeon E5-2600 v3系列,Haswell-EP 12核心)
一些說明:
從PAPI 手冊頁 ,您可以看到PAPI_L1_LDM
=“負載未命中數”。 換句話說, PAPI_L1_LDM
是僅從負載 (有時是預取 )發生的未命中。
加載是程序執行加載指令以檢索內存的時間。
預取是指進程猜測您將在不久的將來加載內存並提前獲取內存。
在L1-dcache-load-misses
L1
是Level-1緩存,是最小和最快的緩存。 另一方面, LLC
指的是緩存層次結構的最后一級,因此表示最大但最慢的緩存。 i
vs. d
將指令緩存與數據緩存區分開來。 只有L1以這種方式分割,其他緩存在數據和指令之間共享。 您似乎認為cache-misses:u
在與L2緩存未命中相關的性能中。 實際上並非如此。
cache-misses
事件表示任何緩存無法提供的內存訪問次數。
我承認perf的文檔並不是最好的。
但是,通過閱讀(假設您已經很好地了解CPU和性能監視單元如何工作,這顯然不是計算機體系結構課程), perf_event_open()函數的文檔可以學到很多東西:
例如 ,通過閱讀它,您可以看到perf list顯示的cache-misses
事件對應於PERF_COUNT_HW_CACHE_MISSES
L1-dcache-load-misses
miss是硬件緩存事件,而cache-misses
是硬件事件 (這是硬件緩存事件的超集)。 關於你的差異你可以參考這個答案,原因就是說你的陣列大小增加了100倍甚至10000倍,因為它說“我注意到時間結果有很大的波動,否則長度為1,000,000陣列幾乎適合進入你的L3緩存。“
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.