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

Aller à la navigation Aller à la recherche
m
===Les caches associatifs par voie===
 
Les caches précédentsassociatifs ontpar chacunvoie leur défaut :sont un tauxcompromis deentre succèsles médiocrecaches pourdirectement les premiers,adressés et un temps d'accès trop long pour les autres. Certains caches implémentent une sorte de compromis destiné à trouver un juste milieu : ce sont les cachestotalement associatifs par voie. Pour simplifier, ces caches sont composés de plusieurs caches directement adressés, qui sont accessibles en parallèle, chaque cache étant appelé une voie. Les caches associatifs par voie ont donc un taux de succès et un temps d'accès intermédiaire.
 
[[File:Cache associatif par voie.png|centre|vignette|upright=2|Cache associatif par voie.]]
[[File:Implémentation d'un cache associatif par voie.png|centre|vignette|upright=2|Implémentation d'un cache associatif par voie.]]
 
====Les caches ''skew associative''====
Vous aurez remarqué que dans une voie, les lignes sont accédées en adressage direct : les défauts par conflit sont possibles sur un cache associatif par voie. Pour éviter cela, certains chercheurs ont créé des caches skew associative (ou associatifs à biais). Pour faire simple, les index des lignes de cache subissent un petit traitement avant d'être utilisés. Le traitement en question est différent suivant la voie de destination, histoire que deux adresses mémoires avec des index identiques donnent des index différents après traitement. Le traitement en question est souvent une permutation des bits de l'index, qui est différente suivant la voie prise, ou un simple XOR avec un nombre qui dépend de la voie.
 
Vous aurez remarqué que dans une voie, les lignes sont accédées en adressage direct : les défauts par conflit sont possibles sur un cache associatif par voie. Pour éviter cela, certains chercheurs ont créé des caches ''skew associative'' (ou associatifs à biais). Pour faire simple, les index des lignes de cache subissent un petit traitement avant d'être utilisés. Le traitement en question est différent suivant la voie de destination, histoire que deux adresses mémoires avec des index identiques donnent des index différents après traitement. Le traitement en question est souvent une permutation des bits de l'index, qui est différente suivant la voie prise, ou un simple XOR avec un nombre qui dépend de la voie.
 
[[File:Implémentation d'un cache skew associative.jpg|centre|vignette|upright=2|Implémentation d'un cache skew associative.]]
 
====La prédiction de voie====
Les caches associatifs par voie sont donc une sorte de compromis entre caches directement adressés et caches totalement associatifs, avec un taux de succès et un temps d'accès intermédiaire. Pour réduire ce temps d'accès, certains chercheurs ont inventé la '''prédiction de voie''', qui consiste à faire des paris sur la prochaine voie accédée. Au lieu d'attendre que les comparaisons de tags donnent leur résultat, le processeur sélectionne automatiquement une voie et configure les multiplexeurs à l'avance. Si le processeur ne se trompe pas, le processeur va accéder à la donnée de façon précoce, et commencer à l'utiliser un à deux cycles plus tôt que prévu. S'il se trompe, le processeur devra annuler la lecture effectuée en avance, et recommencer en allant chercher la donnée dans le bon ensemble. Cette technique peut être adaptée de façon à diminuer la consommation énergétique du processeur. Pour cela, il suffit de mettre en veille tous les caches directement adressés sur lesquels le processeur n'a pas parié. C'est plus efficace que d'aller lire plusieurs données dans des mémoires différentes, et n'en garder qu'une.
 
LesPour cachesréduire associatifs par voie sont donc une sorte de compromis entre caches directement adressés et caches totalement associatifs, avec un taux de succès et unle temps d'accès intermédiaire.de Pources réduire ce temps d'accèscaches, certains chercheurs ont inventé la '''prédiction de voie''', qui consiste à faire des paris sur la prochaine voie accédée. Au lieu d'attendre que les comparaisons de tags donnent leur résultat, le processeur sélectionne automatiquement une voie et configure les multiplexeurs à l'avance. Si le processeur ne se trompe pas, le processeur va accéderaccède à la donnée de façon précoce, et commencer à l'utiliser un à deux cycles plus tôt que prévu. S'il se trompe, le processeur devra annulerannule la lecture effectuée en avance, et recommencerrecommence en allant chercher la donnée dans lela bonbonne ensemblevoie. Cette technique peut être adaptée de façon à diminuer la consommation énergétique du processeur. Pour cela, il suffitpermet de mettre en veille tous les caches directement adressésvoies sur lesquels le processeur n'a pas parié, ce qui permet de diminuer la consommation énergétique du processeur. C'est plus efficace que d'aller lire plusieurs données dans des mémoiresvoies différentes, et de n'en garder qu'une.
 
En vertu du principe de localité, on peut décemment penser que si on a accédé à une voie, les accès futurs auront lieu dans celle-ci. Il suffit de retenir la voie la plus récemment accédée dans un registre, qui sera utilisée comme prédiction. Pour vérifier que la prédiction est correcte, il suffit de comparer le registre au résultat obtenu après vérification des tags. Cependant, on peut complexifier l'implémentation pour prendre en compte un paramètre assez important : on peut discriminer la voie à choisir en tenant compte de paramètres comme l'adresse à lire/écrire, ou l'instruction à l'origine de l'accès mémoire. En effet, des instructions différentes ont tendance à aller chercher leurs données dans des ensembles différents, et la voie à choisir n'est pas la même. Pour cela, il suffit d'utiliser un cache pour stocker les voies à mémoriser : une par instruction. On peut aussi utiliser le même mécanisme pour faire la différence non pas suivant l'instruction à l'origine de l'accès au cache, mais en fonction de l'adresse à lire, ou des numéros de registre, voire des données utilisées pour calculer l'adresse.
40 541

modifications

Menu de navigation