所以我在创建一个程序来测量 C 中的缓存大小时遇到了一些麻烦。我理解了这个的基本概念,但我仍然无法弄清楚我到底做错了什么。
基本上,我创建了一个不同长度的数组(按 2s 的幂计算)并访问数组中的每个元素并将其放入一个虚拟变量中。我遍历阵列并执行此操作大约 1000 次,以消除如果我只执行一次以获得准确的时间测量结果会发生的“噪音”。然后,我寻找导致访问时间大幅增加的大小。不幸的是,这就是我遇到问题的地方,我没有看到使用我的代码跳转,显然我做错了什么。
另一件事是我使用 /proc/cpuinfo 来检查缓存,它说大小是 6114,但这不是 2 的幂。有人告诉我用 2 的幂来计算缓存,谁能解释为什么会这样?
这是我的代码......如果需要,我会发布其余的
{
struct timeval start;
struct timeval end;
int n =1 ; // change this to test different sizes
int array_size = 1048576*n; // size of 1MB
int x = 0;
int i =0, j=0;
int *a;
int sum = 0;
a =malloc((array_size)*sizeof(int));
for(j=0; j < array_size; j ++)
{
a[j] = 1; // intialize all elements to 1
}
gettimeofday(&start,NULL);
for(i=0; i<500; i++)
{
for(j=0; j < array_size; j ++)
{
x += a[j];
}
}
gettimeofday(&end,NULL);
sum = x+8192;
int timeTaken = (end.tv_sec * 1000000 + end.tv_usec) - (start.tv_sec *1000000 + start.tv_usec);
printf("Time Taken: %d \n", timeTaken);
printf("Average: %f \n", (double)timeTaken/((double)array_size));
}