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

Contenu supprimé Contenu ajouté
Ligne 1 :
Le cache est une mémoire intercalée entre la mémoire et un processeur ou un périphérique, qui est souvent fabriquée avec de la mémoire SRAM, parfois avec de l'eDRAM. Sans lui, on se croirait à l'âge de pierre tellement nos PC seraient lents ! En effet, la mémoire est lente comparée au processeur. Or, le temps mis pour accéder à la mémoire est du temps durant lequel le processeur n’exécute pas d'instruction (sauf cas particuliers impliquant un pipeline). Il a fallu trouver une solution pour diminuer ce temps d'attente, et on a décidé d'intercaler une mémoire entre le processeur et la mémoire. Comme cela, le processeur accède directement à une mémoire cache très rapide plutôt que d'accéder à une mémoire RAM qui répondra de toute façon trop tard.
 
==L'accèsLes aulignes de cache et leurs tags==
 
Le cache est divisé en groupes de plusieurs bytes (de 64 à 256 octets chacun), qui portent le nom de '''lignes de cache'''. Sur les caches actuels, on transfère les données entre le cache et la RAM ligne de cache par ligne de cache. Mais d'autres caches plus anciens permettaient de faire des transferts plus fins. C’est-à-dire qu'on pouvait mettre à jour quelques octets dans une ligne de cache sans avoir à la recopier intégralement depuis ou dans la mémoire.
 
Tout accès mémoire est intercepté par le cache, qui vérifie si la donnée demandée est présente ou non dans le cache. Si la donnée voulue est présente dans le cache, on a un '''succès de cache''' (''cache hit'') et on accède à la donnée depuis le cache. Sinon, c'est un '''défaut de cache''' (''cache miss'') et on est obligé d’accéder à la RAM. Le nombre de succès de cache par nombre d'accès mémoire , appelé le '''taux de succès''' (''hit ratio''), est déterminant pour les performances : plus il est élevé, plus le cache est efficace.
 
Les défauts de cache peuvent avoir des origines diverses. Lorsqu'on exécute une instruction ou qu'on accède à une donnée pour la première fois, il se produit un '''défaut à froid''' (''cold miss''). La raison est que l'instruction ou la donnée n'a pas encore été chargée dans le cache, ce qui rend le défaut de cache inévitable. Autre situation : le cache est trop petit pour les besoins et le cache fait alors le ménage, en retirant des données du cache. Toute tentative ultérieure aux données qui ont quitté le cache tombera en RAM, donnant un '''défaut de volume de cache''' (''capacity cache miss''). Les seules solutions pour éviter cela consistent à augmenter la taille du cache, faire en sorte que le programme prenne moins de mémoire cache, et améliorer la localité du programme exécuté.
 
===L'alignement des lignes de cache===
Ligne 40 ⟶ 36 :
 
[[File:Cache à secteurs.png|centre|vignette|upright=2|Cache à secteurs.]]
 
==L'accès au cache==
 
La mémoire cache est invisible pour le programmeur, qui ne peut pas déceler celles-ci dans l'assembleur. Les accès mémoire se font de la même manière avec ou sans le cache. La raison à cela est que le cache intercepte les accès mémoire et y répond s'il en a la capacité. Par exemple, si le cache intercepte une lecture à une adresse et que le contenu de cette adresse est dans le cache, le cache va bypasser la mémoire RAM et la donnée sera envoyée par le cache au lieu d'être lue en RAM. par contre, si un accès se fait à une adresse pour laquelle le cache n'a pas la donnée, alors l'accès mémoire sera effectué par la RAM de la même manière que si le cache n'était pas là.
 
===Les succès et défauts de caches===
 
Tout accès mémoire est intercepté par le cache, qui vérifie si la donnée demandée est présente ou non dans le cache. Si la donnée voulue est présente dans le cache, on a un '''succès de cache''' (''cache hit'') et on accède à la donnée depuis le cache. Sinon, c'est un '''défaut de cache''' (''cache miss'') et on est obligé d’accéder à la RAM. Le nombre de succès de cache par nombre d'accès mémoire , appelé le '''taux de succès''' (''hit ratio''), est déterminant pour les performances : plus il est élevé, plus le cache est efficace.
 
Les défauts de cache peuvent avoir des origines diverses. Lorsqu'on exécute une instruction ou qu'on accède à une donnée pour la première fois, il se produit un '''défaut à froid''' (''cold miss''). La raison est que l'instruction ou la donnée n'a pas encore été chargée dans le cache, ce qui rend le défaut de cache inévitable. Autre situation : le cache est trop petit pour les besoins et le cache fait alors le ménage, en retirant des données du cache. Toute tentative ultérieure aux données qui ont quitté le cache tombera en RAM, donnant un '''défaut de volume de cache''' (''capacity cache miss''). Les seules solutions pour éviter cela consistent à augmenter la taille du cache, faire en sorte que le programme prenne moins de mémoire cache, et améliorer la localité du programme exécuté.
 
===L'adressage physique ou logique des caches===