Я написал код на C, используя массивы, чтобы понять поведение кэша на моем Intel i7 8750 с L1d = 32k, L2 = 258k, L3: 912k с размером строки 64 байта и установленным размером = 8. Тренд Iсм. мой код Я пытаюсь понять вывод, который я получаю из вывода моего кода.Что еще можно сделать в моем коде, чтобы гарантировать, что я получаю минимальное количество кеш-пропусков, если LRU является политикой замены кеша?
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<time.h>
#define BILLION 1000000000L
struct student
{
char name[64];
};
int main(int argc, char* argv[])
{
int m, i, p;
char* n;
char mn[64];
u_int64_t diff;
struct timespec start, end;
m = strtol(argv[1], &n, 0);
struct student* arr_student = malloc(m * sizeof(struct student));
for(u_int64_t i = 0; i < m; i++ )
{
strcpy(arr_student[i].name, "abc");
}
/* 100 runs to ensure cache warmup and linear access time calculation*/
for (int j = 0; j<100; j++){
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
for(u_int64_t i = 0; i < m; i+=8){
strcpy(mn,arr_student[i].name);
if(i < (m-8)){
strcpy(mn,arr_student[i+1].name);
strcpy(mn,arr_student[i+2].name);
strcpy(mn,arr_student[i+3].name);
strcpy(mn,arr_student[i+4].name);
strcpy(mn,arr_student[i+5].name);
strcpy(mn,arr_student[i+6].name);
strcpy(mn,arr_student[i+7].name);
}
}
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
}
diff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec;
printf("Time take for linear read operation only: %llu nanoseconds\n", (long long unsigned int) diff / 8 );
free(arr_student);
return 0;
}
Я вижу тенденцию, когда при увеличении размера массива время выполнения цикла выполняется по шагамиз 8, занимает все больше и больше времени.Я ожидаю, что он останется постоянным и увеличится только тогда, когда ЦП будет смотреть в L2, т. Е. Когда размер массива станет больше, чем может уместиться L1.Я ожидаю увидеть такой результат: https://www.google.com/search?q=cache+performance+trend+l1+l2&rlz=1C1GCEA_enUS831US831&source=lnms&tbm=isch&sa=X&ved=0ahUKEwi9jqqApYrgAhXYFjQIHR39BtwQ_AUIDygC&biw=1280&bih=913#imgrc=5JVNAazx3drZvM:
Почему я получаю обратную тенденцию, когда делю diff на m?Я не понимаю эту тенденцию.
Пожалуйста, помогите?