所以我测量了访问ARM Cortex-A15的L2缓存的周期。 我通过分配一个字节和
来做到这一点我获得了大约240个缓存访问周期和~350个非缓存访问周期。 我还使用了ISB,DMB和DSB。这些数字听起来对您来说准确吗?我似乎无法找到与之相比的官方资源。也许你可以指出我正确的方向。
答案 0 :(得分:3)
您没有使用您的方法测量延迟,而是测量开销。
衡量延迟的标准方法是使用指针追逐测试,初始化指针链以便获得相关访问,并控制它们的位置,使它们适合(或不适合)指定大小的缓存。除了你没有使任何东西无效之外,其余的程序是相同的。
像这样的东西(为了说明,未经测试)
// 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();
答案 1 :(得分:2)
由于测量开销和随机干扰,测量单个访问会受到不准确的影响。您应该在大量访问中测量时间,以获得能够更好地反映您所需内容的摊销延迟。要测量平均访问时间,还需要确保这些访问不是并行运行(这将测量吞吐量,而不是延迟),因此添加一些错误依赖性,例如将先前访问的字节的内容添加到下一个地址(之后)将所有这些字节初始化为零。)
另外,你没有说你是如何使地址无效的,但我猜你也把它扔出了L2,实际上只测量了内存延迟。