Changes between Version 19 and Version 20 of AS6-TME-B4


Ignore:
Timestamp:
Mar 21, 2022, 8:52:17 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B4

    v19 v20  
    66Vous 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.
    77
    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 le 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).
     8Les 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).
    99
    1010On 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).
     
    3030
    3131
    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.
     321. 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.
    3636* 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.
    3838* < 2% pour le cache des instructions; < 5% pour le cache des données
    3939'''
    4040}}}
    41 1. Qu'est ce que le coût d'un MISS ? De quoi dépend-t-il ? Quelle est sa valeur typique ?
     411. Qu'est-ce que le coût d'un MISS ? De quoi dépend-il ? Quelle est sa valeur typique ?
    4242{{{#!protected
    4343'''
     
    5656{{{#!protected
    5757'''
    58 * parce qu'en fait, certaines instruction durent 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.
    5959'''
    6060}}}
     
    6262{{{#!protected
    6363'''
    64 * CPI = CPI0 + TauxMissIns * CoutMissIns + TauxMissDar * CoutMissIns
     64* CPI = CPI0 + !TauxMissIns * !CoutMissIns + !TauxMissDar * !CoutMissIns
    6565'''
    6666}}}
     
    9090{{{#!protected
    9191'''
    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ûr de 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.
    9494* 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.
    9595'''
     
    9898{{{#!protected
    9999'''
    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ées 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
     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}}}
     1031. Est-ce que le faux partage est un problème grave ?
    104104{{{#!protected
    105105'''
     
    147147'''
    148148* 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 cycles 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.
    150150'''
    151151}}}
     
    193193{{{#!protected
    194194'''
    195 * Puisque que 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.
     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.
    196196'''
    197197}}}
     
    214214* Analyse
    215215  * 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 ram est 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.
    218218  * Ce sont juste des ordres de grandeur.
    219219}}}
     
    256256  * `-NDCACHESET` spécifie le nombre de cases du cache de données.
    257257
    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]]
    259259  1. Le nombre de cycles simulés depuis le démarrage de la machine (incrément de 10),
    260260  1. Le nombre d'instructions exécutées depuis le démarrage de la machine,
     
    275275$ export SOCLIB_TTY=TTY
    276276}}}
    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).
     277Si 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).
    278278* Vous auriez par exemple:
    279279{{{#!bash