簡體   English   中英

用perf和papi測量L1數據緩存未命中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM