0

存在很多计时器,可用于查找执行任务所花费的时间或程序完成其执行所花费的时间。

我想通过访问加载到缓存中的数组元素来查找 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() 有序列化定时器输出的选项,其他定时器是否也有相同的?

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

4

1 回答 1

0

由于您的编译器能够支持 C++11,因此我将使用 std::chrono::high_resolution_clock。对于http://en.cppreference.com/w/cpp/chrono/high_resolution_clock告诉:

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

于 2013-11-19T14:38:02.203 回答