我刚刚在这里阅读了一篇博文并尝试做类似的事情,这是我检查示例 1 和 2 中的内容的代码:
int doSomething(long numLoop,int cacheSize){
long k;
int arr[1000000];
for(k=0;k<numLoop;k++){
int i;
for (i = 0; i < 1000000; i+=cacheSize) arr[i] = arr[i];
}
}
如博文所述,doSomething(1000,2) 和 doSomething(1000,1) 的执行时间应该差不多,但我分别得到了 2.1s 和 4.3s。谁能帮我解释一下?谢谢你。
更新 1:我刚刚将数组的大小增加到了 100 倍
int doSomething(long numLoop,int cacheSize){
long k;
int * buffer;
buffer = (int*) malloc (100000000 * sizeof(int));
for(k=0;k<numLoop;k++){
int i;
for (i = 0; i < 100000000; i+=cacheSize) buffer[i] = buffer[i];
}
}
不幸的是,doSomething(10,2) 和 doSomething(10,1) 的执行时间仍然相差很大:3.02s 和 5.65s。任何人都可以在你的机器上测试这个吗?