我編碼了以下玩具基準。緩存命中,缺失和預測 - 對性能的影響
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);
}
基本上,它在不同的步幅中遍歷一個數組。然後我繪製的結果:
(結果被平滑)
當步幅〜128中,CPU可以適合所有的數據在L1高速緩存進行訪問。考慮到訪問的線性,未來的讀取可能是預測的。
我的問題是,爲什麼閱讀的平均時間在那之後繼續上升?我對stride =〜128的推理也適用於比這更大的值。
謝謝!
您是否認爲對打印語句的緩存有重大影響? –
平均時間的不斷增加是否會受到軟頁面錯誤的約束? –