Ensimag 2A Ensimag 2A Examen d’Architecture Avancée Filières SLE/ISI, 3 heures, tous documents et calculette autorisés. Lisez l’ensemble des questions relatives à un exercice avant de commencer à répondre ! 1 Exercice 1 : Cache assurant la cohérence mémoire (8pts) Soit p processeurs connectés chacun par un PI-Bus à la mémoire centrale partagée, par l’intermédiaire d’un cache. Les caches sont tous identiques, à correspondance directe (direct mapping), à écriture systématique (write through), structurés en 128 lignes de 4 mots de 32 bits. On fait également l’hypothèse que les seuls transferts qui ont lieu sont des lectures ou des écritures de mots de 32 bits. Rappels et préliminaires On rappelle ici les signaux du PI-Bus : Nom emis reçu RESETN environnement tous CLK environnement tous REQx maître x BCU GNTx BCU maître x READ maître esclave LOCK maître BCU OPC[3 :0] maître esclave, BCU A[31 :2] maître esclave, BCU D[31 :0] maître, esclave esclave, maître ACK[2 :0] esclave, BCU maître SELy BCU esclave y commentaires remise à zéro. horloge système, active sur front montant. Requête du maître x pour le bus. Donne le bus au maître x. Lecture si 1, écriture si 0. Garde la propriété du bus. Type de transfert. Adresse du transfert. Donnée. Réponse au transfert. Sélection de l’esclave y. Les signaux sont tous actifs à l’état haut, hormis le RESETN qui est actif à l’état bas. Nous rappelons que les adresses sont sur 30 bits, les 2 bits de poids faibles étant définis par les opcodes spécifiant le transfert, et que les octets significatifs sont alignés à droite. Les signaux READ, OPC, LOCK et A sont positionnés au cycle t, et les signaux ACK et D sont positionnés au cycle t + 1. Le signal ACK peut prendre les valeurs suivantes : symbole WAT RDY description transfert retardé. transfert effectué. Le signal OPC ne peut prendre que la valeur WDU dans notre exercice (uniquement transferts de mots de 32 bits). Un exemple de chronogramme est donné dans la figure 1. La mémoire utilisée pour implanter le cache est une mémoire simple accès, les lectures et les écritures ne peuvent donc avoir lieu au même cycle. L’interface du processeur vers le cache de données dont nous avons l’usage est la suivante : – TYPE. Émis par le processeur, indiquant le type de transfert à effectuer. Dans un but de simplification, seules 3 valeurs sont possibles : NOP (pas de requête), RWD (requête de lecture d’un mot), WWD (requête de d’écriture d’un mot). Examen d’architecture - 2S page - 1 Ensimag 2A CYCLE CLK 1 2 3 4 5 6 7 RWRD.HIT/FRZ<=0 IDLE WWRD...../FRZ<=? NOP/FRZ<=0 REQA REQ<=0 ACK=RDY/FRZ<=0 GNTA* RWRD.HIT/FRZ<=1 REQ ACK RDY RDY WAT RDY ACK=WAT/FRZ<=1 GNT LOCK FRZ<=1 GNT READ A WDU WDU WDU WDU A0 A1 A2 A3 A3 ACK=WAT/FRZ<=1 A0 A3D2 LOCK<=1 REQ<=1 LOCK<=1 REQ<=0 FRZ<=1 ACK=WAT/FRZ<=1 SEL* D A1D0 D0 D1 D2 D3 SNOOPDO F IGURE 1 – Chronogramme d’écritures successives en mémoire. LOCK<=0 REQ<=0 ACK=RDY/FRZ<=1 FRZ<=1 WDU D3 RDY REQ<=1 OPC Non considéré dans cet exercice LOCK<=1 REQ<=0 ACK=RDY/FRZ<=1 ACK=WAT/FRZ<=1 A2D1 ACK=RDY/FRZ<=1 LOCK<=1 REQ<=0 F IGURE 2 – Automate de chargement d’une ligne de cache (sans la génération des sorties). – ADR[31 :0]. Émis par le processeur, contenant l’adresse de la requête courante. Pour notre exercice ADR[1 :0] = 00 ; – FRZ. Reçu par le processeur. Si ce signal vaut 1, le processeur est gelé (combinatoirement, c.-à-d. que si DFRZ passe à 1 dans un cycle, les registres du processeur ne sont pas modifiés à la fin du cycle). Exercice proprement dit On se propose dans cet exercice de concevoir un mécanisme implanté dans le cache qui espionne les transferts de données en écriture et invalide la ligne de cache si une écriture a lieu à une adresse correspondant à une donnée qui se trouve dans le cache. On doit pour se faire ajouter un signal supplémentaire, SNOOPDO, émis par le contrôleur de bus à destination des maîtres, qui est à 1 la première fois qu’une adresse est émise sur le bus par un maître. On voit sur le chronogramme de la figure 1 que le signal SNOOPDO est à 1 chaque fois qu’une nouvelle adresse est présentée sur le bus, mais qu’en cas de ACK=WAT, qui implique que le maître remet l’adresse suivante, le signal n’est pas réactivé. Question 1 (0.5pt) Donnez la « structure » de l’adresse pour ce cache, c’est-à-dire le nombre de bits de tag, d’index et d’offset. 128 lignes d’ou 7 bits d’index, lignes de 4 mots, donc 2 bits d’offset, 2 bits pour l’octet dans le mot, et donc 32 - (7+2+2) = 21 bits de tags. Question 2 (1pt) Du point de vue du protocole de bus (et indépendamment du comportement attendu du cache qui sera l’objet de la suite), qu’est-il absolument nécessaire de faire au niveau des caches lorsque le signal SNOOPDO est à 1 ? Dessinez le petit circuit permettant de faire cette action. (Il n’y a pas de piège, la réponse est simple.) Examen d’architecture - 2S page - 2 Ensimag 2A Échantillonner l’adresse ! Un registre avec @ sur data et snoopdo sur we On change la sémantique du signal HIT. Ce signal indique à présent soit que la donnée requise par le processeur est cachée, soit qu’il y a un hit externe, c’est à dire que la donnée écrite circulant sur le bus se trouve dans le cache. Question 3 (1pt) Proposez une solution à faible coût matériel (typiquement sans dupliquer des choses existantes) permettant de calculer ce signal. Faites le schéma de la partie opérative correspondante, sachant que le contrôle sera déterminé dans les 2 questions suivantes. Un mux sur les fils d’adresse représentant le tag multiplexant soit l’adresse venant du processeur, soit celle venant du bus. Le signal de hit correspond alors soit à un hit interne, soit à un hit externe. On utilisera le signal SNOOPDO pour commander le mux, qui s’il est actif fera passer l’adresse du bus qui a été échantillonnée, et l’adresse du processeur sinon. Question 4 (1pt) En considérant les instants d’arrivée possibles des requêtes de lecture du processeur et des requêtes d’écriture circulant sur le bus, décrivez le problème qui se pose sur le cache et proposez une solution qui garantisse un fonctionnement correct. (On notera ici que le cache n’est pas maître des transferts qui ont lieu sur le bus, et qu’il ne peut intervenir sur ceux-ci). Vous pouvez vous aider d’une table énumérant les 4 situations possibles pour expliquer votre raisonnement. Requête de lecture du processeur et requête d’écriture circulant sur le bus : Proc Bus Problème ? 0 0 Pas de problème 1 0 Pas de problème 0 1 Pas de problème 1 1 Geler le processeur et donner la priorité au bus Le chargement d’une ligne de cache pour un système mono-processeur se passe comme indiqué grossièrement (on n’indique pas ici les sorties de l’automate pilotant le chemin de données) par l’automate de la figure 2, déjà vu en cours. On veut à présent prendre en compte le signal SNOOPDO dans les transitions de l’automate. Question 5 (2pt) – à quelle condition y a-t-il un hit externe ? Donnez l’équation logique permettant de la calculer. – dans quels états de l’automate est-on certain de ne jamais avoir de hit externe ? Justifiez votre réponse. xhit = hit.snoopdo d’après ce qui a été dit avant Dans les états durant lequel le processeur est propriétaire du bus : A0, A1D0, A2D1, A3D2, D3 On fera l’hypothèse que l’on va dans un état INVAL pour invalider la ligne visée (écriture d’un 0 dans le bit de validité). Question 6 (2.5pt) Ajoutez un ou des états INVAL là où cela est nécessaire dans l’automate. Modifiez les conditions de transitions des états qui peuvent être sensibles à un hit externe pour prendre en compte le signal SNOOPDO et passer ainsi dans cet état. Donnez également les transitions permettant de sortir de l’état INVAL. Examen d’architecture - 2S page - 3 Ensimag 2A SNOOPDO.HIT/FRZ<=1 SNOOPDO.RWRD.HIT/FRZ<=0 IDLE SNOOPDO.WWRD...../FRZ<=? Non considéré dans cet exercice SNOOPDO.HIT/FRZ<=1 INVAL SNOOPDO.NOP/FRZ<=0 1/FRZ<=0 WE <= 1 mux <= inval REQ<=0 ACK=RDY/FRZ<=0 SNOOPDO.HIT/FRZ<=1 SNOOPDO. RWRD.HIT/FRZ<=1 REQ REQ<=1 ACK=WAT/FRZ<=1 GNT FRZ<=1 GNT D3 LOCK<=0 REQ<=0 ACK=RDY/FRZ<=1 FRZ<=1 ACK=WAT/FRZ<=1 A0 A3D2 LOCK<=1 REQ<=1 LOCK<=1 REQ<=0 FRZ<=1 ACK=WAT/FRZ<=1 A1D0 LOCK<=1 REQ<=0 ACK=RDY/FRZ<=1 ACK=WAT/FRZ<=1 A2D1 ACK=RDY/FRZ<=1 LOCK<=1 REQ<=0 Question bonus : inutile de s’y attaquer si vous n’avez pas fini le reste ! Au lieu d’invalider la ligne, on désire la mettre à jour, ce qui nécessite 2 états : UPDTR pour lire la ligne et UPDTW pour la ré-écrire modifiée dans le cache, comme vu en cours. Question 7 (bonus 1pt) Quel est le problème si un hit externe à lieu (sur une autre ligne) lorsque l’automate est dans l’un de ces 2 états ? Quelle est alors la seule solution pour assurer la cohérence des données ? On est en train d’invalider une ligne à cause d’un précédent accès à une adresse dans le cache, et une autre adresse est en train de circuler en écriture et on ne peut la prendre en compte, il y a donc risque d’incohérence. La seule solution est alors d’invalider la totalité du cache car on ne sait pas quelle ligne invalider 2 Exercice 2 : Analyse quantitative (2,5pts) Soit les hypothèses suivantes : – un processeur exécute une instruction RISC par cycle, et lit ou écrit une donnée en 1 cycle si elle est dans le cache (cas hit). Les instructions sont supposées être dans un cache parfait, et n’interviennent donc pas dans les calculs qui suivent. On prend comme hypothèse que si les accès mémoire donnée se faisaient en 1 cycle, le CPI de la machine serait de 1 ; – la latence de chargement d’une ligne de cache à partir de la mémoire est de l = 50 cycles ; – pour une application donnée, le pourcentage d’instructions de lecture est de 20%, que nous notons r = 0.20, et le pourcentage w d’instruction d’écriture est 12%, que nous noterons w = 0.12 ; – le cache de données est write-back ; dans le cas où un accès mémoire fait miss, il faut dans 27% des cas (dirty rate dr = 0.27) écrire la ligne en mémoire (ligne modifiée, dirty) avant de rapatrier la ligne désirée (stratégie write allocate pour les écritures) – les écritures font hit dans le cache dans 65% des cas : dwh = 0.65. Les écritures qui font miss sont synchronisées : on attend la disponibilité de la ligne en cache pour faire effectivement l’écriture avant de passer à l’instruction suivante ; – le taux de miss en lecture drm est de 8% (drm = 0.08) pour le cache de données Question 8 (2pt) Examen d’architecture - 2S page - 4 Ensimag 2A Donnez la formule générale du CPI(l, r, w, dwh, drm, dr) dans ces conditions, en supposant que le CPI avec un cache parfait serait de 1. Faites l’application numérique avec les valeurs fournies. CPI = ((1−(r+w))×1+r×(drm×l+(1−drm)×1)+w×(dwh×1+(1−dwh)×(2×l×dr+l×(1−dr)))) On multiplie par 2 la taille du cache des données, ce qui fait que les miss rates diminuent, dwh = 0.75 et drm = 0.06, mais que le dirty rate en écriture augmente, donc dr = 0.42. En contrepartie, la fréquence de fonctionnement du deuxième système est légèrement plus basse que celle du premier : fs2 = 0.985 × fs1 . Question 9 (0,5pt) Est-il utile de faire ce changement ? Justifiez votre réponse. L’application numérique, que je n’ai pas faite, le dira ! 3 Exercice 3 : Opérations atomiques (1pt) Soit les instructions ll rt, imm(rs) et sc rt, imm(rs) vues en cours. On rappelle que si sc échoue, après l’exécution de cette instruction le registre rt vaut 0, et sinon il vaut 1. On suppose que le registre $2 contient l’adresse d’une case mémoire. Question 10 (1pt) Écrivez un programme qui incrémente le contenu de cette case mémoire de manière atomique à l’aide de ces instructions. C’est très simple, juste pour voir s’ils sont venus en cours. again :ll $1, 0($2) add $1, $1, 1 sc $1, 0($) beqz $1, again nop 4 Exercice 4 : Processeur pipe-line à 8 étages (8,5pts) Le successeur du processeur R3000 vu en cours est le R4000. Ce processeur, utilisé par exemple dans la playstation portable, possède un pipe-line à 8 étages : l’analyse de la solution classique à 5 étages montrait que les étages critiques (ceux déterminant la période d’horloge) étaient les étages d’accès mémoire, qu’il s’agisse de la mémoire instruction ou de la mémoire donnée. En effet, si ces mémoires sont des caches à gestion complexe (taille importante, associativité importante, accès TLB pour traduction adresses logiques vers adresses physiques, . . . ), les accès, même en cas de « hit », sont 3 fois plus lents que les opérateurs des autres étages du pipe-line. On décide donc d’effectuer les accès mémoire en 3 étapes : 1. préparation de l’accès (étages Instruction First et Data First) ; 2. accès effectif, (étages Instruction Second et Data Second). C’est dans ces étages qu’une instruction est effectivement lue, et que les données sont effectivement lues ou écrites ; 3. vérification du hit/miss (étages Register File et Tag Check). Le circuit "Calcul Hit" calcule combinatoirement si l’instruction dans le registre IS/RF ou la donnée dans le registre DS/TC est valide en cas de lecture, et si la donnée a fait un « hit » dans le cache en cas d’écriture. On rappelle qu’un hit (encore appelé « miss ») peut servir à geler le processeur, . . . Examen d’architecture - 2S page - 5 Ensimag 2A IF IS RF EX DF DS Calcul hit PC Instruction memory REG TC WB Calcul hit ALU Data memory F IGURE 3 – Schéma du pipeline à 8 étages. L’accès mémoire est alors réparti sur 3 étages du pipe-line : un nouvel accès mémoire peut être lancé à chaque période d’horloge. On obtient alors le pipe-line à 8 étages schématisé sur la figure 3 ci-dessous (qui suffit à traiter les opérations entre registres format R) : Question 11 (0,5pt) On peut remarquer que le schéma n’est pas exactement le même pour le cache mémoire instruction et pour le cache mémoire donnée : expliquez pourquoi. Parce que les instructions sont en lecture seulement, alors que les données sont en lecture et écriture. Question 12 (1,5pts) Pour une instruction de type STORE (écriture valeur registre en mémoire, sw rt, imm(rs)), une écriture sera toujours effectuée dans l’étage DS, alors que le « hit » ne sera calculé que dans l’étage TC. En considérant le bit de validité v et le résultat de la comparaison du tag, précisez les 3 cas possibles et leur implication sur le fait que l’écriture ait été faite à tort ou non. Comment proposez vous de traiter ce cas, dans le cas d’une stratégie write-through, sachant que des accès mémoire peuvent être en cours dans l’étage DF et DS ? On demande ici une explication synthétique qui précise les ressources nécessaires et les étapes de la gestion du cas, mais pas de schéma ou d’automate. Cas possibles : v 0 hit x 1 0 1 1 commentaire le cache ne contient pas de données dans la ligne considérée, écrire dedans ne fait pas de mal le cache contient une donnée qui n’est pas la bonne, et elle va donc être écrasée de manière erronée le cache contient la bonne donnée qui va donc être mise à jour La stratégie la plus simple est d’invalider la ligne si l’on s’est trompé. Pour cela, il faut que le vecteur de validité de la ligne soit un ensemble de registres 1 bit disponible dans l’étage TC, et l’on va forcer à zéro le registre qui correspond à la ligne malencontreusement écrasée. C’est assez coûteux, car il faut redécoder la partie index de l’adresse pour accéder au bon registre. Question 13 (2pts) Complétez le schéma pour les instructions de format « I » sw rs, imm(rt) et beq rt, rs, imm, sachant que le calcul des adresses de branchement, ainsi d’ailleurs que le calcul de la condition du saut, se fait dans l’étage EX. Inutile de faire tous les cas possibles (extension de signe ou pas, etc), faites simple pour montrer le principe. Question 14 (2pts) Quelles connexions supplémentaires (appelées bypass dans le cours) sont nécessaires pour assurer le « forwarding » entre instructions de format R ? Redessiner le pipeline en les ajoutant. Examen d’architecture - 2S page - 6 Ensimag 2A A faire, mais très similaire au cours. Question 15 (1pts) Étudiez l’exécution d’un LOAD (lw rt, imm(rs)) suivi d’instructions dépendantes. Combien de bulles (stall) doivent être insérées au maximum ? Justifiez votre réponse. (On ne cherche pas à expliciter le cas du « miss » en lecture, ...) La donnée lue est disponible après l’étage DS, il faut donc insérer deux bulles pour pouvoir entrer la donnée valide devant l’ALU dans l’étage EX. Question 16 (1pts) Étudiez l’exécution d’un branchement. Est-ce que un effet retardé de 1 pour les branchements suffit à régler les problèmes ? Combien de delay slots faudrait-il supporter ? Justifiez votre réponse. Le calcul de la condition du saut se fait dans l’étage EX (cf question 13), il faut donc 3 cycles pour que le branchement soit effectif, puisqu’il y a une instruction dans IF, dans IS et dans RF. Question bonus : elle peut être faite même si vous n’avez pas répondu aux questions précédentes ! Question 17 (1pt) En utilisant des compilateurs optimiseurs efficaces, le CPI de la version 5 étages du R4000 est de 1,16 ; le CPI de la version 8 étages est de 1,54. De combien faut-il accélérer la fréquence d’horloge de la version 8 étages pour obtenir de meilleures performances ? Le résultat vous paraît-il vraisemblable ? 1.54 Le rapport 1.32 ≈ 1.33, donc il faut une fréquence 1.33 fois supérieure pour le que le R4000 soit concurrentiel. Or le ratio du nombre d’étage est de 1.6, donc on peut considérer que l’on peut multiplier la fréquence du R3000 par 1.6 en passant à 8 étages. Comme 1.33 < 1.6, le résultat est vraisemblable. Examen d’architecture - 2S page - 7