Я хочу изучить влияние размера кеша на код. Для программ, работающих на больших массивах, может произойти значительное ускорение, если массив вписывается в кеш.Влияние размера кэша на код
Как я могу уверить это?
Я попытался запустить эту гр программу:
#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);
}
принимая значения ARRAYSIZE и итерации (хранение продукта, и, следовательно, количество инструкций, постоянное), чтобы проверить, если запустить программу быстрее, если массив вписывается в кеш, но я всегда получаю одинаковое время процессора.
Может ли кто-нибудь сказать, что я делаю неправильно?
Вы проверили, действительно ли это что-то делает? – harold