有很多计时器可用于查找执行任务所花费的时间,或程序完成执行所需的时间。例如。
我想通过访问加载到缓存中的数组元素来找到设置的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其他定时器也有相同的吗?
我应该使用其他选项来计算时间以获得更好的结果吗?提前致谢。
答案 0 :(得分:0)
由于你的编译器能够使用C ++ 11,我会使用std :: chrono :: high_resolution_clock。 对于http://en.cppreference.com/w/cpp/chrono/high_resolution_clock说:
类std :: chrono :: high_resolution_clock表示实现提供的具有最小滴答周期的时钟。