【发布时间】:2015-02-07 23:53:14
【问题描述】:
我正在尝试通过 C 代码在 L1 I D 缓存为 32 KB 且 L2 缓存为 2MB 的平台上确定 L1 缓存行大小。
#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>
#include<time.h>
#define SIZE 100
long long wall_clock_time();
int main()
{
int *arr=calloc(SIZE,sizeof(int));
register int r,i;
long long before,after;
double time_elapsed;
for(i=0;i<SIZE;i++)
{
before=wall_clock_time();
r=arr[i];
after=wall_clock_time();
time_elapsed=((float)(after - before))/1000000000;
printf("Element Index = %d, Time Taken = %1.4fn",i,time_elapsed);
}
free(arr);
return 0;
}
long long wall_clock_time() {
#ifdef __linux__
struct timespec tp;
clock_gettime(CLOCK_REALTIME, &tp);
return (long long)(tp.tv_nsec + (long long)tp.tv_sec * 1000000000ll);
#else
struct timeval tv;
gettimeofday(&tv, NULL);
return (long long)(tv.tv_usec * 1000 + (long long)tv.tv_sec * 1000000000ll);
#endif
}
上面是一个小代码 sn-p,我用它来访问数组的元素并尝试确定缓存行边界处访问延迟的跳跃。但是,当我执行代码时,我得到的所有计时输出都是 0.000。我已经阅读了有关此主题的 stackoverflow 上的几个线程,但不太了解,因此尝试编写此代码。 谁能向我解释一下概念上或句法上是否有错误?
【问题讨论】: