« Fonctionnement d'un ordinateur/Les mémoires cache » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 284 :
===Les caches non bloquants de type défaut après défaut===
 
Au-dessus, on a vu des caches capables de lire ou d'écrire lors d'un défaut. Ceux-ci sont incapables de mettregérer en attente d'autresplusieurs défauts en attendant que le défaut en cours soit terminésimultanés.Voyons Maismaintenant sur d'autresles caches, oncapable peutde gérer un nombre arbitrairelimité de défautdéfauts de cache avant de bloquer, permettant ainsi aux lectures et écritures qui suivent un deuxième ou troisième défaut de fonctionner. Ceux-ci sont dits de type défaut après défaut (''miss under miss'').
 
Ceci dit, ces caches doivent être adaptés. Pendant qu'uneun lectureaccès ouen une écritureRAM est démarréedémarré par le contrôleur mémoire, il ne peut pas démarrer de nouvelle lecture ou écriture en RAM immédiatement après (sauf dans certains cas exceptionnels). : ilIl y a toujours un temps d'attente entre l'envoi de deux requêtes d'accès mémoire. Dans ces conditions, les autres défauts doivent être mis en attente :tant que la lecture/écriture doit être mémorisée, etRAM n'est démarrée par le contrôleur mémoire une fois que celui-ci estpas libre, qu'il peutpour démarrer une nouvelle requête. Cette mise en attente s’effectue avec des '''''miss status handling registers. Les miss status handling registers''''', que j’appellerais dorénavant MSHR,. Ils sont desaussi registresappelés quides vont'''''miss mettrebuffer''''', ence attentenom lestrahisant défautsle defait cache.que Lela nombremise deen MSHRattente indiqueréalisée combienpar deune blocs depetite mémoire, deplutôt lignesque depar cache,des peuventregistres êtreindépendants. luesLe ennombre mêmede tempsMSHR depuisdonne lale mémoire. Chacunnombre de cesdéfauts registressimultanés stocke au minimum trois informations :maximal.
 
Le contenu des MSHR varie beaucoup suivant le processeur, mais ces derniers stockent au minimum trois informations :
* l'adresse à l'origine du défaut de cache ;
* sa destination : le numéro de la ligne de cache où stocker la donnée du défaut de cache ;
* un bit de validité qui indique si le MSHR est vide ou pas et qui est mis à 0 quand le défaut de cache est résolu.
 
Quand la donnée lue depuis la mémoire est devenue disponible, le MSHR correspondant (celui qui stockait l'adresse à lire) est invalidé : son bit de validité est mis à 0. D'autres informations peuvent être stockées dans un MSHR, mais cela dépend fortement du processeur. Sur les caches directement adressés ou associatifs à n voies, on peut par exemple stocker le numéro de la ligne de cache qui doit mémoriser la donnée chargée depuis la mémoire.
 
JeSupposons vais maintenant décrire le fonctionnement dqu'un cache non bloquant qui utilise des MSHR. Pour commencer, nous allons prendre le cas où l'adresse à lire ou écrire n'a pas subi de défaut de cache récentaie :lieu illors n'yde ala aucunlecture défautou deécriture cached'une enadresse attentebien à cette adresseprécise. Dans ce cas, ille suffitprocesseur deva réservervérifier un MSHR vide pour ce défaut. Maintenant, prenonssi un autre cas : un ou plusieurs défaut de cache sont déjàest en attente dans les MSHR, pour cette même adresse. DétecterIl cetteréagira situationdifféremment suivant si c'est simplele :cas ilou suffitnon. Mais détecter cela demande de comparer l'adresse du défaut avec celles déjà mises en attente dans les MSHR. Pour ce faire, chaque MSHR est relié à un comparateur, et avec quelques circuits, le tout formant une mémoire associative. DansOn cesfait conditionsalors à deux situations, certainssuivant cachesqu'un mettentdéfaut lesoit cachedéjà en pauseattente :à celui-cila nemême peutadresse alorsou plusnon. accepterSi deil nouveaun'y a aucun défaut de cache tanten queattente leà premierl'adresse défautà lire/écrire, il suffit de cacheréserver n'estun pasMSHR résolu.vide Sipour deuxce défautsdéfaut. deDans cachele différentscas veulentcontraire, liretout undépend mêmedu bloccache. deCertains mémoire,caches mettent le cache se met en pause, auce deuxièmequi défautveut dedire cachequ'il :ne ilpeut resteplus enaccepter pausede nouveau défaut de cache tant que le premier défaut de cache n'est pas résolu (le cache reste non-bloquant vu que le blocage a lieu pour des accès successifs à la même adresse seulement). D'autres caches sont plus malins, et peuvent mettre en attente plusieurs défauts de cache qui tombent sur la même adresse.
 
Les MSHR sont une première avancée, qui permet à un processeur de gérer plusieurs défauts de cache, dansassociés à des zoneslignes dude cache différentes. Toutefois, un second accès mémoire à la même ligne de cache va bloquer le cache. On se retrouve alors dans deux cas. Dans le premier cas, les adresses des deux défauts de cache ont des tags différents : les zones de mémoire adressées lors des deux défauts de cache sont séparées dans la mémoire, et ne font pas partie du même bloc. Dans ce cas, le blocage du cache est inévitable. Le premier défaut de cache doit être géréfinir avant que le second puisse démarrer. Dans l'autre cas, les tags sont identiques, mais pas les index et les décalages. Les données sont proches les unes des autres en mémoire, font partie du même bloc, mais ne se recouvrent pas : il s'agit de données placées les unes à côté des autres, quiet seront localisées dans la même ligne de cache. Quand le premier défaut de cache sera résolu, les données du second défaut de cache seront présentes dans le bloc. Dans ces conditions, il est inutile de bloquer le cache : le second défaut de cache peut être fusionné avec le premier.
 
Pour éviter de bloquer le cache dans la seconde situation, certains caches traitent les requêtes avec une granularité plus fine. Leur principe est simple : quand un défaut de cache a lieu et que celui-ci va lire les données chargées par un défaut de cache précédent, les deux défauts sont fusionnés dans le même MSHR. Cette détection de coïncidence de l'adresse s'effectue lors de la vérification des MSHR : le tag contenu dans le MSHR est comparé avec le tag de l'adresse responsable du nouveau défaut de cache. Reste que les différents défauts de cache vont lire des données différentes dans le cache : les index et les décalages des adresses sont différents. Lorsque le défaut sera résolu, et que la donnée sera disponible, il faudra bien configurer le cache avec les index et décalages corrects. Dans ces conditions, il faut bien les mémoriser quelque part. Et les MSHR sont tout indiqués pour cela.