Le projet consistait à reconstruire, à l’échelle d’un programme, le cheminement d’un accès mémoire dans un cache processeur. Trois implémentations séparées permettent de comparer LRU, FIFO et Random sur les mêmes traces.
Projet en action ✦
SimulateurCache
Un simulateur de hiérarchie mémoire en C qui transforme des adresses 32 bits en tag, index et offset, puis compare LRU, FIFO et Random sur des traces d’accès.
Le projet, derrière l’écran ✦
Le projet
sans détour.
Le sujet, le fonctionnement, le point difficile et les choix de code : tout ce qu’il faut pour comprendre le projet rapidement.
L’objectif était de rendre observables des mécanismes normalement invisibles : une adresse 32 bits est découpée en offset, index et tag, puis confrontée à l’état courant des lignes du cache pour déterminer un hit, un miss ou une éviction.
Le parcours principal est jouable ici. Le dépôt GitHub garde la version complète du projet et ses fichiers.
Le programme lit des traces composées de lectures de données, écritures de données et références d’instructions. Il calcule dynamiquement le nombre d’ensembles à partir de la taille du cache, de la taille des lignes et de l’associativité, alloue les structures en mémoire, maintient les bits valid et dirty, puis comptabilise séparément hits, misses, accès mémoire, write-back et temps d’exécution. L’option -c active la politique Write Back ; les paramètres -s, -l, -a et -W sont exposés via getopt pour rejouer différentes configurations.
Maintenir un état cohérent de la hiérarchie mémoire tout en recalculant, pour chaque adresse, son ensemble, son tag, son hit ou son miss, sa politique d’éviction et son éventuel write-back.
Le dépôt sépare clairement les trois politiques dans leurs propres répertoires, avec un Makefile et un README par implémentation. Les traces d’entrée et le générateur de traces sont isolés du cœur du simulateur, ce qui permet de reproduire les comparaisons et de faire varier la charge sans modifier l’algorithme.
Démonstration ✦
Voir le projet
prendre vie.
Explorez les fonctionnalités, les interactions et le parcours principal du projet.
Le simulateur lancé depuis un terminal
Prêt à lire la trace mémoire depuis stdin.
Chaque accès est découpé en type, adresse, set et tag. Le simulateur maintient l’état des lignes, distingue lectures de données, écritures et instructions, puis expose hits, misses, évictions, write-back et accès mémoire.
La démo montre le résultat. Le dépôt GitHub contient le code complet et les fichiers du projet.