Changes between Version 7 and Version 8 of AS6-TME-B4


Ignore:
Timestamp:
Mar 19, 2022, 8:37:07 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B4

    v7 v8  
    167167Le but de ce second TP sur les caches est de vérifier expérimentalement l'évolution de la performance du processeur (mesurée en CPI) en fonction de la taille des cache. Vous allez faire varier les capacités des caches L1 d'instructions et données, et vous allez mesurer la durée d'exécution d'une application logicielle un peu plus complexe que la précédente. La largeur des lignes des deux caches est fixée à 16 octets (soit 4 mots). Vous ferez donc varier la capacité des deux caches, en faisant varier le nombre de cases.
    168168
    169 Le code est dans le réperto
    170 
    171 
    172 === Logiciel ===
    173 
    174 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 Fourier'' à 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.
    175 
    176 === Matériel ===
     169Commencez par recopier [attachments:s5.tgz tp5] dans votre répertoire de travail.
     170{{{
     171s5
     172├── Makefile
     173└── src
     174    ├── harch.c
     175    ├── harch.h
     176    ├── hcpu.S
     177    ├── hcpu.h
     178    ├── jpeg.h
     179    ├── kernel.ld
     180    ├── kinit.c
     181    ├── klibc.c
     182    └── klibc.h
     183}}}
     184
     185Ce répertoire s5 contient 1 répertoire, il y a tous les fichiers nécessaires à la génération du code binaire kernel.x, dont un fichier Makefile permettant de le générer automatiquement. Ces fichiers représentent une version minimaliste du système (vu au tp1), il n'y a presque rien, mais le but est d'analyser le comportement des caches, donc moins il y a de code à exécuter avant la fonction que vous allez analyser, mieux c'est.
     186
     187L'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 Fourier'' à 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 `kinit.c`. Il n'est pas indispensable de comprendre en détail l'algorithme IDCT pour faire ce TP.
    177188
    178189Comme vous l'avez constaté au TP précédent, le simulateur `almo1.x` permet de faire varier la capacité des caches L1, grâce à deux arguments à passer sur la ligne de commande :
     
    185196
    186197Le simulateur `almo1.x` 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 :
    187 
    188 {{{
    189 #!bash
     198{{{#!bash
    190199$ export SOCLIB_TTY=FILES
    191200}}}
    192201
    193202Pour revenir à l'affichage dans une fenêtre TTY, taper la commande :
    194 
    195 {{{
    196 #!bash
     203{{{#!bash
    197204$ export SOCLIB_TTY=TTY
    198205}}}
    199 
    200 == 1. Caches de faible capacité ==
    201 
    202 * Vous allez compiler le code et 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. Notez au passage comment changer le comportement des commandes en changeant la valeur des variables du Makefile.
    203 
    204 {{{
    205 #!bash
    206 $ make cachestat NICACHESET=1 NDCACHESET=1
    207 }}}
    208 
    209 * Quel est le CPI (nombre moyen de ''Cycles Par Instruction'') pour ces tailles de cache ?
    210 * Quel est le temps d'exécution de l'application (en nombre de cycles) ?
     206Si vous avez envie de vous challenger, vous pouvez modifier le fichier `Makefile` pour intégrer cette option pour pouvoir par exemple avoir par défaut une utilisation des fenêtre TTY et de manière optionnel, une utilisation des fichiers. Ce n'est pas difficile, mais ça vous oblige à lire le Makefile (il y a une ligne à ajouter et une à modifier, c'est tout). Par exemple:
     207{{{#!bash
     208$ make exec                 → utilise xterms
     209$ make exec TTY=FILES       → utilise les fichiers
     210}}}
     211 
     212
     213== C1. Caches de faible capacité
     214
     215Vous allez compiler le code et lancez le simulateur avec des caches L1 (instructions et données) dont la capacité est d'une seule ligne de cache (une seule case) avec la génération des statistiques. Chaque cache a donc une capacité de 16 octets.
     216
     217POur rappel, les règles `cachetrace` et `cachestats` du Makefile lancent le simulateur en imposant les caractéristiques du cache :
     218* -NICACHELEN : nombre de mots par case dans le cache instruction
     219* -NDCACHELEN : nombre de mots par case dans le cache data
     220* -NICACHESET : nombre de cases dans le cache instruction
     221* -NDCACHESET : nombre de cases dans le cache data
     222La commande `make cachestats NICACHESET=1 NDCACHESET=1` lance de simulateur avec les caches instructions et données de 1 case, et le simulateur génère le fichier `stats.txt`qui contient des informations statistiques. Plus précisément, le simulateur relève à intervalles
     223réguliers (tous les 10 cycles) différents compteurs permettant de caractériser l'activité des caches. Chaque ligne de ce fichier de
     224statistiques contient 8 valeurs :[[BR]]
     2251. Le nombre de cycles simulés depuis le démarrage de la machine (incrément de 10 à chaque ligne),
     2261. Le nombre d'instructions exécutées depuis le démarrage de la machine,
     2271. Le nombre de MISS sur le cache d'instructions depuis le démarrage de la machine,
     2281. Le nombre de lectures de données depuis le démarrage de la machine,
     2291. Le nombre de MISS sur le cache de données depuis le démarrage de la machine,
     2301. Le taux de MISS sur le cache d'instructions,
     2311. Le taux de MISS sur le cache de données,
     2321. Le CPI, qui est le nombre moyen de cycles par instruction.[[BR]][[BR]]
     233
     234* Lancez le simulateur avec des caches d'1 case
     235{{{#!bash
     236make cachestats NICACHESET=1 NDCACHESET=1
     237}}}
     238  * Quel est le CPI (nombre moyen de ''Cycles Par Instruction'') pour ces tailles de cache ?
     239  * Quel est le temps d'exécution de l'application (en nombre de cycles) ?
     240
    211241
    212242* 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 ?
    213 
    214  ''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).''
    215 
    216 == 2. Caches de capacité "normale" ==
     243 * ''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).''
     244
     245== C2. Caches de capacité "normale" ==
    217246
    218247* 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 `NDCACHESET=1024` (cache de 16 kibi octets).
     
    222251* 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 ?
    223252
    224 == 3. Caches désactivés ==
     253== C3. Caches désactivés ==
    225254
    226255* Relancez l'exécution du simulateur en désactivant les deux caches, c'est-à-dire en utilisant les valeurs : `NICACHESET=0` et `NDCACHE =0`.
     
    228257 * Quelle est la valeur du CPI ?
    229258
    230 == 4. Représentation graphique ==
     259== C4. Représentation graphique ==
    231260
    232261* 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 :