存在很多计时器,可用于查找执行任务所花费的时间或程序完成其执行所花费的时间。
我想通过访问加载到缓存中的数组元素来查找 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);
我想知道 BEST/SUITABLE Timer 在 C 或 C++ 中是否可用?
我需要防止 i3/i7 中的乱序执行以获得正确的时间测量,因此需要* SERIALIZATION 计时器。* 我应该使用哪个计时器来获得具有序列化输出的正确结果。rdtsc() 有序列化定时器输出的选项,其他定时器是否也有相同的?
我应该使用其他选项来计算时间以获得更好的结果吗?提前致谢。