Ich möchte den Effekt der Cache-Größe auf Code untersuchen. Bei Programmen, die mit großen Arrays arbeiten, kann es zu einer erheblichen Beschleunigung kommen, wenn das Array in den Cache passt.Auswirkung der Cache-Größe auf Code
Wie kann ich das messen?
ich versuchte, dieses c-Programm auszuführen:
#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);
}
Werte von ARRAYSIZE und ITERATIONS (wobei das Produkt und damit die Anzahl von Befehlen, konstant), um, wenn das Programm schneller laufen, wenn das zu überprüfen, nehmen Array passt in den Cache, aber ich bekomme immer die gleiche CPU-Zeit.
Kann jemand sagen, was ich falsch mache?
Haben Sie überprüft, ob es tatsächlich etwas bewirkt? – harold