最适合的计时器,用于正确测量缓存访问时间

时间:2013-10-23 17:25:11

标签: c++ c linux gcc performance-testing

有很多计时器可用于查找执行任务所花费的时间,或程序完成执行所需的时间。例如。

我想通过访问加载到缓存中的数组元素来找到设置的L2缓存的访问时间。为了通过设置时间计算找到所有L2缓存集的访问时间,我尝试了不同的选项,如 - rdtsc(),gettimeofday(),但没有得到预期的精确结果。

我在linux下使用带有gcc 4.8的intel i7机器。以更准确的方式计算缓存访问时间的最佳计时器是什么。

我的方法如下

for ( j=0; j<100000;j++
{

for ( set_no = 0 ; set_no< 4096; set_no ++)
{ 

start= rdtsc()
{
access all blocks of a set = set_no;
}
end = rdtsc()


time_taken[set_no]+= end -start ;
}
}

for(set_no=0;set_no<4096;set_no++)
printf(" time needed for access set %d = %llu", set_no, time_taken[set_no]/100000);

我想知道在C或C ++中是否有BEST / SUITABLE Timer?

我需要防止i3 / i7中的无序执行才能获得正确的时间测量,所以 * 需要定时器的串行化。 *我应该使用哪个定时器来通过SERIALIZED OUTPUT获得正确的结果。 rdtsc()有OPTION来序列化定时器输出,DOES其他定时器也有相同的吗?

我应该使用其他选项来计算时间以获得更好的结果吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

由于你的编译器能够使用C ++ 11,我会使用std :: chrono :: high_resolution_clock。 对于http://en.cppreference.com/w/cpp/chrono/high_resolution_clock说:

  

类std :: chrono :: high_resolution_clock表示实现提供的具有最小滴答周期的时钟。