繁体   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