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 === |
| 169 | Commencez par recopier [attachments:s5.tgz tp5] dans votre répertoire de travail. |
| 170 | {{{ |
| 171 | s5 |
| 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 | |
| 185 | Ce 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 | |
| 187 | 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 `kinit.c`. Il n'est pas indispensable de comprendre en détail l'algorithme IDCT pour faire ce TP. |
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) ? |
| 206 | Si 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 | |
| 215 | 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) avec la génération des statistiques. Chaque cache a donc une capacité de 16 octets. |
| 216 | |
| 217 | POur 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 |
| 222 | La 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 |
| 223 | réguliers (tous les 10 cycles) différents compteurs permettant de caractériser l'activité des caches. Chaque ligne de ce fichier de |
| 224 | statistiques contient 8 valeurs :[[BR]] |
| 225 | 1. Le nombre de cycles simulés depuis le démarrage de la machine (incrément de 10 à chaque ligne), |
| 226 | 1. Le nombre d'instructions exécutées depuis le démarrage de la machine, |
| 227 | 1. Le nombre de MISS sur le cache d'instructions depuis le démarrage de la machine, |
| 228 | 1. Le nombre de lectures de données depuis le démarrage de la machine, |
| 229 | 1. Le nombre de MISS sur le cache de données depuis le démarrage de la machine, |
| 230 | 1. Le taux de MISS sur le cache d'instructions, |
| 231 | 1. Le taux de MISS sur le cache de données, |
| 232 | 1. 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 |
| 236 | make 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 | |