簡體   English   中英

測量ARM Cortex-A15的緩存訪問時間/周期

[英]Measure cache access time/cycles for the ARM Cortex-A15

因此,我測量了訪問ARM Cortex-A15的L2緩存的周期。 我通過分配一個字節來做到這一點,

  • 使地址無效
  • 讀取PMCCNTR寄存器
  • 使用ldr訪問分配的字節的內存位置
  • 再次讀取PMCCNTR寄存器
  • 從第二減去第一測量

我大約有240個周期用於緩存訪問,而大約350個周期用於未緩存訪問。 我還使用了ISB,DMB和DSB。 這些數字聽起來對您准確嗎? 我似乎找不到要比較的官方資源。 也許您可以指出正確的方向。

您不是在使用方法來衡量延遲,而是在衡量開銷。

測量延遲的一種標准方法是使用指針追逐測試,初始化一個指針鏈,以便獲得從屬訪問,並控制它們的放置,以使它們適合(或不適合)指定大小的緩存。 其余過程相同,除了您不使任何內容無效。

這樣的東西(用於說明,未經測試)

// prepare a chain of N pointers in a buffer
// Assume unsigned int has the same size as a pointer
unsigned int Buffer[N] ;

// chain them, here in a simple direct fashion.  
// You can also use a randomized sequence if you work in main memory
for (i=1; i<N; i++) { Buffer[i] = (unsigned int) &(Buffer[i-1]) ; }

// close the chain
Buffer[0] = (unsigned int) &(Buffer[N-1]) ;

// measure M accesses
Start =  PMCCNTR() ;
p = &(Buffer[0]) ;
for (i=M; i>0; i--) {
  p = *p;
}
Stop = PMCCNTR();

由於測量開銷和隨機干擾,因此測量單次訪問存在不准確性。 您應該測量大量訪問的時間,以獲取攤銷的延遲,從而更好地反映您的需求。 要測量平均訪問時間,您還需要確保這些訪問未並行運行(這將衡量吞吐量,而不是延遲),因此添加一些錯誤的依賴項,例如將先前訪問的字節的內容添加到下一個地址(之后將所有這些字節初始化為零)。

另外,您沒有說如何使地址無效,但我想您也將其從L2中刪除了,實際上只是在測量內存延遲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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