Fonction mémoire
Transcription
Fonction mémoire
Memory Hierarchy - Diagram Fonction mémoire La mémoire Management Mémoire Mémoire cache Mémoire partagée Management Mémoire Mono programme Mémoire coupée en deux Operating System (monitor) Partie exécutable (Programme) Multi Multi--programme La partie “User” est sous divisée et partagée entre les processus actifs Partitionnement Découpe de la mémoire en sections allouées aux processus Partitionnement de taille fixe Éventuellement de tailles différentes Perte d’une partie de l’espace mémoire Besoin de partitions de taille variable Partition fixe Partition de taille variable (1) Allocation exacte de la place mémoire nécessaire Reste un espace en fin de mémoire non utilisé Un seul petit trou – moins de perte Changement des processus en mémoire entraîne une réallocation de l’espace Partitions Taille Variable (2) Amène une fragmentation de la mémoire Solutions: Agrégation – Regroupement des trous voisins en un seul Compactage – De temps en temps on regroupe tout l’espace libre en un seul trou: garbage collector Seulement des espaces plus petits sont dispo Nouveau trou Les effets… Réallocation Aucune garantie qu’un processus aura toujours le même emplacement mémoire Instructions référencent des adresses Adresses des data Adresses des instructions (branching) Adresse logique – relative au début du programme Adresses physique: emplacement de l’information (à un instant donné) Conversion automatique en utilisant une adresse de base Pagination Éclatement de la mémoire en blocks de tailles fixe – notion de page Éclatement des processus en pages Allocation du nombre de page nécessaire pour le processus L’OS maintient une liste des pages libres en mémoire Les pages d’un processus ne sont pas nécessairement contiguës en mémoire Besoin d’une table des pages en mémoire Adresse logique / physique Mémoire Virtuelle Structure Table des Pages Page à la demande Pas toutes les pages d’un processus en mémoire de suite Amener les pages quand on en a besoin Défaut de page Page demandée n’est pas en mémoire Operating System doit prendre en charge le chargement de la page Peut nécessité la libération d’un page en mémoire Algorithme de remplacement LRU, FIFO,RDM,LFU Translation Lookaside Buffer Chaque référence mémoire implique DEUX accès mémoire physique Chargement de l’entrée dans la table des pages Chargement de la donnée Utilisation d’une mémoire spéciale pour la table TLB Segmentation Pagination n’est pas “visible” pour l’utilisateur Segmentation est visible pour le programmeur En général un segment de données et un segment de programme Peut y en avoir plusieurs de chaque… Advantages de la Segmentation Adapté à des données évolutives Partage de segment entre processus Protection de segments L’adresse virtuelle devient (Numéro de segment,déplacement dans le segment) ou (Base, Offset) Gestion de la mémoire plus difficile Segmentation paginée Pentium II Pentium II Address Translation Mechanism Hardware supporte segmentation et pagination Unsegmented unpaged virtual address = physical address Low complexity High performance Unsegmented paged Memory viewed as paged linear address space Protection and management via paging Berkeley UNIX Segmented unpaged Collection of local address spaces Protection to single byte level Translation table needed is on chip when segment is in memory Segmented paged Segmentation used to define logical memory partitions subject to access control Paging manages allocation of memory within partitions Unix System V PowerPC 3232-bit Mémoires caches Compromis entre la taille et la vitesse de la mémoire. La mémoire cache est : de petite capacité de grande vitesse (facteur 10 entre la cache et la mémoire conventionnelle) Réduire le temps d’accès mémoire moyen en conservant une mémoire importante Cache Située entre le CPU et la mémoire centrale Peut être interne ou externe Rasnfert par mot, par bloc Caractéristique d’un cache Taille Fonction de Mapping Algorithme de Remplacement Write Policy Taille des Blocks Nmbre de Caches Importance de la taille Organisation Typique de Cache Coût Plus de cache = plus cher Vitesse Plus de cache = plus rapide (jusque un certain point) La recherche des données dans le cache prend du temps Début Mise en oeuvre LECTURE Recevoir l’adresse A du CPU Elle est placée entre le processeur et la mémoire ( à la Von Neumann). On espère que l'information sera souvent présente dans le cache. Principe de la localité L'accès est donc globalement plus rapide que dans le modèle VN. Même principe que la mémoire virtuelle A dans le cache? NON OUI Charger depuis le cache en A Allouer une place dans le cache pour A Envoi du contenu de A au CPU Mettre à jour le cache Fin TLB et Cache Accès mémoire en A Localité Localité spaciale: probabilité d’accès à une adresse voisine Localité temporelle: probabilité d’accès aux mêmes adresses successivement Séquentialité: probabilité d’accès à l’adresse n + 1 (localité spaciale) Performances ta : temps d'accès mémoire : Entre la soumission de la requête et la fin de transfert de l'information tc : temps de cycle mémoire: Entre deux accès successifs En général : tc tta Sur des mémoires rapides : tc tta Temps d’accès moyen Le temps moyen d'accès pour n références à une adresse qui reste dans le cache: t =( n ta_cache + ta_mem ) = ta_cache + ta_mem n n Après le premier accès, on va à la vitesse du cache Exemple ta_cache =25 ns ta_mem = 200 ns n=10 on obtient = = ( 200 + 10 * 25 ) / 10 = 45 ns ( < 200ns) Si n + infini alors ta_cache Temps d'accès moyen tta_cache+ (1(1-h) ta_mem exemple: h = 85% => t = 55ns = = ta_mem ( 1/K + (1(1-h)) (1) avec K= ta_mem / ta_cache = ratio des vitesses Succès / Echec Taux de succès (hit ratio) probabilité pour qu'un mot soit déjà dans le cache h = Nombre de références trouvées dans le cache Nombre de références total Taux d'échec (miss ratio) m=1-h Remarques de = = ta_mem ( 1/K + (1(1-h)) on déduit dépend dépend essentiellement de m (miss ratio) si K est grand (ratio des vitesses) par exemple pour une mémoire virtuelle disque = 20ms et ta = 200ns d’où K = 100000 m = 1% alors = 200.2 s Remarques (suite) Inversement dépend dépend essentiellement de 1/K si K est "petit". Pour les mémoires caches K= 3 .. 10 ta_mem = 200 ns et ta_cache = 25 ns et K=8 Si m = 1% alors = 27 ns Utilisation du cache : Vitesse mémoire et vitesse CPU Actuellement tc_mem = 10 * tc_cpu environ Il existe des mémoires rapides avec tc_mem = tc_cpu Le coût est élevé et ne permet pas de construire une mémoire de taille suffisante. Placement des données Un "petit" bloc mémoire avec Mapping des données similaire aux tc_mem= tc_cpu Programme et Data sont transférés via le cache mémoire L'efficacité dépend du principe de localité temporelle et spatiale des données et des instructions. systèmes de mémoire virtuelle Implémentation hardware. Améliore également les accès mémoire système Plusieurs stratégies: Direct Mapping Chaque donnée dans un seul emplacement du cache Calcul simple: i = j modulo m i = Numéro de l’emplacement cache j = Adresse mémoire m = Nbre d’emplacements du cache Direct mapping Fully associative mapping Set associative mapping Direct Mapping Les bits de poids faible de l'adresse dans le cache et dans la mémoire sont les mêmes . Les bits de points fort sont rangés dans le cache. 2 zones sur l'adresse TAG Index Méthode Accès mémoire L'index permet l'accès à 1 emplacement du cache. Cet emplacement contient 1TAG + 1DATA Le TAG obtenu est comparé avec le TAG de l'adresse Les 2 TAG sont les mêmes => Succès différents => Echec Index mémoire. Lecture : Le mot est envoyé au cache, il peut être envoyé en simultané au Processeur (Read(Read-through) Ecriture : Le mot est écrit dans le cache, il peut être écrit en même temps dans la mémoire (Write(Write-through) Exemple Direct Mapping Direct mapping TAG En cas d'échec, l'adresse est envoyée à la Tag + Index Mémoire Index Cache TAG Y = Data N Direct mapping par bloc Accès mémoire On transfert un bloc d'adresses contiguës En cas d'échec, on transfert toujours le (=> utilisation des mémoires entrelacées) bloc (la ligne) qui contient le mot référencé. Seul 1 bloc (ligne) du même numéro peut être présent dans le cache Rangement des données qui élimine les conflits. plusieurs requêtes mémoire simultanées L'adresse est composée de 3 champs TAG Bloc Mot Direct mapping par bloc TAG Avantages / Inconvénients Tag + bloc + mot bloc mot TAG Y = Data Data Data Data Data Mémoire Bloc Cache Pas d'algo Ratio de succès remplacement Hard simple et peu coûteux Rapide faible (cf. associative) Performances décroissent si même Index N Fully associative mapping Tendance : Direct Mapping adapté aux mémoires caches plus grandes Fully associative mapping Mémoire associative: L'adresse est Cache Y Y Exemple Associative Mapping = = Adresse Data Adresse Data Mémoire N .... simultanément comparée à toutes les adresses rangées dans le cache. Par bloc ou par mot (cf. Direct Mapping) Un bit de validité associé à chaque entrée Algorithme de remplacement hardware Adresse Adresse N Avantages / Inconvénients Flexibilité Plusieurs lignes Coût hardware du comparateur dans le cache avec Algo de le même numéro. remplacement (lequel enlever ?) Taille réduite Set associative mapping Set associative mapping Exemple Two Way Set Associative Mapping Tag + Index Index Cache TAG Y = = = Data TAG Data Data TAGData Data N Avantages / Inconvénients Moins de comparateurs. Algo de remplacement seulement sur le set Plus courant avec 2 blocs par ligne Stratégies de chargement Trois stratégies de chargement de donnée ou bloc de données de la mémoire vers le cache A la demande Pré chargement Chargement sélectif 1) A la demande On charge lorsqu'il y a eu un échec Bloc non présent dans le cache La plus simple Pas de hardware Mémoire mapping Permet un nombre limité de blocs (lignes) avec le même index mais des TAG différents. Le cache est divisé en "set" de blocs. Chaque "set" contient le même nombre de blocs. Chaque bloc a son propre TAG qui associé à l'index, identifie le bloc. TAG Index Compromis entre direct et full associative 2) Pré chargement On charge avant la référence au bloc. Exemple : charge le bloc (i+1) quand le bloc (i) est référencé pour la 1ère fois. 50% d'échec en moins sur un cache assez grand. Sur un cache petit, on peut écraser un autre bloc qui pourrait être encore référencé. Opérations d’écriture Consistance entre le cache et la mémoire les 2 versions de la donnée peuvent être différentes. Nécessité de conserver la cohérence dans des systèmes multi processeurs (mémoire partagée et caches multiples) ou avec des I/O sur la mémoire... Temps d’accès Le temps d'accès considère ici qu'il n'est pas nécessaire d'assurer la consistance du cache et de la mémoire . Deux stratégies d'écriture vont modifier le temps d'accès moyen: WriteWrite-through Write Write--back 3) Chargement sélectif Seuls certains blocs seront chargés en cache Certains blocs restent toujours en mémoire Accès direct à la mémoire reste possible Exemple : des données communes en Multiprocesseurs sont plus facilement gérées en mémoire commune. Temps d’accès modifié Rappel: = ta_cache+ (1= (1-h)ta_mem On peut décomposer ta_cache = = tci+ h*tcr + (1(1-h)ta_mem tci : temps d'interrogation du cache. tcr : temps de lecture du cache en cas de succès Write--through Write Chaque écriture dans le cache est répétée sur la mémoire. Le cache est plus efficace alors en lecture qu'en écriture En moyenne (Smith 1982) 3 à 10 lectures entre 2 écritures. Temps d’accès WriteWrite-through On obtient donc un temps d'accès moyen de Si tb = tm Pour les blocs de taille 1 ou pour les gros systèmes on a (tb = tm) = = tc+ (1(1-h)tb + w *(tm - tc) (tm - tc) = écriture mémoire et cache en parallèle indépendant de l'échec tb = temps de transfert d'un bloc de la mémoire au cache tm = temps d'accès mémoire (1 mot) tc = temps d'accès au cache w = % de write Exemples tc= 25nst 25ns tm =200ns h=99% w=20% =62ns =62ns => 25 + 2 (échec) + 35 (write) avec b=16 sur un microprocesseur, tb = 16 tm =92ns =92ns => 25 + 32 (échec) + 35 (write) Write Back (2) Ecriture seulement des blocs modifiés: 1 bit de Flag par bloc = = tc+ (1(1-h)tb + wb (1 (1--h)tb = = tc+ (1 + wb ) (1(1-h) tb wb : proba pour qu'un bloc ait été modifié. = (1(1-w)tc +(1 +(1--h+w) tm Write--back Write L'écriture n'est réalisée que lors du remplacement de bloc (I/O passent par le cache) Simple writewrite-back: tous les blocs remplacés sont écrits = = tc+ (1(1-h)tb + (1(1-h)tb (1--h)tb pour le Fetch et (1 (1 (1--h)tb pour le Write ttc+ 2 * (1(1-h)tb Algorithme de remplacement Problème : Amener un nouveau bloc quand le cache est plein ! Direct Mapping => pas de choix possible (le même index). Reprise des algorithmes des systèmes de mémoire virtuelle Implémentation hardware En même temps que le chargement du bloc depuis la mémoire Aléatoire FIFO Méthode la plus simple On choisit un bloc au hasard. Approximation du hasard Compteur incrémenté en fonction de On écrase le bloc le plus ancien dans le cache. Implémentation l’horloge La valeur du compteur donne le numéro du bloc à remplacer LRU (Least Recently Used ) On écrase le bloc le moins récemment compteur dans le bloc concerné On choisit le plus vieux en fonction de la valeur des compteurs LRU par matrice de références LRU par pile de registres Pile de registres (par set) : On place en sommet de pile le numéro du bloc référencé nb de registre = nb bloc par set 2 2 3 Bloc référencé 4 4 2 3 1 1 4 2 3 3 4 4 1 2 3 3 LRU par compteur 1 Compteur par bloc Incrément régulier du compteur A chaque référence on recopie le utilisé . Implémentation Par compteur Par pile de registres Par matrice de références Par méthodes approximatives 3 3 FIFO d'adresses Compteur incrémental Fully associative : 1 seul compteur Set associative: 1 compteur par set 3 3 4 1 2 2 Bloc écrasé 2 2 3 4 1 1 Matrice de bit Solution avec une matrice triangulaire B Blocs => matrice B x B ( sans diagonale) Une référence au bloc I Les bits de la ligne I sont mis à 1 Les bits de la colonne I sont mis à 0 Le bloc LRU a des 0 sur sa ligne et des 1 sur sa colonne LRU et méthodes Matrice de références 3 4 0 3 1 1 2 1 2 4 0 0 3 1 0 2 1 1 4 4 1 1 1 3 1 0 2 1 1 1 2 3 4 1 2 3 4 1 2 3 4 4 4 1 1 4 3 2 4 0 1 1 4 1 1 1 4 1 1 0 4 1 0 0 3 0 0 3 0 0 3 1 1 3 1 0 2 0 2 0 2 0 2 1 1 1 1 1 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 3 3 2 1 Nombre de caches Plusieurs niveaux hiérarchisés Plusieurs fonctionnalités approximatives Un grand nombre de blocs impose des méthodes approximatives Résolution par sous groupe Choix d’une solution proche du LRU Exemple sur le 80486 pseudo LRU Simple ou double niveau On On--chip cache (L1)=> réduit le traffic sur le bus Un succès élimine toute requète sur le bus On ajoute souvent un cache externe (L2) qui permet un accès rapide sur le bus (parfois interne aussi) Performances dépendent du hit ratio. Des études montrent que ça marche... Deux niveaux de caches Mémoire Cache unifié ou spécifique Un cache instructions et un cache données L2 Un seul cache assure néanmoins un L1 meilleur hit ratio: équilibre automatique entre data et instructions Deux caches sont nécessaires en fonctionnement pipepipe-line (pré(pré-chargement et exécution). Ils évitent les ruptures de pipepipe-line Processeur Evaluation des performances Méthodes: 1) Simulation suivant une trace de programme 2) Mesure directe 3) Modèle Mathématique Eviter le "démarrage à froid" (pas d'échec) Grand nombre de références Comportement du programme Fonctionnement Pas de problème en lecture En écriture, il faut mettre à jour toutes les copies de la donnée Le WriteWrite-through n'est pas suffisant : il ne met pas à jour les copies des autres caches Cache et multiprocesseurs Réduction de la latence Duplication proche du processeur Réduction du bandwidth Plusieurs processeurs partagent des data efficacement P P P •store & load exécutés sur différents processeurs? Exemple Cohérence de Cache P2 P 2 P1 P 1 u = u?= ? $ $ P3 P 3 3 3 u = u?= ? 4 4 $ $ 5 5 $ $ 7 7 u :5 u :5u=u= u :5 u :5 1 1 2 2 u:5 u:5 I/O I/O devices devices Memory Memory Processeurs ont différentes valeurs de u après (3) Inacceptable et fréquent! Différentes techniques Plusieurs techniques pour garder la cohérence des caches Cache partagé Objet "non"non-caché" Surveillance de Bus Ecriture diffusion: Broadcast write Méthode de la directorie MESI Cache partagé Alliant FXFX-8 Début des 80’s 8 x 68020s avec xx-bar et 512 KB interleaved cache Bientôt sur nos microprocesseurs... P1 Pn Switch (Interleaved) Cache (Interleaved) Main Memory Avantages Désavantages P1 Placement dans le cache standard Pn Switch (Interleaved) Cache Une seule copie existe (Interleaved) Main Memory Partage à grain fin Interférence positive Limitation fondamentale du BW Augmentation de la latence pour tous les accès P1 Pn Switch 1 proc peut prefetcher data pour un autre Taille mémoire cache totale plus petite. Partage d’une ligne de data sans effet “ping--pong” “ping X-bar Cache plus grand (Interleaved) Cache (Interleaved) Main Memory Interférence négative 1 proc peut écraser les data utiles pour un autre Beaucoup de caches L2 sont partagés Faux partage Mémoire multimulti-bancs Ne réduit pas les conflits d'accès au réseau. Mem Mem Mem Cache Cache Cache Objets non cachés Les objets partageables accédés en écriture sont présents en mémoire Ils ne peuvent pas venir dans le cache Contrôle software: sémaphores. sections critiques. Réseau CPU CPU CPU Surveillance de bus Multiprocesseurs autour d'un bus. 1 contrôleur de cache / CPU : détecte les écritures sur le Bus . Si l'adresse au au cache, on invalide l'entrée. On utilise nécessairement le WriteWriteThrough ou le write back Protocole Snoopy State Address Data Pn P1 Bus s noop $ $ Mem I/O devices Cache-m em ory trans action Contrôleur de cache “snoops” toutes les transactions sur le bus action pour assurer la cohérence invalidate, update, ou suppression de la valeur dépend de l’état du bloc et du protocole de cohérence Example: WriteWrite-thru Invalidate P2 P1 u= ? $ $ 2 stratégies 3 u= ? 4 Fonctionnement du contrôleur P3 5 $ comparer le TAG de l'index ou invalider l'index TAG TAG u :5 u= 7 u :5 I/O devices 1 uu:5 :7 2 CPU Memory Cache Contrôleur Cache Bus local Interface Bus Protocole WriteWrite-through Invalidate Write through, write nono- PrRd/ -PrWr / BusWr allocate caches 2 états par bloc dans V chaque cache bits hardware associés aux blocs présents dans le cache Autres blocs Invalide (non présent) BusWr / - I State Tag Data State Tag Data Lectures multiples simultanées mais write invalide les copies Ordre des écritures est celui du Bus PrWr / BusWr PrRd/— PrRd, PrWr 3 états Pas d’accès sur le Bus Protocole MSI Invalidate Read entraîne “shared” Devenir proprietaire PrWr/— M PrRd/— PrWr/— M exclusif avant le Write invalid, valid (clean), modified (dirty) 2 transactions bus : PrW read (BusRd), writewrite-back (BusWB) Valid = “shared” Modified = “exclusive” read read--exclusive: read pour modifier des succès aux caches Protocole plus sophistiqué! 2 opérations processeur sur le Bus en multiproc Tous les write sont observables Tous les write vont sur le bus Utilise beaucoup de bandwidth Comment assurer la cohérence? Write--back monoprocesseur Write Introduire 1 nouvelle transaction Write Write--through est simple Write Write--back absorbe la plupart des write par PrRd / BusRd Write invalide tous les autres caches Write--through vs. WriteWrite Write-back V Replace/BusWB Replace/- PrRd/BusRd PrRd/— BusRd/— PrWr/BusRd I BusRdx produit une invalidation des autres Si bloc modifier dans un autre cache, on récupère (1 seul en M) Remplacement? S->I, MM->I BusRd/Flush PrWr/BusRdX S BusRdX/Flush BusRdX/— PrRd/BusRd PrRd/— BusRd/— PrWr/BusRdX I Example: WriteWrite-Back Protocol PrRd U P0 PrRd U P1 U S 5 U S 7 P4 U M U S PrRd U PrWr U 7 BusRd (I(I->S) suivi BusRdX (S(S->M) Pas très bon pour un monoprocesseur I/O devices BusRd U BusRd Problème: 1 Read&Write produit deux actions sur le bus, même sans partage. 7 5 BusRd U BusRdx U Protocole trop coûteux! u:57 Memory Flush Protocole MESI (4(4-state) Support Hardware pour MESI Ajoute l’état exclusive P0 P1 P4 distingue exclusive (writable) et owned (written) Etat invalid exclusive ou exclusive exclusive--clean (seul ce cache a une copie, mais pas modifiée) shared (2 caches au moins ont une copie) modified (dirty) I -> E sur PrRd si aucun cache n’a de copie I/O devices u:5 shared signal - wired-OR Memory contrôleurs de cache “snoop” sur BusRd Une ligne plus sur le bus pour signaler le partage du bloc lu Diagramme de de Transition MESI BusRd(S) signifie PrRd PrWr/— ligne partagée sur cette transaction BusRd BusRdX/Flush envoyée aux autres caches. La copie (si elle existe) est mise à jour ou PrWr/— PrWr/BusRdX E BusRd/ Flush PrRd/— BusRdX/Flush PrWr/BusRdX S BusRdX/Flush PrRd/ BusRd (S ) (Broadcast Write) Chaque écriture dans un cache est M BusRd/Flush Ecriture distribuée PrRd/— BusRd/Flush PrRd/ BusRd(S) I invalidée. Augmente les transactions Mémoire Solution Générique Méthode de la directorie Adaptée aux systèmes à mémoires partagées physiquement distribuée Protocole réalisé par le réseau Transition d’états se fait localement Directory Switch Directory Memory Memory Comm Assist Scalable Interconnection N etwork Maintenir le vecteur d’état explicitement Sur échec, communication avec la directorie déterminer l’emplacement des copies cachées déterminer l’action à entreprendre Suivre le protocole pour maintenir la cohérence Switch CA M P1 Cache Comm. Assist Scalable network Switch P1 Cache $ P Bit modifié Fonctionnement de la directorie chaque bloc est associé un ensemble de bits géré en mémoire centrale 1 bit / CPU + 1 bit "bloc modifié« Processeurs Si "bit modifié" = 1 1 seul des autres bits est égal à 1 Il correspond au CPU qui contient la bonne copie. Si "bit modifié" = 0 Plusieurs caches peuvent posséder le bloc Plusieurs bits à 1 dans la directorie 0 1 Bit bloc modifié 0 1 Processeurs 1 1 1 Processeurs Fonctionnement du cache Chaque bloc dans le cache possède un bit qui précise que sa copie est la seule valide Le bit (bit(bit-local) est mis à 1 lors d’une écriture dans le cache. Il devient le seul bloc à jour. Bloc Bit-local 1 0 Bit bloc modifié Lecture bloc cache cache OK bloc cache SI le "bloc modifié" ALORS transf(cache du propriétaire propriétairecache) SINON transf(mémoire transf(mémoire cache) Transactions Read/Write Ecriture Requestor bloc cache cache SI "bit local" SINON Invalider les autres copies (Directory) Maj bitbit-modifié et bit local bloc cache cache tranf(dernière version bloc bloccache) Invalider les autres copies (Directory) Maj bitbit-modifié et bit local Exemple Hiérarchies à 2 niveaux P C B1 M ain M em P P C C Snoop ing Adap ter P P B1 Snoop ing Adap ter C C B1 M ain M em Dir. M ain M em P P C C P B1 Assist Assist M ain M em C Dir. B2 Network (a) Snooping-snooping P P C M /D A A C M /D A Network1 Directory adap ter P P C M /D A P C M /D A P C M /D A 2. Reply with sharers identity M/D 2. 3. Read req. to owner Reply with owner identity P A 3b. Inval. req. to sharer 3a. Inval. req. to sharer M/D 4a. Data Reply M/D Directorynode 4b. Inval. ack 4a. Inval. ack 4b. Revision message to directory P A C P P C C C A P C M/D A Node with dirty copy M/D Sharer (a) Read miss to a block in dirty state A M/D Sharer (b) Write miss to a block withotw sharers Cache du Pentium 80386 => pas de cache onon-chip 80486 => 8Ko (set asso: 4 set ,bloc de 16) Pentium => 2 caches (I et D) onon-chip C A M /D Directorynode for block P C A RdEx request to directory C M/D A 1. P Read request to directory 512K(2 set, bloc de 32, 64, 128) (b) Snooping-directory P C M /D Requestor 1. P C M /D A Network1 Network1 Network1 Directory adap ter Dir/Snoopy adap ter Dir/Snoopy adap ter Bus (or Ring) Network2 (c) Directory-directory (d) Directory-snooping Cohérence des caches Protocole MESI: 2 bits par ligne, fonctionnement en Write Back (Pentium) Modified: Modified: La ligne dans le cache est modifiée et différente de la mémoire Exclusive Exclusive:: Même que la mémoire mais pas ailleurs Shared Shared:: Même que la mémoire et peut être ailleurs Invalid Invalid:: Ne contient pas de données Write Once sur L1 Première lecture copie la ligne sur L1 et L2. L1 est S Première écriture. On applique un write through sur L2 et L1 devient E Ecritures suivantes: on modifie seulement L1 qui devient M En cas de remplacement de la ligne: si M alors Write Back sur L2 Première lecture: L2 est positionnée à E Première écriture: L2 devient M En cas d’accès à cette ligne par un autre 256 Interface 64 64 bits maître du bus: En lecture: L2 bloque la demande et envoie l’adresse au processeur qui déclenche un Write Back (de L1), L2 libère la demande Idem en écriture avec un write back en mémoire avant libération de la demande. (L1 et ) L2 devient I. Diagramme Pentium 4 (Simplifié) Prédiction branch I cache Sur L2 Prefetch buffers 32 32 ALU ALU int int 32 Floating point unit 32 64 Registres Mul Registe int 32 Add D cache Div Le Pentium Organisation Cache Power PC 601 – simple 32kb 8 way set associative 603 – 16kb (2 x 8kb) two way set associative 604 – 32kb 610 – 64kb G3 & G4 64kb L1 cache 8 way set associative 256k, 512k or 1M L2 cache two way set associative PowerPC G4 Comparaison tailles de Cache Mémoire entrelacée Réduire la différence entre vitesse de la mémoire et vitesse du processeur Augmenter le débit de la mémoire de telle sorte que plusieurs mots soient accédés en même temps Equivalence entre débit mémoire, débit bus et débit CPU Construction La mémoire est construite avec plusieurs modules. Chaque module travaille de façon indépendante. Ces modules sont connectés à un ou des bus ou un réseau de connexion. Organisation Fonctionnement Lorsqu’une adresse est présentée à un La mémoire supporte un adressage module, il faut un cycle mémoire pour réaliser la lecture/écriture. Idée: Présenter différentes adresses à différents modules en même temps. linéaire L’organisation de la mémoire dépend de la projection de cet adressage sur la mémoire physique Accès par bloc En plus de l’accès aléatoire, on utilise souvent un accès par bloc. (Bloc d’adresses consécutives)(cf. cache). On peut prendre en compte cette contrainte pour améliorer le débit de la mémoire lors d’accès à des blocs. Adressage Deux formats d'adressage existent – Low order interleaving : les bits de poids faible référencent le module, les bits de poids fort donnent le déplacement dans le module. – high order interleaving : les bits de poids fort référencent le module, les bits de poids faible donnent le déplacement dans le module. Low--order interleaving Low High--order interleaving High Registre adresse Offset Module Registre adresse 0 m 1 m+1 m-1 2m-1 m(w-1) mw-m+1 mw-1 Registre data Module Offset 0 1 w w+1 (m-1)w mw-w+1 w-1 2w-1 mw-1 Registre data Parallèle/pipeline Accès parallèle Les accès à des données multiples La largeur du bus de donnée est égale au peuvent alors être parallélisés : tous les bancs démarrent en même temps pipelinés. Les bancs sont activés successivement Accès parallèle nombre de bancs qui travaillent en parallèle Les bancs travaillent soit sur la même adresse, soit sur des adresses différentes Accès pipeline Les adresses sont envoyées à chaque Bus data extra Large cycle vers un banc différent Une adresse différente peut être produite à chaque cycle (vitesse du CPU) La même adresse à tous les bancs en un seul cycle CPU s é l e c t e u r Registre adresse Accès pipeline Adresses différentes Registre data Bus data Modules Temps d’accès mémoire CPU s é l e c t e u r Registre adresse Même adresse Modules Temps d’accès mémoire Deuxième accès Nouvelle adresse Temps Temps