= ALMO TP n°6 - Mémoires Cache : mesures de performance = == Préambule == Le but de ce TP est de vérifier expérimentalement les résultats calculés dans le [wiki:SujetTD5 TD associé], en utilisant le simulateur `simul_almo_generic`. On va faire varier les capacités des caches L1 d'instructions et données, et on va mesurer la durée d'exécution d'une application logicielle un peu plus complexe que les précédentes. La largeur des lignes des deux caches est fixée à 16 octets (soit 4 mots). On fera donc varier la capacité des deux caches, en faisant varier le nombre de cases. Comme d'habitude, vous devez recopier dans votre répertoire de travail, les fichiers sources spécifiques à ce TP : {{{ $ cp -r /Infos/lmd/2019/licence/ue/LU3IN004-2019oct/sesi-almo/soft/tp06/sujet \ ./tp06 $ cd tp06 }}} === Logiciel === L'application logicielle proposée pour ce TP effectue un calcul de traitement d'image appelé ''transformation cosinus inverse'' (IDCT). Cette transformation est une variante de la ''transformée de Fourrier'' à deux dimensions. L'application traite une image en découpant cette image en blocs de (8 * 8) pixels. Elle est écrite en langage C, et vous pouvez trouver son contenu dans le fichier `main.c`. Il n'est pas indispensable de comprendre en détail l'algorithme IDCT pour faire ce TP. === Matériel === Comme vous l'avez constaté au TP précédent, le simulateur `simul_almo_generic` permet de faire varier la capacité des caches L1, grâce à deux arguments à passer sur la ligne de commande : * `-NICACHE`, qui spécifie le nombre de cases du cache d'instructions, * `-NDCACHE`, qui spécifie le nombre de cases du cache de données. ''Attention : les valeurs que l'on peut donner pour ces deux arguments doivent être des puissances de 2.'' En utilisant l'argument `-STATS` sur la ligne de commande, vous pouvez obtenir les statistiques sur les taux de MISS et le CPI. Le simulateur `simul_almo_generic` permet de rediriger la sortie texte vers un fichier plutôt que de l'afficher sur le terminal TTY, comme habituellement). Pour cela, avant de lancer la simulation, il faut entrer la commande : {{{ $ export SOCLIB_TTY=FILES }}} Pour revenir à l'affichage dans une fenêtre TTY, taper la commande : {{{ $ export SOCLIB_TTY=TTY }}} == 1. Caches de faible capacité == * Commencez par compiler le système logiciel à l'aide du `Makefile` fourni, puis lancez le simulateur avec des caches L1 (instructions et données) dont la capacité est d'une seule ligne de cache (une seule case), en activant la génération des statistiques. Chaque cache a donc une capacité de 16 octets. {{{ $ simul_almo_generic -SYS sys.bin -APP app.bin -NICACHE 1 -NDCACHE 1 -STATS stats }}} * Quel est le CPI (nombre moyen de ''Cycles Par Instruction'') pour ces tailles de cache ? * Quel est le temps d'exécution de l'application (en nombre de cycles) ? * Relancez la simulation en doublant la capacité des caches à 32 octets (2 cases). Que constatez vous concernant le temps d'exécution et le CPI ? ''Attention : pour ne pas biaiser la mesure, il faut relever la valeur du CPI dans le fichier `stats` à la date où l'application se termine (ni avant, ni après).'' == 2. Caches de capacité "normale" == * Faites varier la taille du cache d'instructions de 4 à 1024 cases par puissance de 2, et notez à chaque fois le CPI et le temps de calcul obtenus. Vous utiliserez comme taille de cache de données `NDCACHE = 1024` (cache de 16 kibi octets). * Faites varier la taille du cache de données de 1 à 1024 cases par puissance de 2, et notez à chaque fois le CPI et le temps de calcul obtenus. Vous utiliserez comme taille de cache d'instructions `NICACHE = 1024` (cache de 16 kibi octets). * Pour cette application logicielle, quelles tailles de caches pensez-vous qu'il faille choisir pour obtenir (approximativement) les taux de MISS correspondant aux hypothèses vues en TD ? == 3. Caches désactivés == * Relancez l'exécution du simulateur en désactivant les deux caches, c'est-à-dire en utilisant les valeurs : `NICACHE = NDCACHE = 0`. * Quelle est la durée d'exécution du programme ? * Quelle est la valeur du CPI ? == 4. Représentation graphique == * En reprenant vos résultats de l'exercice 2, créez un fichier texte dans lequel vous mettrez à chaque ligne le nombre de lignes du cache d'instructions et la valeur du CPI que vous avez obtenue pour ce nombre. Le format d'une ligne de ce fichier doit être le suivant : {{{ ... NB_LIGNES_ICACHE CPI NB_LIGNES_ICACHE CPI NB_LIGNES_ICACHE CPI ... }}} * Utilisez l'outil `gnuplot` pour visualiser la courbe représentant l'évolution du CPI en fonction de la taille du cache d'instructions. * Refaites la même opération pour le cache de données, afin de générer la courbe représentant l'évolution du CPI en fonction de la taille du cache de données. {{{#!comment vim:filetype=tracwiki:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:spell:spelllang=fr }}}