Comme un devoir scolaire, j'ai besoin de trouver un moyen d'obtenir la L1 cache de données de la ligne de taille, sans la lecture des fichiers de configuration ou de l'utilisation d'appels d'api. Censé utiliser les accès à la mémoire en lecture/écriture des horaires à analyser et obtenir cette info. Alors, comment pourrais-je le faire?
Incomplet, essayez pour une autre partie de la mission pour trouver les niveaux et taille de la mémoire cache, j'ai:
for (i = 0; i < steps; i++) {
arr[(i * 4) & lengthMod]++;
}
Je pensais peut-être que j'ai juste besoin de varier la ligne 2, (i * 4)
de la partie? Donc, une fois que je dépasse la taille de ligne de cache, j'ai peut-être besoin de les remplacer, ce qui prend parfois? Mais est-ce si simple? Le bloc peut-être déjà en mémoire quelque part? Ou perpahs je peut toujours compter sur le fait que si j'ai un assez grand steps
, il faudra encore travailler très précisément?
Mise à JOUR
Heres une tentative sur GitHub ... partie principale ci-dessous
// repeatedly access/modify data, varying the STRIDE
for (int s = 4; s <= MAX_STRIDE/sizeof(int); s*=2) {
start = wall_clock_time();
for (unsigned int k = 0; k < REPS; k++) {
data[(k * s) & lengthMod]++;
}
end = wall_clock_time();
timeTaken = ((float)(end - start))/1000000000;
printf("%d, %1.2f \n", s * sizeof(int), timeTaken);
}
Le problème est là ne semblent être beaucoup de différences entre le calendrier. FYI. depuis sa pour le cache L1. J'ai SIZE = 32 K (la taille de la table)