Architecture des Ordinateurs La mémoire : organisation; adressage; performances et astuces : les caches
Organisation Soit une mémoire d'une capacité C donnée en octets ou ko. Plusieurs manières de l'organiser; piqûre de rappel : avec N : taille du bus d'adresse M : taille du bus de données (en bits) 8 : coefficient entre bits et octets
Organisation 1 valeur de C plusieurs couples (M,N) exemple : C = 256 Mo 25 Meilleure répartition ?
Performance de débit mise en avant : Organisation Plusieurs critères : nombre de pistes : nombre minimal pour N maximal performance de débit : rapatrier plus de données en un échange traitement des octets : taille utilisée par beaucoup d'applications : ne correspond pas au bus ni à la cellule mémoire Performance de débit mise en avant : augmenter : taille de cellule mémoire, taille de bus de données et le bus d'adresse ?
Traitement des octets Transferts de données de 32 ou 64 bits (voire plus). Comment traiter un octet (mot de 16 bits)? Utilité de traiter un octet ? Typage de langages (char en C) fichiers texte : suite d'octets comment ranger un octet dans un mot mémoire ? 2 possibilités : petit-boutisme (little endian) gros-boutisme(big-endian)
Petit boutisme et gros boutisme Numéroter les octets à l'intérieur d'un mot mémoire numéroter les bits à l'intérieur d'un octet !!!! Ex : mot mémoire de 32 bits= 4 octets Gros boutisme : Petit boutisme : 32 bits 1 2 3 32 bits 3 2 1
Gros boutisme 32 bits Adresse 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 1 2 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Petit boutisme 32 bits Adresse 3 2 1 7 6 5 4 11 10 9 8 15 14 13 12 1 2 1 2 3 7 6 5 4 11 10 9 8 15 14 13 12
Exemples de stockage de données À partir du langage C type : long int : 4 octets = 1 mot mémoire. Valeur à stocker = 7. Sur 4 octets : (on indique le contenu) 00 00 00 07 Stockage direct dans un mot mémoire : pas de problème de petit ou gros boutisme.
Exemples de stockage de données À partir du langage C type : char : 1 octet. Valeur à stocker = 18. Sur 1 octets : (on indique le contenu) 18 Stockage dans un octet : problème de petit ou gros boutisme ! Ne sera pas stocké au même endroit du mot mémoire
Exemples de stockage de données À partir du langage C type : char : 1 octet. Valeur à stocker = 18. 18 Gros boutisme Petit boutisme 18 ?? ?? ?? ?? ?? ?? 18 Idem pour chaîne de caractères, suite d'octets.
Exemples de stockage de données À partir du langage C type : char []. Valeurs à stocker = 'B' 'o' 'n' 'j' 'o' 'u' 'r' Gros boutisme Petit boutisme 'B' 'o' 'n' 'j' 'j' 'n' 'o' 'B' 'o' 'u' 'r' ?? ?? 'r' 'u' 'o' Rangement dans l'ordre des numéros d'octets
Exemples de stockage de données Types de taille intermédiaire (exemple, short int occupant 16 bits). Gros boutisme Petit boutisme 1ère donnée 16 bits 2ème donnée 16 bits 2ème donnée 16 bits 1ère donnée 16 bits
Exemples de stockage de données À partir du langage C type : complexe, contenant des données de types différents (char et long int par exemple). Stockage cohérent dans une machine, mais problème de transmission ! Transmettre des octets : problème d'ordre pour les données occupant plus d'un octet en mémoire Transmettre des mots mémoire : les machines ont-elles des tailles de cellule mémoire équivalent ? Problème d'ordre pour les octets ! Chaque machine doit connaître le type de représentation de l'autre !
Alignement Transfert de données de différentes tailles possibles (compatibilité C et autres langages)
Culture générale RAM : Random Access Memory, a accès aléatoire (non séquentiel) SRAM : Static RAM DRAM : Dynamic RAM FPM RAM : Fast Page Mode : lecture en mode bloc EDO RAM (Extended Data Out) : moins de rafraîchissements BEDO RAM : Burst ou Block EDO SDRAM : Synchronous DRAM : entrelacée DDR SDRAM: Dual Data Rate SDRAM QDR SDRAM : Quad Data Rate SDRAM http://www.webreference.com/graphics/column14/index.html
Hiérarchie de la mémoire Différents types de mémoire : performances différentes caractéristiques différentes mais constat général : Plus une mémoire est rapide; plus elle est chère ! Plus une mémoire est volumineuse, plus elle est lente, donc plus elle est économique (prix au ko)
Bande magnétique (DAT,DLT) Pyramide de la mémoire économique qqs octets rapide registres volatile 512 Mo RAM 80 Go Disques durs Persistante 10 Go CD / DVD Bande magnétique (DAT,DLT) 300 Go 100 To Systèmes complets d'archivage (robots)
RAM / CPU RAM rapide, mais pas assez pour le processeur ! Ex : processeur à 2 GHz : peut traiter une donnée tous les : 0,5 ns ! Mémoire répond en quelques nanosecondes, le plus souvent 20 ns : facteur 40 ! Comment accélérer le traitement ? Utiliser les registres le plus possible ? Oui, en assembleur, mais aucune maîtrise sinon (compilateur). Utiliser une mémoire plus rapide ? Plus cher, mais pourquoi ? Rapidité proximité proximité intégration !
RAM / CPU A propos de proximité : en 0,5 ns, quelle distance l peut être parcourue par un signal ? Au plus rapide : vitesse de la lumière c = 3.108 m.s-1 t = 0,5 ns = 5.10-10 s l = c. t = 0,15 m idéal : intégrer la RAM au support de processeur trop cher car soucis d'intégration ! Compromis : mémoire moyennement rapide et moyennement proche du CPU : mémoire cache.
Bande magnétique (DAT,DLT) Pyramide de la mémoire économique qqs octets rapide registres 512 ko CACHE 512 Mo RAM 80 Go Disques durs 10 Go CD / DVD Bande magnétique (DAT,DLT) 300 Go 100 To Systèmes complets d'archivage (robots)
(on ne traite que la mémoire physique, pas la virtuelle) Principe du cache Objectif : améliorer les performances de la machine. Notations : tglob = temps d'accès à une donnée tm = temps d'accès à la mémoire tc = temps d'accès au cache Cm = capacité de la mémoire Cc = capacité du cache sans utiliser de cache, on a : tglob = tm (on ne traite que la mémoire physique, pas la virtuelle)
Principe du cache Comment utiliser le cache ? a) comme de la mémoire supplémentaire ? Dans ce cas, que vaut tglob? La capacité totale de la mémoire accessible (cache+RAM) est de Cc+Cm. Statistiquement, sur un grand nombre d'accès mémoire : répartition au hasard. En pourcentage : Pc = Cc/(Cc+Cm) d'accès au cache Pm =Cm/(Cc+Cm) d'accès à la RAM
Principe du cache D'où tglob = Pc.tc+Pm.tm Aucun intérêt ! Application numérique Cm = 256 Mo, tm = 40 ns Cc= 256 ko, tc = 8 ns on a alors Pc = 9,7.10-4 et Pm = 0,999 d'où tglob = 39,97 ns. Gain = 0,03 ns... CACHE CPU RAM
Principe du cache b) comme de la mémoire 'simulant' la RAM le processeur adresse une certaine quantité de mémoire Cm, mais ce n'est pas forcément la mémoire qui possède cette information. Le cache peut en avoir une copie, auquel cas il répond à la place de la mémoire. Beaucoup plus intéressant ! RAM CPU CACHE
Principe du cache Illusion d'une mémoire très rapide de grande capacité. Quelle information va transmettre le CPU pour accéder à une donnée en RAM ? son ADRESSE. Cette adresse va d'abord être présentée au cache : s'il possède la donnée correspondante : il la transmet au CPU SUCCES ou CACHE HIT sinon : la donnée est en mémoire, il faut la faire transiter depuis la RAM ECHEC ou CACHE MISS
Principe du cache Le contenu du cache est dynamique : comment évolue-t-il ? Cas possibles : action demandée, réponse du cache demande de lecture, HIT : pas de mise à jour. demande de lecture, MISS : donnée cherchée en RAM, recopiée dans le cache, éventuellement remplacement d'une donnée plus ancienne.
Principe du cache demande d'écriture, c'est le CPU qui fournit la valeur : attention à la cohérence entre le cache et la RAM ! La RAM reste la référence : écriture en RAM de la valeur comportement du cache : écriture de cette valeur ? Intéressant si la donnée se trouve déjà dans le cache ! Plus simple : invalider la donnée si elle se trouve dans le cache (ne nécessite pas de mettre à jour le cache)
Le passionné de lecture CPU Illustration Analogie avec un libraire et un fournisseur. Un passionné de lecture veut obtenir un nouveau livre : il peut s'adresser à un fournisseur qui les possède quasiment tous, mais il faut dans ce cas faire une commande, le délai est d'une semaine. A côté de chez lui se trouve une (petite) librairie, qui contient des livres que l'on trouve aussi chez le fournisseur. Le passionné de lecture CPU Le fournisseur RAM La librairie cache
Illustration Le passionné se rend systématiquement à la librairie pour obtenir un livre : si la librairie dispose du livre : elle en donne une copie sinon : la librairie passe commande auprès du fournisseur elle reçoit le livre au bout du délai normal mais elle ne peut stocker qu'un nombre limité de livres donc il faut libérer une place en 'jetant' un autre livre. De même pour le lecteur : il ne dispose que de peu de place : il doit libérer de la place dans sa bibliothèque au fur et à mesure
Performance du cache Efficacité ? On peut calculer tglob 2 deux manières : 1) lorsqu'il y a HIT, le temps d'accès à la donnée est tc. Lorsqu'il y a MISS, le temps d'accès est : tc+tm HIT ou MISS ? : accès au cache ! Soit h le taux de HIT : 0 h 1 (h = nombre de HITS/nombre d'accès total) le taux de MISS est alors : 1-h tglob = h.tc+(1-h)(tc+tm)
Performance du cache 2) Dans tous les cas, un accès au cache (temps tc) est fait, puis : s'il y a HIT : on ne fait rien s'il y a MISS : on doit accéder à la mémoire : temps tm avec un taux 1-h. d'où tglob = tc + (1-h).tm quelle est la meilleure formule ?
Calcul de performance Illustration avec données numériques données précédentes : tm = 40 ns, tc = 8 ns, Cm = 256 Mo, Cc=256 ko. Comment évaluer h ? Même hypothèse que pour le cas a) : le cache contient des données aléatoires. Dans ce cas, quel est le taux h de réponse par un HIT à une demande quelconque du CPU ? h = Cc/Cm=1/1024 1-h = 1023/1024 on considère que h=0
Calcul de performance D'où le résultat : tglob = tm+tc = 48 ns > tm !!! Ajouter un cache diminue les performances du système ! Performance liée à la valeur de h, qu'il faut rendre maximum ! Comment améliorer h ? optimiser h maximiser le nombre de HIT lors des demandes Donc : ne pas remplir le cache au hasard ! Anticiper les accès.
Calcul de performance Utiliser des règles de remplacement de valeurs ou de mise à jour du cache : règles empiriques et non purement théoriques : amélioration des performances non prévisible au mieux, mais en moyenne. Exemple de telles règles : localité spatiale : lorsqu'un programme accède à une certaine adresse, il est probable qu'il accède à des adresses proches de celle-ci : transfert de plusieurs données dans le cache lors d'un MISS localité temporelle : lorsqu'un programme accède à une certaine adresse, il est probable qu'il y accède de nouveau peu de temps après : éliminer les données les plus anciennes d'abord (LRU)
Implémentation des caches 2 grandes familles : les caches associatifs : chaque emplacement du cache contient une association adresse/donnée les caches à correspondance directe : chaque emplacement du cache ne correspond qu'à un nombre restreint d'adresses en réalité, on utilise un compromis entre les deux !
Cache associatif Comparable à un tableau indexé : illustration Cache adresse donnée V 1 emplacement de cache Cache (N emplacements)
Mise en œuvre CPU MISS lecture, @$1000 $0 ???????? $0 ???????? $0 $0 ???????? $0 ???????? $0 ???????? lecture, @$1000 bus d'@ CPU $0 ???????? $0 ???????? MISS
Mise en œuvre On suppose qu'en RAM, à l'@ $1000, on trouve la valeur $12345678 1 $1000 $12345678 $0 ???????? $0 ???????? lecture, @$1000 bus d'@ CPU $0 ???????? $0 ???????? RAM $12345678
Mise en œuvre Politique de remplacement des valeurs : exemple précédent : tous les emplacements équivalents (cache vide) problème lorsque le cache est rempli de données valides ! Choisir la donnée à effacer; car en cas de MISS sur une lecture, on copie systématiquement la donnée provenant de la RAM dans le cache (principe de localité temporelle). Technique LRU : "vieillissement" des emplacements lorsqu'ils ne sont plus utilisées : comptage du nombre d'accès ne les concernant pas. Lors du remplacement : suppression d'un emplacement "le moins récemment utilisé" : LRU (Least Recently Used)
Autres exemples (I) Mise en œuvre avec des lectures ? ? ? $C08 CPU ! $AF0084 $00FF00A5 $1FA4C502 1 $00000000 $C08 $FFFFFFFF $20000 $65636700 $86E2 $01005A ? ? ? $C08 CPU bus d'@ ! MISS
Autres exemples (II) Mise en œuvre HIT ? ! $86E2 CPU $AF0084 $00FF00A5 $1FA4C502 1 $00000000 $C08 $FFFFFFFF $20000 $65636700 $86E2 $01005A ? ! $86E2 CPU bus d'@
Autres exemples (III) Mise en œuvre ? ? ? $020E CPU ? ? MISS $AF0084 $00FF00A5 $1FA4C502 1 $00000000 $C08 $FFFFFFFF $20000 $65636700 $86E2 $01005A ? ? ? $020E CPU bus d'@ ? ? MISS
Cache à correspondance directe Problème de recherche, les adresses ne sont pas classées ! "classement" des adresses : à une adresse ne peut correspondre qu'un emplacement précis du cache; bien évidemment, à un emplacement précis du cache peuvent correspondre plusieurs adresses. Technique : utiliser une partie de l'adresse (codée sur p bits) fournie par le CPU pour déterminer l'emplacement du cache à tester. Utilisation de q bits de poids faible de l'adresse.
Cache à correspondance directe Soit un cache comportant N emplacements et tel que N soit une puissance entière de 2 : q N / N=2q. (ce cas est toujours vérifié en pratique). Les q derniers bits d'une adresse codée sur p bits indiquent le numéro de l'emplacement du cache correspondant à l'adresse demandée. adresse codée sur p=16 bits 000001010011100101110111 0110101011000110 CPU bus d'@ cache à 8=23 emplacements
Cache à correspondance directe Toute adresse demandée se terminant par '110' indiquera le même emplacement du cache. Combien de telles adresses ? 2(p-q) traiter les informations dans le cache : s'assurer la donnée présente à cet emplacement correspond à celle qui se trouve en RAM à l'adresse demandée. Ne pas consulter la RAM ! La valeur des p-q bits de poids fort forment un TAG (empreinte).
Cache à correspondance directe TAG stocké dans le cache et utilisé pour comparaison avec l'adresse demandée. Structure de cache : V TAG DATA 1 emplacement de cache à correspondance directe V : bit de validité TAG : p-q bits de l'adresse correspondant à la donnée stockée dans la zone DATA.
Mise en œuvre Cache initialement vide, p=16, q=4 (d'où N=16) CPU = lecture, @ 101000111010 1110 N=2q CPU bus d'@ = 1) déterminer l'emplacement 2) comparer le TAG stocké dans le cache et le reste de l'adresse
Mise en œuvre Cache initialement vide, p=16, q=4 (d'où N=16) CPU = lecture, @ 101000111010 1110 N=2q CPU bus d'@ = HIT/MISS 3) si les TAGS sont égaux : HIT si le bit V est à 1, MISS sinon
Mise en œuvre On obtient forcément MISS puisque le cache est vide ! On suppose de plus qu'à l'adresse demandée se trouve la donnée $9ABCDEF0. 1 lecture, @ 101000111010 1110 CPU bus d'@ $9ABCDEF0 101000111010 $9ABCDEF0 RAM
Phénomène de ping-pong Accès alternés à deux adresses ayant les mêmes q bits de poids faible : même emplacement dans le cache ! Ex : adresses 1000 1101 1011 0111 et 0100 1000 1110 0111 lecture à la première adresse : MISS, donc chargement en cache de cette donnée et du TAG. Lecture à la deuxième adresse : consultation du cache à l'emplacement précédent : MISS, donc chargement en cache de donnée et TAG; et ainsi de suite Alors qu'il peut y avoir N-1 emplacements libres !
Lignes de cache Comment profiter de la localité spatiale des données ? Transfert de plusieurs données lors d'une écriture en cache pas dans plusieurs emplacements : trop long ! Un emplacement comporte plus qu'une donnée : une ligne de cache stockage du contenu de 4 ou 8 adresses consécutives, et adressage à l'intérieur de cette ligne
Lignes de cache Illustration avec cache à correspondance directe : nouveau découpage de l'adresse pour accéder à la donnée. On suppose que l'adresse fournie par le CPU est codée sur p bits. p bits TAG index SHAM q bits r bits (p-q-r) bits Index : indique l'emplacement du cache à consulter SHAM : SHift AMount : indique le numéro de la donnée dans la ligne de cache.
Mise en œuvre Structure du cache (avec une ligne de cache de 4 données): TAG V DATA 0 DATA 1 DATA 2 DATA 3 N emplacements TAG V DATA 0 DATA 1 DATA 2 DATA 3 Contient 4.N données
Mise en œuvre Exemple : p = 12 , q = 4, r = 2. N = 24 = 16 emplacements de cache; r = 2 4 données par ligne. Le CPU fait deux demandes : lecture, @ $FE0 (en binaire 111111 1000 00) lecture, @ $FE2 (en binaire 111111 1000 10) TAG SHAM index Première demande : MISS, chargement du TAG (111111) et de 4 données à l'emplacement 1000 du cache. Deuxième demande : même emplacement, même TAG HIT
Mise en œuvre État après : lecture, @ $FE0. Demande : lecture, @ $FE2 111111 1000 11 TAG V DATA 0 DATA 1 DATA 2 DATA 3 111111 1 données 1 = HIT MUX
Cache associatif par 2/4/8 Avantages et inconvénients des types de cache : cache associatif temps de recherche de l'adresse une donnée peut être placée n'importe où cache à correspondance directe pas de recherche de l'emplacement une donnée est stockée à un endroit précis : effet ping-pong
Cache associatif par 2/4/8 Profiter des avantages des deux types de cache : utiliser plusieurs caches à correspondance directe (2,4 ou 8) lors d'une demande : obtention de plusieurs données, mais la donnée correcte est la seule accompagnée d'un HIT de la part du cache à correspondance directe associé. Rapide, efficace, effet ping-pong maîtrisé (effet tournant sur 3,5 ou 9 adresses au lieu de 2)
Caches à plusieurs niveaux Compromis coût/performances : plus le cache a une capacité élevée, plus il est efficace, plus il est cher…même problème qu'avec la RAM : plusieurs niveaux ex des caches L1 et L2 séparation cache de données / caches d'instruction pour augmenter l'efficacité : Inutile de consulter un cache global : le découpage instructions/données enfreint le principe de localité spatiale, valable localement pour les donnée ou pour les instructions. Cache L1 ou interne : petite capacité, très rapide Cache L2 ou externe : capacité moyenne, éloigné de la puce
Adressage : matrices Facilité d'intégration : utilisation sous la forme d'une matrice comportant lignes et colonnes : 1 bit (ou une cellule mémoire) associée à un numéro de ligne (ROW) et un numéro de colonne (COLumn). L'adresse envoyée sur le bus d'adresse est en fait constituée de deux parties : une partie CAS (Column Address Strobe) et une partie RAS (Row Address Strobe). Possibilité de lecture par bloc en précisant la valeur de RAS puis en envoyant des valeurs successives de CAS ! Plusieurs manières de réaliser cela.
Adressage : matrices On présente volontiers la mémoire sous forme 'linéaire' (cf l'excellent cours d'archi des microprocesseurs ). Représentée sous forme de bascules : vrai pour les mémoires dites statiques (SRAM). Mais en réalité, plus sophistiqué : bascule : dispositif complexe par rapport aux échelles d'intégration actuelles (gravures en 0,1 micron soit 10-7 m, 1000 fois le d'un atome) on préfère un seul transistor ou condensateur : mémoire dynamique DRAM moins chère mais doit être rafraîchie : ralentissement.