キャッシュサイズのコードへの影響を調べたいと思います。大規模アレイで動作するプログラムでは、アレイがキャッシュに収まる場合には大幅な高速化が可能です。コードのキャッシュサイズへの影響
どうすればこのことを確認できますか?
私はこのCプログラムを実行しようとした:場合、プログラムが速く実行する場合
確認するために、(製品を保ち、ひいては定数命令の数)ARRAYSIZE及び反復の値をとる#define L1_CACHE_SIZE 32 // Kbytes 8192 integers
#define L2_CACHE_SIZE 256 // Kbytes 65536 integers
#define L3_CACHE_SIZE 4096 // Kbytes
#define ARRAYSIZE 32000
#define ITERATIONS 250
int arr[ARRAYSIZE];
/*************** TIME MEASSUREMENTS ***************/
double microsecs() {
struct timeval t;
if (gettimeofday(&t, NULL) < 0)
return 0.0;
return (t.tv_usec + t.tv_sec * 1000000.0);
}
void init_array() {
int i;
for (i = 0; i < ARRAYSIZE; i++) {
arr[i] = (rand() % 100);
}
}
int operation() {
int i, j;
int sum = 0;
for (j = 0; j < ITERATIONS; j++) {
for (i = 0; i < ARRAYSIZE; i++) {
sum =+ arr[i];
}
}
return sum;
}
void main() {
init_array();
double t1 = microsecs();
int result = operation();
double t2 = microsecs();
double t = t2 - t1;
printf("CPU time %f milliseconds\n", t/1000);
printf("Result: %d\n", result);
}
を配列はキャッシュに収まるが、私はいつも同じCPU時間を得る。
私は間違っていると誰も言うことができますか?
実際に何かしているかどうか確認しましたか? – harold