Changes between Version 19 and Version 20 of AS6-TME-B4
- Timestamp:
- Mar 21, 2022, 8:52:17 PM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AS6-TME-B4
v19 v20 6 6 Vous pouvez lire les [htdocs:cours/Archi-2-B5-cache-perf-2p.pdf slides de cours] pour voir les détails, mais voici le résumé des principes en quelques lignes. 7 7 8 Les caches L1 ont pour but d'améliorer les performances en réduisant le nombre de cycles nécessaires pour accéder à la mémoire à la fois pour les instruction que pour ledonnées. Le tampon d'écriture, présent dans le cache mais qui n'est pas un cache, permet aussi de réduire la latence des écritures de données (elle est même nulle la plupart du temps).8 Les caches L1 ont pour but d'améliorer les performances en réduisant le nombre de cycles nécessaires pour accéder à la mémoire à la fois pour les instructions que pour les données. Le tampon d'écriture, présent dans le cache mais qui n'est pas un cache, permet aussi de réduire la latence des écritures de données (elle est même nulle la plupart du temps). 9 9 10 10 On cherche à évaluer l'influence des mémoires caches sur les performances du système. Pour évaluer la performance, on utilise comme mesure le nombre moyen de ''Cycles Par Instruction'' (CPI). … … 30 30 31 31 32 1. Que signifie taux de MISS ? De quoi dépend-t-il ? Est-il stable ? Quelle est sa valeur typique ?33 {{{#!protected 34 ''' 35 * Le taux de MISS est le pourcentage d'échec du cache, quand il n'a pas l'information demandépar le processeur.32 1. Que signifie « taux de MISS » ? De quoi dépend-il ? Est-il stable ? Quelle est sa valeur typique ? 33 {{{#!protected 34 ''' 35 * Le taux de MISS est le pourcentage d'échecs du cache, quand il n'a pas l'information demandée par le processeur. 36 36 * Ce taux dépend de la taille du cache, mais aussi du profil d'usage de la mémoire par le programme. 37 * Il n'est pas stable. Le travail du compilateur est de tent éde le réduire en utilisant mieux le cache.37 * Il n'est pas stable. Le travail du compilateur est de tenter de le réduire en utilisant mieux le cache. 38 38 * < 2% pour le cache des instructions; < 5% pour le cache des données 39 39 ''' 40 40 }}} 41 1. Qu'est ce que le coût d'un MISS ? De quoi dépend-t-il ? Quelle est sa valeur typique ?41 1. Qu'est-ce que le coût d'un MISS ? De quoi dépend-il ? Quelle est sa valeur typique ? 42 42 {{{#!protected 43 43 ''' … … 56 56 {{{#!protected 57 57 ''' 58 * parce qu'en fait, certaines instructiondurent deux cycles et qu'il y a des dépendances entre instructions qui ajoutent des délais d'attente.58 * Parce qu'en fait, certaines instructions durent deux cycles et qu'il y a des dépendances entre instructions qui ajoutent des délais d'attente. 59 59 ''' 60 60 }}} … … 62 62 {{{#!protected 63 63 ''' 64 * CPI = CPI0 + TauxMissIns * CoutMissIns + TauxMissDar *CoutMissIns64 * CPI = CPI0 + !TauxMissIns * !CoutMissIns + !TauxMissDar * !CoutMissIns 65 65 ''' 66 66 }}} … … 90 90 {{{#!protected 91 91 ''' 92 * On peut l'éliminer en utilisant des mémoires non caché.93 * On peut demander au cache de flusher les lignes contenant des données partagées avant de les lire afin d'être sûrde lire la version de la mémoire.92 * On peut l'éliminer en utilisant des segments d’adresses non cachées, c’est-à-dire qui n’utilisent pas les caches. 93 * On peut demander au cache de flusher les lignes contenant des données partagées avant de les lire, afin d'être certain de lire la version de la mémoire. 94 94 * On peut utiliser la stratégie directory-based qui délègue que cache L2, la responsabilité de maintenir la cohérence entre toutes les copies qu'il a distribuées. 95 95 ''' … … 98 98 {{{#!protected 99 99 ''' 100 * C'est quand on met deux variables globales dans la même ligne, que ces variables sont utilisées par deux threads s'exécutant sur deux processeurs distincts. La ligne contenant les deux variables peut être copiée sdans les deux caches et la modification d'une variable, fait croire à l'autre cache qu'il y a une perte de cohérence par erreur.101 ''' 102 }}} 103 1. Est-ce que le faux partage est un problème grave 100 * C'est quand on met deux variables globales dans la même ligne, que ces variables sont utilisées par deux threads s'exécutant sur deux processeurs distincts. La ligne contenant les deux variables peut être copiée dans les deux caches et la modification d'une variable, fait croire à l'autre cache qu'il y a une perte de cohérence par erreur. 101 ''' 102 }}} 103 1. Est-ce que le faux partage est un problème grave ? 104 104 {{{#!protected 105 105 ''' … … 147 147 ''' 148 148 * Même avec un système mémoire ''parfait'', le processeur MIPS32 est "gelé" (100-100/1.3) = 23% du temps à cause des dépendances de données ou de contrôle. 149 * Pour comprendre, en 100 cycles, si les instructions dure 1 cycle s alors on exécute 100 instruction, mais là, parce que les instructions durent 1.3 cycles, alors le nombre d'instructions exécutées est 100/1.3 = 77 instructions environ et la différence est 23.149 * Pour comprendre, en 100 cycles, si les instructions dure 1 cycle alors on exécute 100 instructions, mais là, parce que les instructions durent 1.3 cycle, alors le nombre d'instructions exécutées est 100/1.3 = 77 instructions environ et la différence est 23. 150 150 ''' 151 151 }}} … … 193 193 {{{#!protected 194 194 ''' 195 * Puisque quele bus système n'effectue qu'une seule transaction à la fois, le processeur est gelé pendant deux fois 30 cycles lorsque la même instruction fait MISS sur le cache d'instructions et fait également MISS sur le cache de données.195 * Puisque le bus système n'effectue qu'une seule transaction à la fois, le processeur est gelé pendant deux fois 30 cycles lorsque la même instruction fait MISS sur le cache d'instructions et fait également MISS sur le cache de données. 196 196 ''' 197 197 }}} … … 214 214 * Analyse 215 215 * Pour une instruction exécutée, le processeur reste gelé pendant 28 cycles, ce qui signifie que le processeur travaille (28 / 2.74) ≈ 10 fois plus lentement lorsque les caches L1 sont désactivés... 216 * Si en plus le cache L2 est désactivé, l'augmentation du CPI peut être de plusieurs centaines, ici 400 cycles par instruction, ce qui signifie que le processeur fonctionne 400 / 2.74 ≈ 150 fois plus lentement qu'avec le cache L1 activé s.217 * Sachant qu'à la mise sous tension, les PC actuels démarrent généralement avec les caches désactivés, l'exécution est plus lente. C'est évidemment l'une des raisons pour laquelle la phase de démarrage d'une machine est souvent assez longue. Ce n'est pas la seule raison. Le test des composant , comme la ramest assez long, le lecture du disque, etc.216 * Si en plus le cache L2 est désactivé, l'augmentation du CPI peut être de plusieurs centaines, ici 400 cycles par instruction, ce qui signifie que le processeur fonctionne 400 / 2.74 ≈ 150 fois plus lentement qu'avec le cache L1 activé. 217 * Sachant qu'à la mise sous tension, les PC actuels démarrent généralement avec les caches désactivés, l'exécution est plus lente. C'est évidemment l'une des raisons pour laquelle la phase de démarrage d'une machine est souvent assez longue. Ce n'est pas la seule raison. Le test des composants, comme la ram, est assez long, le lecture du disque, etc. 218 218 * Ce sont juste des ordres de grandeur. 219 219 }}} … … 256 256 * `-NDCACHESET` spécifie le nombre de cases du cache de données. 257 257 258 * En outre, en utilisant l'argument `-STATS` pour le simulateur, vous pouvez obtenir les statistiques sur les taux de MISS des caches et le CPI. 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` contenant les informations statistiques listées ci-après. Ces informations sont fabriqué s à partir de compteurs dans la plateforme, relevés tous les 10 cycles qui caractérisent l'activité des caches.[[BR]]Chaque ligne de ce fichier de `stats.txt` contient 8 valeurs :[[BR]][[BR]]258 * En outre, en utilisant l'argument `-STATS` pour le simulateur, vous pouvez obtenir les statistiques sur les taux de MISS des caches et le CPI. 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` contenant les informations statistiques listées ci-après. Ces informations sont fabriquées à partir de compteurs dans la plateforme, relevés tous les 10 cycles qui caractérisent l'activité des caches.[[BR]]Chaque ligne de ce fichier de `stats.txt` contient 8 valeurs :[[BR]][[BR]] 259 259 1. Le nombre de cycles simulés depuis le démarrage de la machine (incrément de 10), 260 260 1. Le nombre d'instructions exécutées depuis le démarrage de la machine, … … 275 275 $ export SOCLIB_TTY=TTY 276 276 }}} 277 Si vous avez envie de vous challenger, vous pouvez modifier le fichier `Makefile` pour intégrer cette option. Vous pourriez avoir par défaut une utilisation des fenêtres TTY et, de manière optionnel , une utilisation des fichiers. Ce n'est pas très difficile, mais ça vous oblige à lire le Makefile (il y a une ligne dans le fichier à ajouter et une à modifier, c'est tout).277 Si vous avez envie de vous challenger, vous pouvez modifier le fichier `Makefile` pour intégrer cette option. Vous pourriez avoir par défaut une utilisation des fenêtres TTY et, de manière optionnelle, une utilisation des fichiers. Ce n'est pas très difficile, mais ça vous oblige à lire le Makefile (il y a une ligne dans le fichier à ajouter et une à modifier, c'est tout). 278 278 * Vous auriez par exemple: 279 279 {{{#!bash