【发布时间】:2013-12-23 03:05:04
【问题描述】:
我编写了以下玩具基准。
int N = 1024*4096;
unsigned char *ary = malloc(N);
ary[0] = 1;
int stride, i;
double start, end;
int sum;
for(stride = 1; stride < N; ++stride) {
start = getCPUTime();
sum = 0;
for(i = 0; i < N; i+=stride) {
sum += ary[i];
}
end = getCPUTime();
printf("stride %d time %f sum %d\n", stride, (end - start)/(N/stride), sum);
}
基本上,它以不同的步长遍历数组。然后我绘制了结果:
(结果被平滑)
当 stride 为 ~128 时,CPU 可以容纳 L1 Cache 中要访问的所有数据。鉴于访问的线性,未来的读取可能是可以预测的。
我的问题是,为什么平均阅读时间在那之后不断上升?我对 stride=~128 的推理也适用于大于该值的值。
谢谢!
【问题讨论】:
-
您是否考虑过对打印语句缓存的巨大影响?
-
平均时间的不断增加是否与软页面错误有关?
标签: c caching cpu microbenchmark