CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Mémoire cache - Wikipédia

Mémoire cache

Un article de Wikipédia, l'encyclopédie libre.

Vous avez de nouveaux messages (diff ?).

La mémoire cache (ou tout type de cache) est une mémoire intermédiaire dans laquelle se trouvent stockées toutes les informations que le processeur central est le plus susceptible de demander.

Elle sert donc à accélérer la communication entre un élément fournisseur (disque dur par exemple) plus lent que l'élément demandeur (processeur par exemple). Comme ces informations sont immédiatement disponibles, le temps de traitement se trouve diminué d'autant, ce qui mécaniquement accroît notablement les performances de l'ordinateur.

Il existe souvent plusieurs niveaux de mémoire cache : une interne au processeur, une autre intégrée sur la carte mère, mais on peut en avoir aussi sur le disque dur.

Mémoire cache est la traduction littérale de l'expression anglaise cache memory, qui vient elle même de mémoire cachée, principe inventé à Grenoble dans les années 1960, l'académie française propose antémémoire. La différence entre mémoire cache et mémoire tampon réside dans le fait que la mémoire cache duplique l'information, tandis que le tampon exprime l'idée d'une salle d'attente, sans impliquer nécessairement une duplication. Le cache buffer (tampon de cache) du disque ou disk cache (cache de disque) est à la fois un tampon où transite l'information et une mémoire cache qui recopie sous forme électronique les données stockées dans le disque sous forme magnétique.


Sommaire

[modifier] Fonctionnement

Le cache contient une copie des données originelles lorsqu'elles sont coûteuses (en terme de temps d'accès) à récupérer ou à calculer par rapport au temps d'accès au cache. Une fois les données stockées dans le cache, l'utilisation future de ces données peut être réalisée en accédant à la copie en cache plutôt qu'en récupérant ou recalculant les données, ce qui abaisse le temps d'accès moyen.

Le processus fonctionne ainsi :

  1. L'élément demandeur (microprocesseur) demande une information ;
  2. Le cache vérifie s'il possède cette information. S'il la possède, il la retransmet à l'élément demandeur; on parle alors de succès de cache. S'il ne la possède pas il la demande à l'élément fournisseur (mémoire principale); on parle alors de défaut de cache ;
  3. L'élément fournisseur traite la demande et renvoie la réponse au cache ;
  4. Le cache la stocke pour utilisation ultérieure et la retransmet à l'élément demandeur.

Si les mémoires cache permettent d'accroître les performances, c'est en partie grâce à deux principes qui ont été découverts suite à des études sur le comportement des programmes informatiques :

  1. Le principe de localité spatiale : qui indique l'accès à une instruction située à une adresse X va probablement être suivi d'un accès à une zone tout proche de X
  2. Le principe de localité temporelle : qui indique que l'accès à une zone mémoire à un instant donné a de fortes chances de se reproduire dans la suite du programme.

[modifier] Divers niveaux de mémoire cache

On trouve une zone de cache :

  • cache de premier niveau (L1) dans les processeurs (cache de données souvent séparé du cache d'instructions) ;
  • cache de second niveau (L2) dans certains processeurs (peut se situer hors de la puce) ;
  • cache de troisième niveau (L3) rarement (sur la carte mère) ;
  • dans les disques durs ;
  • dans les serveurs proxy, dont les squids ;
  • dans les serveurs de pages dynamiques.

[modifier] Mémoire cache des microprocesseurs

Elle est souvent subdivisée en niveaux qui peuvent aller jusqu'à trois. Elle est très rapide, et donc très chère. Il s'agit souvent de SRAM.

Différents niveaux de mémoire d'un microprocesseur
Différents niveaux de mémoire d'un microprocesseur

En programmation, la taille de la mémoire cache revêt un attrait tout particulier, car pour profiter de l'accélération fournie par cette mémoire très rapide, il faut que les parties de programme tiennent le plus possible dans cette mémoire cache. Comme elle varie suivant les processeurs, ce rôle d'optimisation est souvent dédié au compilateur. De ce fait, plus la taille de la mémoire cache est grande, plus la taille des programmes accélérés peut être élevée.

C'est aussi un élément souvent utilisé par les constructeurs pour faire varier les performances d'un produit sans changer d'autres matériels. Par exemple, pour les microprocesseurs, on trouve des séries bridées (avec une taille de mémoire cache volontairement réduite), tels que les Duron chez AMD ou Celeron chez Intel, et des séries haut de gamme avec une grande mémoire cache comme les processeurs Opteron chez AMD, ou Pentium 4EE chez Intel.

Un exemple de boucles très courtes qui tient entièrement dans les caches de données et d'instruction, par exemple le calcul suivant (écrit en langage C) :

      long i; double s;
      s=0.;
      for (i = 1; i<50000000; ++i) s+=1./i;

[modifier] Définitions

Une ligne est le plus petit élément de données qui peut être transféré entre la mémoire cache et la mémoire de niveau supérieur.

Un mot est le plus petit élément de données qui peut être transféré entre le processeur et la mémoire cache.


[modifier] Différents types de défauts de cache (miss)

Il existe trois types de défauts de cache en système uniprocesseur et quatre dans les environnements multiprocesseurs. Il s'agit de:

  • les défauts de cache obligatoires: ils correspondent à la première demande du processeur pour une donnée/instruction spécifique et ne peuvent être évités,
  • les défauts de cache capacitifs: l'ensemble des données nécessaires au programme excèdent la taille du cache, qui ne peut donc pas contenir toutes les données nécessaires,
  • les défauts de cache conflictuels: deux addresses distinctes de la mémoire de niveau supérieur sont enregistrés au même endroit dans le cache et s'évincent mutuellement, créant ainsi des défauts de cache,
  • les défauts de cache de cohérence: ils sont dus à l'invalidation de lignes de la mémoire cache afin de conserver la cohérence entre les différents caches des processeurs d'un système multi-processeurs.

[modifier] Le mapping

La mémoire cache ne pouvant contenir toute la mémoire principale, il faut définir une méthode indiquant à quelle adresse de la mémoire cache doit être écrite une ligne de la mémoire principale. Cette méthode s'appelle le mapping. Il existe trois types de mapping répandus dans les caches aujourd'hui:

  • les mémoire caches complètement associatives (fully associative cache),
  • les mémoires caches N-associatives (N-way set associative cache),
  • les mémoires caches directes (direct mapped cache).

[modifier] Fully associative cache


Chaque ligne de la mémoire de niveau supérieur peut être écrite à n'importe quelle adresse de la mémoire cache. Cette méthode requiert beaucoup de logique car elle donne accès à de nombreuses possibilités. Ceci explique pourquoi l'associativité complète n'est utilisée que dans les mémoires cache de petite taille (typiquement quelques kilo-octets). Cela donne le découpage suivant de l'adresse:

[modifier] Direct mapped cache

Chaque ligne de la mémoire principale ne peut être enregistrée qu'à une seule adresse de la mémoire cache. Ceci crée de nombreux défauts de cache conflictuels si le programme accède à des données qui sont mappées sur les mêmes adresses de la mémoire cache. La sélection de la ligne où la donnée sera enregistrée est habituellement obtenue par: Ligne = Adresse mod Nombre de lignes.

Mapping direct
Mapping direct

Une ligne de cache est partagée par de nombreuses adresses de la mémoire de niveau supérieur. Il nous faut donc un moyen de savoir quelle donnée est actuellement dans le cache. Cette information est donnée par le tag, qui est une information supplémentaire stockée dans le cache. L'index correspond à la ligne où est enregistrée la donnée. En outre, le contrôleur de la mémoire cache doit savoir si une adresse donnée contient une donnée ou non. Un bit additionel (appelé bit de validité) est chargé de cette information.


Prenons l'exemple d'une adresse de 32 bits donnant accès à une mémoire adressable par octet, d'une taille de ligne de 256 bits et d'une mémoire cache de 2s kilo-octets. La mémoire cache contient donc 2s + 13 bits. Sachant qu'une ligne est de 256 bits, nous déduisons qu'il y a 2s + 5 lignes de la mémoire principale par ligne de cache. Par conséquent, l'index est de s+5 bits.

L'addresse de 32 bits permet d'accéder à une mémoire de 232 octets, soit 235 bits. La mémoire cache contenant 256 lignes, la mémoire de niveau supérieur est équivalente à 227 lignes de mémoire cache. L'index étant de s+5 bits, ,il faut distinguer 222 − s éléments de la mémoire principale par ligne de cache. Le tag est donc de 22-s bits.

De plus, une ligne a une taille de 256 bits soit 32 octets. La mémoire étant adressable par octet, cela implique un offset de 5 bits. L'offset est le décalage à l'intérieur d'une ligne pour accéder à un octet particulier. Ces calculs donnent le découpage de l'adresse suivant pour une mémoire cache mappée directement:

Le mapping direct est une stratégie simple mais peu efficace car elle crée de nombreux défauts de cache conflictuels.Une solution est de permettre à une adresse de la mémoire principale d'être enregistrée à un nombre limité d'adresses de la mémoire cache. Cette solution est présentée dans la section suivante.

[modifier] N-way set associative cache

N-way set associative cache
Agrandir
N-way set associative cache

Il s'agit d'un compromis entre le mapping direct et complètement associatif essayant d'allier la simplicité de l'un et l'efficacité de l'autre. La mémoire cache est divisée en ensembles (sets) de N lignes de cache. Un ensemble est représenté sur la figure ci-jointe par l'union des rectangles rouges. Une ligne de la mémoire de niveau supérieur est affectée à un ensemble, elle peut par conséquent être écrite dans n'importe laquelle des voies. Ceci permet d'éviter de nombreux défauts de cache conflictuels. A l'intérieur d'un ensemble, le mapping est complètement associatif (ceci explique le nom de cette technique). En général, la sélection de l'ensemble est effectuée par: Ensemble = Adresse mémoire mod (Nombre d'ensembles).

Reprenons l'exemple de la section précédente (mémoire cache de 2s kilo-octets) mais constitué de 2n voies. Le nombre de voies est en effet toujours une puissance de 2 afin d'obtenir un découpage simple de l'adresse mémoire. La mémoire cache contient donc 2s + 13 − n bits par voie. Sachant qu'une ligne représente 256 bits, il y a donc 2s + 5 − n lignes par ensemble. L'index est donc de s-n+5 bits.

Les mémoires considérées ici sont adressables par octet. Par conséquent, les adresses de 32 bits donnent accès à une mémoire de 235 bits, soit l'équivalent de 227 lignes de mémoire cache. Ainsi, chaque ensemble de la mémoire cache contient 222 − s + n lignes distinctes. Le tag est donc de 22-s+n bits. Le découpage de l'adresse est alors:

Adresse N way

[modifier] Cache unifié ou cache séparés

Pour fonctionner, un processeur a besoin de données et d'instructions. Il existe donc deux solutions pour l'implémentation des mémoires cache:

  • le cache unifié: données et instructions sont enregistrées dans la même mémoire cache,
  • les caches séparés de données et d'instructions.

Séparer données et instructions permet notamment d'augemnter la fréquence de fonctionnement du processeur, qui peut ainsi accéder simultanément à une donnée et une instruction. Cette situation est particulièrement courante pour des Load/Store. Ceci explique que le cache unifié est souvent le maillon faible du système. De plus, dans un cache unifié, une logique supplémentaire donnant la priorité aux données ou aux instructions doit être introduite, ce qui n'est pas le cas pour les caches séparés.

Néanmoins, les caches séparés introduisent des problèmes de cohérence entre les deux caches, notamment pour les codes qui se modifient. De plus, il est également possible qu'une même ligne de mémoire principale contienne des instructions et des données. Ainsi, il y a une copie de cette ligne dans chaque cache, ceci pouvant créer des problèmes de cohérence entre les deux caches (i.e. les deux mémoires n'ont pas les mêmes données, chacun n'ayant qu'une partie (qui peut être nulle) à jour de la ligne). Finalement, l'inconvénient le plus évident des caches séparés est l'utilisation non optimale de l'espace mémoire disponible: l'espace mémoire vide d'un cache n'est pas accessible à l'autre cache, gâchant ainsi quelques kilo-octets.

De nos jours, la solution la plus répandue est la séparation des caches car elle permet entre autres d'appliquer des optimisations spécifiques à chaque cache, les particularités de comportement des instructions et des données étant très différentes.

[modifier] Politique d'écriture dans la mémoire de niveau supérieur

Quand une donnée/instruction se situe dans le cache, le système en possède deux copies: une dans la mémoire de niveau supérieur et une dans la mémoire cache. Deux différentes politiques s'affrontent:

  • write through: la donnée/instruction est écrite à la fois dans le cache et dans la mémoire de niveau supérieur. La valeur de la mémoire principale est constamment cohérente entre le cache et la mémoire de niveau supérieur, simplifiant ainsi de nombreux protocoles de cohérence,
  • write back: l'information n'est écrite dans la mémoire de niveau supérieur que lorsque la ligne disparaît du cache (invalidée par d'autres processeurs, évincée pour écrire une autre ligne...). Cette technique est la plus répandue car elle permet d'éviter de nombreuses écritures mémoires inutiles. Cependant, afin de ne pas écrire des informations qui n'ont pas été modifiées (et ainsi éviter d'encombrer inutilement le bus), chaque ligne de la mémoire cache est pourvue d'un bit dirty. Lorsque la ligne est modifiée dans le cache, ce bit est à l'état haut, signifiant ainsi qu'il faudra réécrire la donnée dans la mémoire de niveau supérieur.

[modifier] Voir aussi


Portail de l'informatique – Accédez aux articles de Wikipédia concernant l’informatique.

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com