ここでブログ投稿を読み、同様のことを試みました。例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.1 秒と 4.3 秒でした。誰でも説明を手伝ってもらえますか?ありがとうございました。
更新 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.02 秒と 5.65 秒です。誰でもあなたのマシンでこれをテストできますか?