Chemin de données du processeur et exécution en pipeline

Découvre comment un processeur exécute réellement les instructions. Construis un chemin de données RISC-V monocycle à partir de registres, d’une unité arithmétique et logique, de mémoires et de multiplexeurs, conçois les signaux de commande qui le dirigent et suis le parcours d’instructions réelles avec des valeurs concrètes. Organise-le ensuite en un pipeline à cinq étages, calcule l’accélération et découvre comment le court-circuit, les blocages du pipeline, l’ordonnancement des instructions et la prédiction des branchements maintiennent le pipeline occupé malgré les aléas de données et de contrôle.

IntermédiaireUnité 4 sur 6 de la formation Formation : Architecture informatique : processeur, mémoire et RISC-V

Ce que tu vas apprendre

  1. Repère les unités matérielles dont un processeur RISC-V a besoin, relie-les pour que les instructions arithmétiques, les accès mémoire et les branchements s’achèvent chacun en un cycle d’horloge, puis suis le parcours d’instructions réelles dans le circuit obtenu.
    • Nomme les composants d’un chemin de données et explique comment l’horloge les synchronise
      Distingue les éléments combinatoires des éléments de mémorisation et décris le rôle du compteur ordinal, des mémoires, du banc de registres, de l’unité arithmétique et logique, du générateur de valeurs immédiates, des additionneurs et des multiplexeurs.
    • Relie les composants du chemin de données pour les instructions arithmétiques, les accès mémoire et les branchements
      Détermine les unités et les connexions utilisées par chaque classe d’instructions, puis réunis les parcours distincts en un seul chemin de données avec des multiplexeurs à leurs points de rencontre.
    • Suis le parcours des instructions dans le chemin de données monocycle
      Suis des instructions concrètes avec des valeurs réelles de registres et de mémoire dans chaque unité, donne les valeurs sur les fils essentiels et indique ce qui change sur le front d’horloge.
  2. Déduis les signaux de commande qui permettent au chemin de données d’exécuter chaque instruction, à l’aide d’une unité de commande principale pilotée par le code opération et d’une petite unité de commande de l’unité arithmétique et logique pilotée par les champs de fonction.
    • Détermine les signaux de commande principaux pour chaque instruction
      Explique le rôle de chaque signal de commande principal, construis la table de commande des instructions de type R, de chargement, de rangement et de branchement, et utilise correctement les valeurs indifférentes.
    • Génère la commande de l’unité arithmétique et logique à partir d’ALUOp et des champs de fonction
      Utilise le décodage à deux niveaux pour transformer ALUOp sur 2 bits et les champs funct7 et funct3 de l’instruction en code sur 4 bits qui sélectionne l’opération de l’unité arithmétique et logique.
  3. Explique comment le chevauchement des instructions augmente le débit, décris le chemin de données en pipeline à cinq étages avec ses registres de pipeline et sa commande, puis suis le parcours des instructions à l’aide de diagrammes de pipeline.
    • Explique pourquoi l’exécution en pipeline accélère un processeur
      Détermine la période d’horloge d’un circuit monocycle à partir de son chemin critique, puis calcule le débit, la latence et l’accélération d’une version en pipeline.
    • Décris le chemin de données en pipeline à cinq étages et ses registres de pipeline
      Explique ce que contiennent les registres de pipeline, comment les signaux de commande accompagnent chaque instruction et pourquoi chaque instruction traverse les cinq étages.
    • Suis le parcours des instructions à l’aide de diagrammes de pipeline
      Dessine et lis des diagrammes de pipeline sur plusieurs cycles, détermine quelle instruction se trouve dans chaque étage à un cycle donné et compte le nombre total de cycles avec et sans blocages.
  4. Repère les conflits entre instructions dans le pipeline et résous les aléas de données à l’aide du court-circuit, des blocages et de l’ordonnancement des instructions.
    • Repère les aléas et les dépendances de données qui les provoquent
      Classe les aléas en aléas structurels, de données ou de contrôle, repère les dépendances entre instructions et détermine celles qui provoquent des blocages dans un pipeline sans court-circuit.
    • Transmets les résultats par court-circuit pour éviter les blocages du pipeline
      Explique les chemins de court-circuit et les conditions de l’unité de court-circuit, puis détermine la provenance de chaque opérande de l’unité arithmétique et logique dans une séquence d’instructions donnée.
    • Bloque le pipeline en cas d’aléa de chargement-utilisation et ordonnance les instructions pour éviter ces aléas
      Détecte les aléas de chargement-utilisation, explique comment le pipeline insère une bulle et réordonne les instructions pour supprimer les blocages sans modifier le résultat du programme.
  5. Réduis le coût des branchements grâce à la résolution anticipée, à la purge du pipeline et à la prédiction statique ou dynamique des branchements, puis estime l’effet de tous les aléas réunis sur la performance du pipeline.
    • Réduis le coût des branchements dans le pipeline
      Explique pourquoi les branchements provoquent des aléas de contrôle, compare le blocage, la prédiction de branchement non pris et la résolution anticipée des branchements, et traite les exceptions comme un changement apparenté du flot de contrôle.
    • Prédis les branchements de manière dynamique à partir de leur historique
      Suis le fonctionnement des prédicteurs de branchement à 1 bit et à 2 bits, explique la table d’historique des branchements et le tampon des cibles de branchement, et repère les situations où les prédicteurs simples échouent.
    • Estime la performance du pipeline en tenant compte des aléas
      Combine les blocages dus aux aléas de chargement-utilisation et les pénalités de branchement pour obtenir un CPI effectif, calcule les temps d’exécution et compare les stratégies de traitement des branchements et les architectures de processeurs.

Chemin de données du processeur : cours

5 chapitres

1

Construis un chemin de données monocycle

Un processeur transforme les bits d’une instruction en modifications des registres, de la mémoire et de l’adresse de l’instruction suivante. Suis les composants qui effectuent ce travail, puis relie-les en parcours pour les opérations arithmétiques, les chargements, les rangements et les branchements. Des suivis concrets montrent les valeurs sur les fils et les modifications enregistrées à chaque front d’horloge. Le circuit utilise des registres RV64 et un petit ensemble d’instructions RISC-V de 4 octets, de sorte que chaque connexion a un rôle précis.

1.1 Repérer le matériel et la frontière entre les cycles d’horloge

Un chemin de données conserve et transforme les valeurs dont une instruction a besoin. L’unité de commande dirige ces valeurs et autorise les écritures. Ensemble, ils exécutent des instructions comme add, sub, and, or, ld, sd et beq.

Suivre les valeurs entre les fronts d’horloge

Un élément de mémorisation conserve une valeur : le compteur ordinal, le banc de registres et la mémoire de données en sont des exemples. Un élément combinatoire produit une sortie à partir de ses entrées actuelles. Les additionneurs, les multiplexeurs, l’unité arithmétique et logique et le générateur de valeurs immédiates effectuent ce travail sans conserver le résultat d’une instruction entre les cycles.

Sur le front actif de l’horloge, les éléments de mémorisation capturent leurs prochaines valeurs. Entre les fronts, leurs sorties alimentent la logique combinatoire. Le PC peut donc fournir l’adresse courante pendant tout un cycle et capturer l’adresse suivante à la fin de celui-ci. La lecture d’un élément de mémorisation ne l’écrase pas en elle-même.

Récupération et accès aux registres

Le compteur ordinal (PC) contient l’adresse de l’instruction. La mémoire d’instructions renvoie l’instruction de 32 bits située à cette adresse. Dans ce modèle, elle est en lecture seule pendant l’exécution du programme et associe une instruction à une adresse. Un additionneur distinct forme PC + 4, car les instructions de ce sous-ensemble occupent 4 octets.

Le banc de registres contient x0–x31. Deux ports de lecture reçoivent les numéros des registres sources rs1 et rs2 et renvoient leurs valeurs. Un port d’écriture reçoit la destination rd, les données à écrire et RegWrite. Les lectures sont combinatoires ; une écriture autorisée est enregistrée sur le front d’horloge. La lecture du registre x0 renvoie toujours zéro et les écritures dans ce registre sont ignorées. Les registres RV64 contiennent 64 bits. Une version RV32 utilise des registres de 32 bits et lw/sw, avec les mêmes connexions de base.

Calculer, sélectionner et accéder à la mémoire

L’unité arithmétique et logique additionne, soustrait ou effectue une opération bit à bit. Un code de commande sur 4 bits sélectionne l’opération. Sa sortie Zero vaut 1 lorsque le résultat est zéro ; une soustraction permet donc de tester si deux valeurs sont égales.

Le générateur de valeurs immédiates, ImmGen, reconstitue la valeur immédiate d’une instruction et effectue son extension de signe sur 64 bits. La copie du bit de signe conserve une valeur négative. La suite de 12 bits 1111 1111 1000 représente −8 ; une extension par des zéros la transformerait en 4 088 et enverrait une opération mémoire à la mauvaise adresse.

Un multiplexeur sélectionne une entrée. Les multiplexeurs choisissent le second opérande de l’unité arithmétique et logique, les données à écrire dans le registre et le prochain PC. Un multiplexeur modifie le chemin emprunté ; un signal d’activation d’écriture détermine si une valeur mémorisée change.

La mémoire de données possède des entrées d’adresse et de données à écrire, une sortie de données lues et les signaux de commande MemRead et MemWrite. Un chargement nécessite la récupération de l’instruction et l’accès aux données pendant le même cycle. Des mémoires d’instructions et de données distinctes assurent les deux accès. Des additionneurs distincts permettent aussi de calculer PC + 4 et la cible de branchement pendant que l’unité arithmétique et logique effectue d’autres opérations.

Les sorties inutilisées peuvent tout de même changer pendant un cycle. Une commande correcte garantit que seules les sorties sélectionnées atteignent les éléments de mémorisation dont l’écriture est autorisée. Une valeur calculée sur un fil non sélectionné n’a aucun effet sur le programme.

Points clés

  • Le chemin de données traite les valeurs ; les signaux de commande sélectionnent les chemins et autorisent les écritures.
  • Les éléments de mémorisation conservent les valeurs d’un front d’horloge à l’autre ; les éléments combinatoires transforment les entrées actuelles.
  • Le banc de registres possède deux ports de lecture et un port d’écriture, et la lecture de x0 renvoie toujours zéro.
  • L’extension de signe conserve la valeur signée d’une valeur immédiate.
  • Des mémoires et des additionneurs distincts permettent d’effectuer les opérations nécessaires simultanément dans un seul cycle.

1.2 Relier les parcours de chaque classe d’instructions

Commence par déterminer ce que chaque instruction doit lire et ce qu’elle doit modifier. Le chemin de données partagé réunit ces parcours, avec un multiplexeur partout où plusieurs valeurs possibles arrivent à une même entrée.

Récupérer l’instruction et décoder les champs

La récupération utilise le PC pour lire la mémoire d’instructions et calcule PC + 4 en parallèle. Le code opération occupe les bits 6–0. Lorsqu’ils sont présents, rd occupe les bits 11–7, funct3 les bits 14–12, rs1 les bits 19–15 et rs2 les bits 24–20 ; funct7 des instructions de type R occupe les bits 31–25. Les positions fixes des champs sources permettent de commencer les lectures des registres pendant le décodage de la commande de l’instruction. Un rangement ou un branchement n’a pas de champ rd : les bits 11–7 contribuent à sa valeur immédiate.

Comparer les parcours d’exécution
InstructionEntrées et opération de l’unité arithmétique et logiqueMémoire de donnéesRésultat enregistré
add x5, x6, x7x6 + x7Aucun accèsSomme dans x5
ld x5, 16(x6)x6 + 16Lecture à l’adresse effectiveDonnées de la mémoire dans x5
sd x5, 24(x6)x6 + 24Écriture de x5 à l’adresse effectiveModification de la mémoire
beq x8, x9, offsetx8 − x9Aucun accèsSélection du prochain PC

Pour un chargement, le résultat de l’unité arithmétique et logique est une adresse effective, l’adresse des données à lire. La sortie de la mémoire revient ensuite au banc de registres. Un rangement forme aussi une adresse avec l’unité arithmétique et logique, mais sa seconde valeur source circule séparément vers l’entrée de données à écrire de la mémoire. La sélection d’une valeur immédiate comme opérande de l’unité arithmétique et logique ne doit pas éliminer cette valeur à ranger. ImmGen reconstitue le déplacement du format S à partir de ses deux groupes de bits.

Un branchement effectue deux opérations en parallèle. L’unité arithmétique et logique soustrait les valeurs des registres comparés ; Zero indique si elles sont égales. L’additionneur de branchement ajoute le déplacement signé en octets au PC du branchement lui-même. Le codage du format B omet le bit de poids faible, qui vaut toujours zéro. ImmGen peut reconstituer le déplacement complet en octets, y compris ce zéro ; un schéma qui génère plutôt le déplacement en unités de demi-mots nécessite un décalage d’un bit vers la gauche. Le décalage doit apparaître exactement une fois dans le chemin.

Réunir les parcours avec des multiplexeurs

ALUSrc sélectionne soit la valeur de rs2, soit la valeur immédiate pour la seconde entrée de l’unité arithmétique et logique. MemtoReg sélectionne soit le résultat de cette unité, soit la sortie de la mémoire de données pour l’écriture en registre. PCSrc sélectionne PC + 4 ou la cible de branchement. Deux résultats concurrents nécessitent un sélecteur, et non un fil reliant directement leurs sorties.

Ces parcours expliquent pourquoi le chargement possède la chaîne la plus longue : la récupération, la lecture des registres, le calcul de l’adresse, la lecture de la mémoire et l’écriture dans le registre contribuent tous au délai. Une opération arithmétique contourne la mémoire de données ; un rangement contourne l’écriture en registre.

Étendre les parcours existants

addi x5, x6, 3 réutilise le parcours qui fournit une valeur immédiate à l’unité arithmétique et logique et celui qui écrit son résultat en registre. Elle nécessite une commande adaptée, mais aucune nouvelle unité dans le chemin de données. jal a une exigence supplémentaire : elle écrit PC + 4 dans rd tout en redirigeant le PC sans test d’égalité. Son sélecteur d’écriture en registre nécessite donc une entrée PC + 4, et la logique du prochain PC doit prendre en charge un saut inconditionnel.

Points clés

  • Un chargement écrit les données de la mémoire dans rd ; la sortie de l’unité arithmétique et logique est l’adresse.
  • Un rangement envoie rs2 à la mémoire pendant que l’unité arithmétique et logique additionne la base et le déplacement.
  • Un branchement compare les valeurs des registres et calcule PC + déplacement en parallèle.
  • ALUSrc, MemtoReg et PCSrc sélectionnent les chemins partagés.
  • La reconstitution du déplacement en octets du format B inclut exactement une fois le bit zéro implicite.
  • L’addition avec valeur immédiate réutilise le matériel existant ; le saut avec lien nécessite aussi un chemin d’écriture de PC + 4 en registre.

1.3 Suivre les valeurs et les changements d’état

Le suivi d’une instruction relie l’opération en langage d’assemblage aux valeurs réelles sur les fils. Distingue les valeurs calculées pendant le cycle de celles enregistrées sur le front d’horloge qui le termine.

Suivre un ordre constant
  1. Récupère l’instruction à l’adresse du PC courant et repère ses champs.
  2. Lis les registres sources et forme la valeur immédiate signée.
  3. Sélectionne les opérandes de l’unité arithmétique et logique et calcule le résultat.
  4. Effectue l’accès demandé à la mémoire de données.
  5. Sélectionne les données à écrire dans le registre et le prochain PC.
  6. Liste les écritures dans les éléments de mémorisation sur le front d’horloge.
Additionner deux valeurs de registres

À PC 400, add x5, x6, x7 a pour codage 0x007302B3. Ses champs sont le code opération 0110011, rd 5, funct3 000, rs1 6, rs2 7 et funct7 0000000. Avec x6 = 25 et x7 = −9, les ports de lecture produisent 25 et −9. ALUSrc sélectionne la valeur du second registre et l’unité arithmétique et logique produit 16. MemtoReg sélectionne 16 pour l’écriture en registre. Sur le front, x5 devient 16 et le PC devient 404. MemRead et MemWrite valent tous deux zéro.

Charger, puis ranger un double mot

À PC 404, considère ld x5, 16(x6) avec x6 = 1 000 et la mémoire contenant 42 à l’adresse 1 016. ImmGen produit 16. L’unité arithmétique et logique calcule l’adresse 1 016 et la mémoire de données renvoie 42. MemtoReg sélectionne cette valeur de la mémoire : x5 devient donc 42 et le PC devient 408 sur le front. Écrire 1 016 dans x5 reviendrait à confondre l’adresse avec la valeur qui y est stockée.

À PC 408, sd x5, 24(x6) lit x5 = 42 et x6 = 1 000. L’unité arithmétique et logique calcule 1 024 pendant que le chemin de rs2 fournit 42 à la mémoire. MemWrite autorise le rangement ; RegWrite vaut zéro. Sur le front, le double mot à l’adresse 1 024 devient 42 et le PC devient 412. L’adresse mémoire et la valeur à ranger circulent sur des fils différents.

Les déplacements sont mesurés en octets. Les adresses de début de doubles mots RV64 adjacents sont séparées de 8 octets : après le double mot à l’adresse 1 016, le suivant commence à 1 024. Avancer d’un octet ne permettrait pas d’atteindre le double mot suivant.

Décider d’un branchement

À PC 412, beq x8, x9, 12 compare x8 = 7 à x9 = 7. L’unité arithmétique et logique soustrait et obtient zéro. Branch vaut 1, donc Branch AND Zero vaut 1 et PCSrc sélectionne la cible de branchement. L’additionneur de branchement produit 424 en ajoutant 12 à 412. Seul le PC change.

Si x9 vaut 8 à la place, la soustraction produit −1 et Zero vaut 0. Le prochain PC est alors 416. Le déplacement codé est exprimé en unités de 2 octets : la quantité signée stockée pour ce déplacement de 12 octets est donc 6 ; le déplacement complet utilisé par l’additionneur reste 12.

Lire l’état pour l’instruction suivante

Chaque instruction monocycle accomplit son travail entre deux fronts d’horloge consécutifs. L’instruction suivante lit l’état enregistré par le front précédent. Ainsi, le rangement peut lire la nouvelle valeur de x5 issue du chargement au cycle suivant, sans court-circuit dans un pipeline. Chaque instruction prend un cycle d’horloge, ce qui donne un CPI de 1 pour le circuit monocycle, quel que soit le nombre d’unités matérielles utilisées par son parcours.

Points clés

  • Un suivi donne les valeurs numériques sur les fils et indique séparément les changements d’état sur le front d’horloge.
  • Une instruction arithmétique écrit un résultat de l’unité arithmétique et logique ; un chargement écrit la sortie de la mémoire.
  • Un rangement modifie la mémoire et le PC, sans écriture dans le banc de registres.
  • Pour beq, l’égalité sélectionne la cible calculée à partir du PC du branchement.
2

Conçois l’unité de commande du processeur monocycle

Le même matériel peut additionner deux registres, calculer une adresse mémoire ou comparer des valeurs pour un branchement. Les signaux de commande déterminent quelle opération compte à chaque cycle. Déduis ces signaux du travail qu’une instruction doit effectuer, y compris les signaux d’activation d’écriture qui protègent l’état mémorisé. Suis ensuite les deux niveaux de décodage qui transforment un code opération et des bits de fonction en une opération précise de l’unité arithmétique et logique, puis étends le circuit à l’addition avec valeur immédiate.

2.1 Déduire la table de commande principale

L’unité de commande principale transforme un code opération en signaux de sélection des chemins et en autorisations d’écriture. C’est une table de vérité combinatoire réalisée avec des portes logiques : une commande câblée.

Attribuer un rôle à chaque signal

RegWrite autorise une écriture dans rd. ALUSrc sélectionne la seconde entrée de l’unité arithmétique et logique : 0 pour rs2, 1 pour une valeur immédiate. MemRead et MemWrite demandent l’accès correspondant à la mémoire de données. MemtoReg sélectionne les données à écrire dans le registre : 0 pour le résultat de l’unité arithmétique et logique, 1 pour les données de la mémoire. Branch indique un branchement sur égalité. ALUOp sur 2 bits indique à l’unité de commande distincte de l’unité arithmétique et logique la classe d’opérations nécessaire.

PCSrc est différent : il dépend de l’instruction et des valeurs comparées. La commande principale active Branch et l’unité arithmétique et logique fournit Zero. Leur ET forme PCSrc ; un résultat arithmétique ordinaire égal à zéro ne peut donc pas provoquer à lui seul un branchement.

Construire la table à partir des opérations nécessaires
ClasseALUSrcMemtoRegRegWriteMemReadMemWriteBranchALUOp
Type R00100010
ld11110000
sd1X001000
beq0X000101

Pour ld, l’unité arithmétique et logique a besoin d’un déplacement immédiat, donc ALUSrc vaut 1. Les données chargées vont dans rd, donc MemtoReg et RegWrite valent tous deux 1. La mémoire est lue, pas écrite : MemRead = 1 et MemWrite = 0. Branch vaut 0, et ALUOp = 00 demande l’addition servant à calculer l’adresse.

Pour sd, l’unité arithmétique et logique ajoute aussi un déplacement, mais la destination est la mémoire. Fixe MemWrite = 1 et RegWrite = 0. MemRead reste à zéro : utiliser la mémoire ne signifie pas la lire. Pour beq, l’unité arithmétique et logique utilise les deux valeurs des registres et les soustrait, tandis que le PC est le seul élément de l’état architectural susceptible d’être mis à jour.

Utiliser les valeurs indifférentes uniquement lorsque les résultats sont ignorés

X est une valeur indifférente : les deux valeurs possibles du signal de sélection donnent le même comportement. MemtoReg peut valoir X pour un rangement ou un branchement, car RegWrite vaut zéro. L’entrée de données à écrire du banc de registres est ignorée ; le concepteur peut donc choisir la valeur de sélection qui simplifie le circuit.

Un signal d’activation d’écriture d’un élément de mémorisation ne peut pas être traité ainsi lorsqu’une écriture est interdite. Un MemWrite accidentel pendant une opération arithmétique peut altérer la mémoire, même si l’instruction arithmétique n’a pas autrement besoin de cette sortie mémoire. RegWrite et MemWrite doivent donc être explicitement à zéro pour les instructions qui n’effectuent pas ces écritures.

Ajouter une ligne pour l’arithmétique avec valeur immédiate

addi x5, x6, 3 prend son second opérande dans ImmGen et écrit la somme produite par l’unité arithmétique et logique. Sa ligne est ALUSrc 1, MemtoReg 0, RegWrite 1, MemRead 0, MemWrite 0, Branch 0, ALUOp 00. Son code opération 0010011 diffère du code opération de type R 0110011 ; la commande principale a donc besoin de cette ligne supplémentaire. La prise en charge de andi et ori nécessite aussi le décodage de leurs valeurs funct3 pour sélectionner l’opération.

Les noms des signaux dépendent du circuit. RegWEn, BSel et WBSel dans les schémas d’autres cours désignent des fonctions apparentées d’activation d’écriture et de sélection d’entrée. Lorsque tu lis un nouveau schéma, suis la définition d’un signal et les entrées de son multiplexeur.

Points clés

  • La commande principale déduit les sélections de chemins et les activations d’écriture du code opération.
  • PCSrc combine Branch avec l’indicateur Zero de l’unité arithmétique et logique.
  • Un rangement active MemWrite et désactive RegWrite et MemRead.
  • Un signal de sélection ne prend une valeur indifférente que lorsque la valeur qu’il sélectionne ne peut pas influer sur le comportement.
  • addi nécessite une nouvelle ligne pour son code opération, mais réutilise le chemin de données existant pour l’addition avec valeur immédiate.

2.2 Décoder l’opération de l’unité arithmétique et logique en deux niveaux

Le code opération seul ne permet pas de distinguer add de sub : les deux appartiennent à la classe de type R. La commande à deux niveaux détermine d’abord la classe, puis utilise les bits de fonction lorsqu’ils sont utiles.

D’ALUOp à l’opération

La commande principale fournit un signal ALUOp sur 2 bits parmi ses autres sorties. La commande de l’unité arithmétique et logique le combine avec funct3 et le bit 30 de l’instruction, qui fait partie de funct7, pour produire quatre bits de commande de l’opération.

ALUOpInformation supplémentaireCommande de l’unité arithmétique et logiqueOpération
00Bits de fonction ignorés0010Addition
01Bits de fonction ignorés0110Soustraction
10funct3 000, bit 30 = 00010Addition
10funct3 000, bit 30 = 10110Soustraction
10funct3 1110000ET
10funct3 1100001OU

Ces codes décrivent cette implémentation de l’unité arithmétique et logique, et non les codages d’instructions RISC-V. Les chargements et les rangements utilisent ALUOp 00, car ils additionnent une base et un déplacement. Les branchements sur égalité utilisent ALUOp 01, car la soustraction active Zero lorsque les opérandes sont égaux. Les instructions de type R utilisent ALUOp 10 et nécessitent un décodage supplémentaire.

Suivre une soustraction codée

sub x5, x6, x7 a pour codage 0x407302B3. Le code opération 0110011 indique le type R et sélectionne ALUOp 10. Son funct3 est 000, ce qui laisse l’addition et la soustraction comme possibilités. Le bit 30 vaut 1, issu de funct7 0100000 ; la commande de l’unité arithmétique et logique produit donc 0110 pour la soustraction.

Mettre ce bit de fonction à zéro donne le codage de l’addition correspondante 0x007302B3, avec funct7 0000000 et la commande 0010 de l’unité arithmétique et logique. La ligne de la commande principale reste la même, car les deux instructions utilisent deux entrées de registres, écrivent un résultat de l’unité arithmétique et logique et n’accèdent pas à la mémoire de données.

Réutiliser l’additionneur pour la soustraction

Dans l’unité arithmétique et logique classique, les lignes de commande représentent Ainvert, Bnegate et un sélecteur d’opération sur 2 bits. La soustraction utilise l’additionneur après inversion du second opérande et fourniture d’une retenue entrante de 1 :

a−b=a+b‾+1

Cette identité du complément à deux permet à l’addition et à la soustraction de partager le matériel. La différence de Bnegate explique les codes 0010 et 0110 ; elle ne nécessite pas de parcours arithmétique distinct pour chaque instruction.

Décoder les bits uniquement selon leur format

Pour ALUOp 00 ou 01, les positions des champs de fonction ne sélectionnent pas l’opération de l’unité arithmétique et logique. Le funct3 011 d’un chargement décrit un accès à un double mot. Les bits de poids fort des rangements et des branchements comprennent des bits de la valeur immédiate. Traiter ces positions comme des champs de fonction de type R reviendrait à confondre la formation d’adresse et le décodage arithmétique.

Pour une vérification rapide du type R, ALUOp 10 avec funct3 110 sélectionne 0001, l’opération OU. Ajouter une autre opération sous le même code opération peut ne nécessiter qu’une modification de la commande de l’unité arithmétique et logique si celle-ci prend déjà en charge l’opération. Une nouvelle classe d’instructions peut aussi nécessiter des modifications de la commande principale, comme pour l’arithmétique avec valeur immédiate.

Points clés

  • ALUOp sélectionne une classe d’opérations ; les bits de fonction de type R achèvent le décodage.
  • ALUOp 00 demande une addition et 01 demande une soustraction sans décodage des fonctions.
  • Dans ce circuit, 0010 sélectionne l’addition et 0110 sélectionne la soustraction.
  • Le bit 30 distingue add de sub lorsque funct3 vaut 000.
  • Le sens des champs de fonction dépend du format de l’instruction.
  • La soustraction en complément à deux réutilise l’addition avec un second opérande inversé et une retenue entrante de 1.
3

Organise le chemin de données en pipeline

Une longue période d’horloge monocycle doit permettre d’exécuter un chargement même lorsque l’instruction courante nécessite moins de travail. L’exécution en pipeline divise ce travail en étages et fait se chevaucher les instructions. Compare la période d’horloge, le débit et la latence obtenus, puis suis les données et les signaux de commande stockés entre les étages. Les diagrammes de pipeline rendent le chevauchement visible et permettent de compter directement les cycles de remplissage, de fonctionnement en régime établi et d’achèvement d’une courte séquence d’instructions.

3.1 Calculer la période d’horloge, la latence et le débit

Un processeur monocycle doit terminer son instruction la plus lente avant le front suivant. Les instructions plus rapides attendent tout de même la même période d’horloge fixe. L’exécution en pipeline modifie la quantité de travail que chaque période d’horloge doit contenir.

Déterminer la limite du circuit monocycle

Utilise les délais de composants suivants, sans tenir compte des multiplexeurs et des petits additionneurs : récupération 250 ps, lecture des registres 150 ps, unité arithmétique et logique 200 ps, mémoire de données 250 ps et écriture dans les registres 150 ps.

InstructionDélai du parcours
Type R250 + 150 + 200 + 150 = 750 ps
ld250 + 150 + 200 + 250 + 150 = 1 000 ps
sd250 + 150 + 200 + 250 = 850 ps
beq250 + 150 + 200 = 600 ps

Le chargement constitue le chemin critique et fixe la période à 1 000 ps, soit 1 ns. Cela correspond à une fréquence d’horloge de 1 GHz. Une répartition de 25 % de chargements, 10 % de rangements, 50 % d’instructions de type R et 15 % de branchements donne un délai de parcours pondéré de 800 ps. Pourtant, chaque instruction dispose de 1 000 ps, soit 1,25 fois cette moyenne. Un délai moyen ne peut pas fixer une période d’horloge qui doit aussi permettre l’exécution de l’instruction la plus longue.

Faire se chevaucher cinq étages

Le pipeline divise l’exécution en IF (récupération), ID (décodage et lecture des registres), EX (exécution ou calcul d’une adresse), MEM (accès à la mémoire de données) et WB (écriture dans un registre). Des instructions différentes occupent simultanément des étages différents.

Le débit compte les instructions achevées par unité de temps. La latence mesure le temps qu’une instruction passe entre son entrée et son achèvement. Une chaîne de montage peut terminer un article à chaque intervalle même si chaque article a besoin de plusieurs intervalles pour la traverser. La même distinction s’applique ici.

L’étage le plus lent prend 250 ps. Avec 20 ps de surcoût temporel des registres de pipeline, la période d’horloge est de 270 ps, soit environ 3,70 GHz. Une instruction traverse cinq périodes, ce qui prend 1 350 ps. Cela dépasse sa latence en monocycle, mais un pipeline rempli peut achever une instruction toutes les 270 ps.

Inclure le temps de remplissage et d’achèvement

Sans blocage, un pipeline à k étages exécute n instructions en k + n − 1 cycles. Pour cinq étages, cela donne n + 4. Quatre instructions nécessitent huit cycles, soit 2 160 ps, contre 4 000 ps dans le processeur monocycle. L’accélération est d’environ 1,85.

Pour 1 000 000 instructions, le pipeline nécessite 1 000 004 cycles, soit environ 270,0 μs. Le circuit monocycle nécessite 1 000 μs. L’accélération se rapproche du rapport 1 000/270, soit environ 3,70, à mesure que le coût fixe de remplissage et de vidange devient faible.

Une accélération parfaite d’un facteur cinq nécessiterait cinq étages de 200 ps de même durée, sans surcoût lié aux registres ni délai dû aux aléas. Des étages de durées inégales obligent les plus rapides à attendre le plus lent. Un plus grand nombre d’étages ajoute aussi du surcoût et peut augmenter le coût des aléas.

Les instructions de taille fixe de 32 bits de ce sous-ensemble simplifient la récupération. Les positions fixes des champs de registres facilitent ID, et la restriction des accès à la mémoire de données aux chargements et aux rangements convient à un calcul d’adresse en EX suivi de MEM. Ces propriétés de l’architecture du jeu d’instructions rendent les frontières entre étages pratiques.

Points clés

  • L’instruction complète la plus lente fixe la période d’horloge du circuit monocycle.
  • L’étage le plus lent et le surcoût lié aux registres fixent la période d’horloge du pipeline.
  • L’exécution en pipeline augmente le débit ; la latence d’une instruction peut augmenter.
  • Une séquence de n instructions sans aléa prend n + 4 cycles dans un pipeline à cinq étages.
  • Des étages de durées inégales, le surcoût lié aux registres, les séquences courtes et les aléas réduisent l’accélération.

3.2 Faire progresser chaque instruction dans les registres de pipeline

Plusieurs instructions partagent le chemin de données en même temps : chaque étage a donc besoin des valeurs de sa propre instruction. Les registres de pipeline conservent ces valeurs et leurs signaux de commande à chaque front d’horloge.

Associer le contenu au travail à venir
RegistreInformations transmises vers l’avant
IF/IDInstruction et son PC
ID/EXValeurs sources, valeur immédiate, PC, rs1, rs2, rd, bits de fonction, signaux de commande EX/MEM/WB
EX/MEMRésultat de l’unité arithmétique et logique, Zero, cible de branchement, valeur à ranger, rd, signaux de commande MEM/WB
MEM/WBDonnées de la mémoire, résultat de l’unité arithmétique et logique, rd, signaux de commande WB

Chaque registre porte le nom des étages qu’il relie. Il capture les sorties du premier étage pour les utiliser dans le second. Il n’y a pas de registre de pipeline supplémentaire après WB ; WB écrit dans l’état architectural. Le PC fournit l’état au début de la récupération.

Le contenu de EX/MEM ci-dessus correspond à une architecture qui utilise les informations de branchement en MEM. Une architecture qui résout les branchements en EX renvoie ces informations plus tôt à l’étage de récupération. L’étage de résolution détermine la pénalité due à l’aléa de contrôle.

Garder la destination et les données ensemble

Un chargement est décodé en ID mais écrit dans rd trois cycles plus tard en WB. À ce moment-là, IF/ID contient une instruction plus récente. Si le port d’écriture utilisait rd de cette instruction plus récente, la valeur chargée irait dans le mauvais registre. Le numéro de destination du chargement doit donc traverser ID/EX, EX/MEM et MEM/WB à côté de son résultat.

De même, un rangement transmet sa valeur de rs2 à travers ID/EX et EX/MEM. Son adresse et ses données doivent correspondre au même rangement lorsqu’elles atteignent la mémoire de données. Les registres de pipeline préservent l’identité d’une instruction grâce à ces valeurs associées, même si plusieurs autres instructions sont actives à proximité.

Transmettre la commande avec l’instruction

La commande est générée en ID. EX utilise ALUSrc et ALUOp ; MEM utilise Branch, MemRead et MemWrite ; WB utilise MemtoReg et RegWrite. Chaque étage transmet les signaux de commande nécessaires plus tard avec les données.

Si la commande de l’unité arithmétique et logique est décodée en EX, ID/EX doit transmettre le bit 30 et funct3 ainsi qu’ALUOp. Les opérations de type R partagent ALUOp 10 ; cette seule valeur ne peut donc pas distinguer add, sub, ET et OU. Une autre architecture valide décode l’opération complète sur 4 bits en ID et transmet ce code à la place.

Garder un passage régulier dans les étages

Une instruction de type R traverse MEM sans utiliser la mémoire de données. Un rangement traverse WB sans écrire dans un registre. Faire passer toutes les instructions par les cinq mêmes étages préserve l’ordre des écritures dans les registres. Si une instruction de type R sautait MEM, elle pourrait atteindre l’unique port d’écriture des registres pendant le même cycle que le chargement qui la précède immédiatement.

Le banc de registres sert WB et ID pendant un même cycle en écrivant pendant la première moitié et en lisant pendant la seconde. ID peut alors voir une valeur écrite par une instruction plus ancienne pendant ce cycle. Des mémoires d’instructions et de données distinctes permettent à IF et MEM de fonctionner simultanément.

La plupart des informations progressent dans le pipeline. L’écriture en registre renvoie un résultat au banc de registres, et la commande de branchement renvoie une décision sur le prochain PC à la récupération. Ces longs chemins de retour expliquent pourquoi les instructions ultérieures peuvent avoir besoin d’aide avant qu’une instruction plus ancienne soit terminée.

Points clés

  • Les registres de pipeline conservent les données et les signaux de commande encore nécessaires pour chaque instruction.
  • rd est transmis jusqu’à WB avec le résultat qui doit y être écrit.
  • EX a besoin des bits de fonction ou d’un code de commande de l’unité arithmétique et logique déjà décodé.
  • Toutes les instructions suivent le parcours à cinq étages, même lorsqu’un étage n’effectue aucun travail.
  • L’écriture pendant la première moitié et la lecture pendant la seconde permettent à WB de fournir une valeur à ID au cours du même cycle.
  • Des mémoires distinctes permettent la récupération simultanée d’une instruction et l’accès aux données.

3.3 Lire les diagrammes de pipeline et compter les cycles

Un diagramme de pipeline rend le chevauchement explicite. Les lignes présentent les instructions dans l’ordre du programme et les colonnes représentent les cycles d’horloge. Chaque case indique l’étage occupé par l’instruction pendant ce cycle.

Construire un escalier

Pour cinq instructions indépendantes, inscris IF pour I1 au cycle 1, puis ID, EX, MEM et WB aux cycles 2–5. Commence I2 un cycle plus tard et répète l’opération. Les noms des étages forment un escalier en diagonale.

Instruction123456789
I1IFIDEXMEMWB
I2IFIDEXMEMWB
I3IFIDEXMEMWB
I4IFIDEXMEMWB
I5IFIDEXMEMWB

Au cycle 5, I1 est en WB, I2 en MEM, I3 en EX, I4 en ID et I5 en IF. Lire une colonne de haut en bas donne une vue à un cycle donné. Suivre une ligne donne l’historique d’une instruction.

Numérote les étages de IF = 1 à WB = 5. Sans blocage, l’instruction i atteint l’étage s au cycle i + s − 1. I3 atteint donc MEM au cycle 6. La dernière case WB donne le cycle d’achèvement : cinq instructions se terminent au cycle 9.

Ajouter des valeurs à une vue à un cycle donné

Soit I1 l’instruction ld x5, 16(x6), avec x6 = 1 000 et la mémoire contenant 42 à l’adresse 1 016. Soit I2 une addition indépendante, I3 une soustraction indépendante et I4 une opération OU indépendante. Au cycle 4, le chargement lit la mémoire à l’adresse 1 016, I2 utilise l’unité arithmétique et logique, I3 lit les registres et I4 est récupérée. Au cycle 5, le chargement écrit 42 dans x5. Une colonne contient le travail de plusieurs instructions, et non plusieurs étages du chargement.

Représenter un blocage sans arrêter les instructions plus anciennes

Utilise maintenant ld x10, 0(x20) suivie de add x11, x10, x12, puis d’une instruction indépendante. Avec le court-circuit, l’instruction consommatrice immédiate nécessite toujours un blocage :

  • Le chargement occupe IF au cycle 1, ID au cycle 2, EX au cycle 3, MEM au cycle 4 et WB au cycle 5.
  • L’instruction add occupe IF au cycle 2, ID au cycle 3, encore ID au cycle 4, EX au cycle 5, MEM au cycle 6 et WB au cycle 7.
  • La troisième instruction occupe IF au cycle 3, encore IF au cycle 4, ID au cycle 5, EX au cycle 6, MEM au cycle 7 et WB au cycle 8.

L’instruction add attend en ID pendant qu’une bulle traverse EX. Le chargement continue normalement ; le figer retarderait précisément la valeur dont add a besoin. Chaque instruction plus récente est retardée avec add.

Compter la séquence une seule fois

Un pipeline à cinq étages nécessite n + 4 cycles sans blocage. Chaque blocage inséré ajoute un cycle, ce qui donne n + 4 + nombre de blocages lorsqu’il n’y a pas d’autres pertes. L’exemple à trois instructions se termine au cycle 8 : trois instructions, quatre intervalles supplémentaires pour les étages et un blocage.

Les quatre premiers cycles remplissent le pipeline et les quatre derniers le vident. Ce sont deux façons de voir le même déroulement en n + 4 cycles, et non deux ajouts distincts de quatre cycles. Pour une longue séquence, leur contribution fixe est faible ; pour une courte séquence, elle peut dominer l’accélération.

Points clés

  • Les lignes suivent une instruction ; les colonnes montrent les opérations simultanées.
  • Sans blocage, l’instruction i occupe l’étage s au cycle i + s − 1.
  • Un blocage répète ID et suspend la récupération des instructions plus récentes pendant que les instructions plus anciennes avancent.
  • Le nombre total de cycles est n + 4 + nombre de blocages pour un pipeline à cinq étages sans autre perte.
4

Détecte et résous les aléas de données

Le chevauchement des instructions peut rendre une valeur nécessaire avant que l’instruction qui la produit l’ait écrite dans le banc de registres. Repère l’instruction qui produit réellement chaque opérande source, puis suis les chemins de court-circuit qui transmettent les nouveaux résultats aux instructions ultérieures. Les chargements révèlent la limite temporelle du court-circuit : leurs données arrivent trop tard pour une instruction consommatrice immédiate. Suis le blocage nécessaire et découvre comment déplacer des instructions indépendantes peut supprimer l’attente tout en conservant le résultat du programme.

4.1 Repérer les dépendances qui peuvent retarder l’exécution

Un aléa empêche l’instruction suivante de s’exécuter au cycle prévu. Pour le diagnostiquer, repère la ressource ou la valeur nécessaire, le cycle où elle est nécessaire et celui où elle devient disponible.

Distinguer trois types d’aléas
TypeConflitExemple
StructurelDemande simultanée d’une même ressourceIF et MEM ont besoin d’une seule mémoire à un port
DonnéesUne valeur nécessaire n’est pas prêteUne soustraction a besoin du résultat de l’addition précédente
ContrôleLa bonne adresse suivante n’est pas encore déterminéeLa récupération continue avant la décision d’un branchement

Des mémoires d’instructions et de données distinctes suppriment le conflit structurel entre IF et MEM. Écrire dans le banc de registres pendant la première moitié d’un cycle et le lire pendant la seconde permet aussi à WB et ID de le partager. Avec ces dispositions, il ne reste aucun aléa structurel dans ce modèle à cinq étages.

Repérer l’instruction qui produit réellement la valeur

Une dépendance de lecture après écriture (RAW) existe lorsqu’une instruction ultérieure lit une valeur écrite par une instruction précédente. Dans add x1, x2, x3 suivie de sub x4, x1, x5, l’instruction add produit x1 et l’instruction sub la consomme. Sans aide, sub lit x1 en ID au cycle 3, avant que add l’écrive en WB au cycle 5.

Une dépendance d’écriture après lecture (WAR) réutilise un registre après qu’une instruction plus ancienne l’a lu. Une dépendance d’écriture après écriture (WAW) donne la même destination à deux instructions. Ces dépendances de nom ne provoquent pas d’aléas dans le circuit à cinq étages exécuté dans l’ordre : les lectures ont lieu en ID et les écritures en WB dans l’ordre du programme. Elles comptent lorsqu’on détermine si le logiciel peut réordonner les instructions.

Suivre une séquence avec des destinations répétées

Considère :

ld  x5, 0(x10)
add x6, x5, x7
sub x5, x8, x9
or  x9, x6, x5

Les liens RAW sont chargement → addition par x5, addition → OU par x6 et soustraction → OU par x5. L’opération OU a besoin de la nouvelle valeur de x5 produite par la soustraction, et non de l’ancienne valeur chargée. Chercher uniquement des noms de registres identiques peut masquer ce changement d’instruction productrice.

La soustraction écrit x5 après que l’addition a lu x5 : c’est une dépendance WAR. Le chargement et la soustraction ont aussi une dépendance WAW sur x5. L’opération OU écrit x9 après que la soustraction l’a lu : c’est une autre dépendance WAR. Aucune ne crée d’aléa matériel WAR ou WAW dans ce pipeline exécuté dans l’ordre.

Compter les attentes sans court-circuit

Avec le seul banc de registres où l’écriture précède la lecture, une instruction consommatrice immédiate nécessite deux cycles de blocage. Elle doit retarder sa lecture en ID du cycle 3 au cycle 5. Une instruction indépendante entre la productrice et la consommatrice réduit l’attente à un blocage. Deux instructions indépendantes permettent à la consommatrice d’atteindre ID pendant le cycle WB de la productrice, sans blocage.

Une dépendance est une propriété du programme ; le fait qu’elle crée un blocage dépend du moment des opérations et des chemins disponibles. Une dépendance RAW éloignée peut ne nécessiter aucune intervention. Le registre x0 ne fournit jamais de résultat en attente, car sa lecture renvoie toujours zéro et il ignore les écritures.

Le logiciel peut insérer des instructions nop ou déplacer des instructions indépendantes dans les intervalles d’attente. Le matériel peut transmettre les résultats par court-circuit ou insérer automatiquement des blocages. Les deux approches doivent permettre à chaque instruction consommatrice de recevoir la valeur écrite par son instruction productrice dans l’ordre du programme.

Points clés

  • Les aléas structurels, de données et de contrôle correspondent à différents types de conflits.
  • Une dépendance RAW repère une instruction productrice dont la valeur est lue par une instruction ultérieure.
  • Seules les dépendances RAW créent des aléas de données dans ce circuit à cinq étages exécuté dans l’ordre.
  • L’écriture précédente la plus proche dans un registre source fournit la valeur nécessaire.
  • Sans court-circuit, une instruction consommatrice adjacente attend deux cycles ; une instruction intermédiaire réduit l’attente à un cycle.
  • Les dépendances WAR et WAW limitent néanmoins les réordonnancements valides par le logiciel.

4.2 Sélectionner la valeur disponible la plus récente par court-circuit

Un résultat de l’unité arithmétique et logique existe avant d’être écrit dans le banc de registres. Le court-circuit, aussi appelé transmission par court-circuit, dirige ce résultat directement vers l’entrée d’une instruction ultérieure, sans attendre son passage par le banc de registres.

Sélectionner la source de chaque opérande

Deux multiplexeurs alimentent les chemins d’exécution. ForwardA sert rs1 et ForwardB sert rs2. Chaque opérande est vérifié indépendamment.

Code de sélectionSource de la valeur
00Valeur du registre transmise dans ID/EX
10Résultat de l’unité arithmétique et logique transmis dans EX/MEM
01Valeur à écrire en registre transmise dans MEM/WB

Le chemin depuis EX/MEM atteint l’instruction immédiatement suivante. Le chemin depuis MEM/WB atteint une instruction située deux places plus loin et peut transmettre soit un résultat de l’unité arithmétique et logique, soit des données chargées. ForwardB alimente aussi le chemin des données à ranger avant qu’ALUSrc choisisse entre cette valeur et une valeur immédiate.

Vérifier l’autorisation, la destination et la correspondance

Pour ForwardA = 10, l’instruction dans EX/MEM doit avoir RegWrite = 1, un rd non nul et un rd égal à ID/EX.rs1. Remplace rs1 par rs2 pour le test de ForwardB. Un rangement ou un branchement ne doit pas être considéré comme une instruction productrice simplement parce que ses bits ressemblent à un numéro de destination. Les écritures dans x0 ne doivent pas non plus devenir des valeurs transmises par court-circuit.

Pour ForwardA = 01, effectue les vérifications correspondantes de RegWrite, de rd non nul et de correspondance des registres sur MEM/WB. Utilise ce résultat plus ancien uniquement si EX/MEM ne fournit pas déjà l’opérande nécessaire. ForwardB suit indépendamment la même règle de priorité.

Suivre un résultat auprès des instructions consommatrices suivantes

Commence par add x1, x2, x3, avec x2 = 10 et x3 = 5. Cette instruction produit 15 à la fin de EX au cycle 3.

  • L’instruction suivante, sub x4, x1, x5, atteint EX au cycle 4. Avec x5 = 3, ForwardA = 10 fournit 15 et la soustraction donne 12.
  • and x6, x7, x1 atteint EX au cycle 5. ForwardB = 01 prend x1 dans MEM/WB.
  • or x8, x1, x9 lit les registres en ID au cycle 5, après l’écriture de add pendant la première moitié du cycle. Elle n’a pas besoin de court-circuit en EX.

Aucun blocage n’est nécessaire pour ces dépendances portant sur un résultat de l’unité arithmétique et logique. L’instruction consommatrice reçoit la valeur lorsqu’elle utilise cette unité, même si sa lecture précédente en ID a obtenu une valeur périmée.

Résoudre deux correspondances avec des instructions qui écrivent

Dans les trois instructions consécutives add x1, x1, x2, add x1, x1, x3 et add x1, x1, x4, EX/MEM et MEM/WB correspondent tous deux à rs1 de la troisième instruction. EX/MEM contient le résultat de la deuxième instruction add, la valeur de x1 la plus récente. MEM/WB contient le résultat de la première instruction add et ne doit pas être prioritaire.

Les mêmes chemins permettent à add x5, x6, x7 d’alimenter sd x5, 0(x8) sans blocage. La valeur x5 transmise par court-circuit atteint le chemin des données à écrire dans la mémoire pendant que l’unité arithmétique et logique du rangement utilise le déplacement immédiat.

Le court-circuit ne peut pas fournir des données avant qu’elles existent. Pour un chargement, EX/MEM contient son adresse, et non la valeur chargée. L’instruction consommatrice immédiate doit attendre que le chargement termine MEM ; transmettre l’adresse par court-circuit conduirait à calculer sans avertissement avec la mauvaise quantité.

Points clés

  • Le court-circuit transmet directement un résultat à une instruction ultérieure avant son écriture en registre.
  • 00 sélectionne ID/EX, 10 sélectionne EX/MEM et 01 sélectionne MEM/WB.
  • Chaque correspondance de court-circuit exige RegWrite, un rd non nul et un numéro source correspondant.
  • EX/MEM est prioritaire sur MEM/WB pour un même opérande.
  • ForwardB peut fournir les données à ranger ainsi qu’un opérande de registre à l’unité arithmétique et logique.
  • Une instruction qui consomme immédiatement le résultat d’un chargement nécessite encore un blocage, car les données ne sont pas encore prêtes.

4.3 Insérer une bulle ou remplir l’intervalle avec du travail utile

Un chargement produit les données à la fin de MEM. L’instruction qui le suit immédiatement aurait besoin de ces données au début de EX pendant le même cycle. Un blocage décale l’étage EX de l’instruction consommatrice au cycle suivant, lorsque MEM/WB peut fournir la valeur.

Détecter la valeur manquante en ID

L’unité de détection des aléas examine l’instruction en EX et l’instruction en cours de décodage. Le test de base vérifie que ID/EX.MemRead = 1 et que ID/EX.rd correspond à l’un des champs de numéro source dans IF/ID. Un test affiné exclut rd = x0 et vérifie quels champs sources l’instruction décodée lit réellement.

Cette dernière vérification évite un blocage injustifié sur une instruction de type I dont les bits de valeur immédiate occupent la position habituelle de rs2. Comparer les positions brutes des champs est sans danger, mais peut retarder une instruction qui ne lit pas réellement le registre.

Retenir les instructions plus récentes et faire avancer le chargement

Le blocage effectue trois actions coordonnées :

  1. Mettre à zéro les signaux de commande entrant dans ID/EX, en insérant une bulle.
  2. Fixer PCWrite = 0 pour conserver l’adresse de récupération inchangée.
  3. Fixer IF/IDWrite = 0 pour conserver l’instruction qui attend en ID.

Le chargement et les instructions plus anciennes continuent d’avancer. La bulle traverse les étages suivants sans écrire dans les registres ou la mémoire. Figer ID/EX alors qu’il contient encore le chargement répéterait celui-ci au lieu d’insérer une opération vide.

Pour ld x10, 0(x20) suivie de add x11, x10, x12, le chargement est en EX et l’instruction add en ID pendant le cycle 3. Au cycle 4, le chargement est en MEM, la bulle en EX et add toujours en ID. Au cycle 5, le chargement est en WB et add atteint EX avec ForwardA = 01.

Ordonnancer des instructions indépendantes

Considère :

ld  x10, 0(x20)
ld  x11, 8(x20)
add x12, x10, x11
sd  x12, 24(x20)
ld  x13, 16(x20)
add x14, x10, x13
sd  x14, 32(x20)

Les utilisations de x11 et x13 suivent immédiatement leurs chargements. Avec le court-circuit, elles provoquent deux blocages, ce qui donne 7 + 4 + 2 = 13 cycles. Déplace ld x13, 16(x20) en troisième position, avant la première instruction add. Elle sépare le chargement de x11 de l’instruction qui le consomme et place x13 suffisamment loin devant l’instruction qui le consomme. La séquence prend maintenant 7 + 4 = 11 cycles.

Le déplacement est valide, car le chargement lit x20, que les instructions franchies ne modifient pas. Sa destination x13 n’affecte pas ces instructions. Son adresse x20 + 16 est distincte de l’adresse x20 + 24 du rangement franchi. Un chargement ne peut pas être déplacé avant un rangement susceptible d’écrire les octets qu’il lit. Le réordonnancement doit préserver les dépendances RAW, WAR, WAW et mémoire.

Combiner blocages et court-circuit

Pour ld x5, 0(x10), add x6, x5, x7, sub x5, x8, x9 et or x9, x6, x5, seule la paire immédiate de chargement-utilisation provoque un blocage. Lorsque l’opération OU atteint EX, ForwardA = 01 fournit x6 de l’addition et ForwardB = 10 fournit x5 de la soustraction. Le total est de 4 + 4 + 1 = 9 cycles.

Points clés

  • Une paire chargement-utilisation nécessite un blocage avec le court-circuit.
  • Un blocage met à zéro les signaux de commande entrant dans ID/EX et fige le PC et IF/ID.
  • Le chargement continue dans MEM pendant que l’instruction consommatrice attend en ID.
  • L’ordonnancement d’instructions indépendantes peut séparer les chargements des instructions qui consomment leurs résultats.
  • Un réordonnancement valide préserve les dépendances entre registres et les dépendances mémoire.
  • Après un blocage, sélectionne chaque opérande transmis par court-circuit depuis l’instruction qui l’a réellement produit.
  • Pour ces séquences à cinq étages, le nombre de cycles est égal au nombre d’instructions + 4 + nombre de blocages.
5

Traite les aléas de contrôle et prédis les branchements

Un branchement fait dépendre l’adresse de l’instruction suivante d’opérations encore en cours dans le pipeline. Suis ce qui se passe lorsque la récupération attend, prédit l’adresse suivante ou corrige une erreur de prédiction. Suis le fonctionnement des prédicteurs fondés sur l’historique et distingue leurs prédictions de direction des cibles de branchement enregistrées. Enfin, combine les délais de chargement-utilisation et les pénalités de branchement avec la période d’horloge pour comparer les temps d’exécution, en tenant compte des compromis introduits par les pipelines plus profonds.

5.1 Traiter les branchements et les exceptions

La récupération a besoin d’une nouvelle adresse à chaque cycle. Un branchement conditionnel ne fournit le bon choix qu’après sa comparaison et le calcul de sa cible. Ce décalage crée un aléa de contrôle.

Relier l’étage de résolution à la pénalité

Dans un pipeline à cinq étages avec redirection après l’étage de résolution, une issue connue à la fin de ID fait perdre un créneau de récupération en cas d’erreur de prédiction. Une résolution à la fin de EX en fait perdre deux ; à la fin de MEM, elle en fait perdre trois. Des instructions plus récentes sont déjà entrées pendant ces créneaux.

Une stratégie consiste à bloquer la récupération jusqu’à la décision de chaque branchement. Elle est simple, mais les branchements pris et non pris subissent tous deux l’attente complète. La stratégie prédire que le branchement n’est pas pris continue à PC + 4. Une prédiction correcte ne nécessite aucune correction. Un branchement pris redirige la récupération et abandonne les instructions plus récentes du chemin séquentiel.

Suivre un branchement pris

Récupère beq x1, x2, 16 à l’adresse 100 au cycle 1 et résous le branchement à la fin de EX au cycle 3. La prédiction de branchement non pris récupère les instructions aux adresses 104 et 108 aux cycles 2 et 3. Si le branchement est pris, ces deux instructions appartiennent au mauvais chemin. La récupération commence à l’adresse 116 au cycle 4, après une pénalité de deux cycles.

Une purge du pipeline empêche ces entrées plus récentes de modifier l’état architectural ou de déclencher des exceptions. L’implémentation peut invalider les entrées ou neutraliser leurs signaux de commande et leurs effets sur les exceptions. Un rangement du mauvais chemin ne doit jamais aboutir à une écriture effective en mémoire.

Une bulle n’est pas la même chose qu’une instruction RISC-V dont tous les bits sont à zéro. Le codage entièrement nul est illégal. Si un véritable codage d’instruction est inséré, le nop canonique est addi x0, x0, 0, codé par 0x00000013. Une entrée de pipeline annulée ne représente, elle, aucune instruction exécutée.

Résoudre plus tôt, mais obtenir les opérandes plus tôt

Déplacer le comparateur et l’additionneur de la cible de branchement en ID réduit la pénalité de redirection à un cycle. La comparaison a désormais besoin des valeurs sources en ID ; le seul court-circuit habituel vers EX ne suffit donc pas. Avec un court-circuit adapté vers ID, un branchement placé immédiatement après l’instruction arithmétique ou logique qui produit sa valeur attend un cycle. Immédiatement après un chargement producteur, il en attend deux. Une résolution plus précoce réduit le nombre de créneaux de récupération perdus, mais rend l’acheminement des opérandes plus exigeant.

La prédiction statique fixe une règle à l’avance. Les règles courantes sont toujours non pris, toujours pris, et pris vers l’arrière ou non pris vers l’avant. Un branchement vers l’arrière à la fin d’une boucle répète souvent la boucle, ce qui fait de cette direction un indice utile.

RISC-V ne possède pas de case de délai de branchement. Si un branchement est pris, son successeur séquentiel n’est pas exécuté simplement parce qu’il a été récupéré. Certaines anciennes architectures MIPS exécutaient ce successeur comme instruction d’une case de délai définie ; c’est une règle différente de l’architecture du jeu d’instructions.

Préserver une frontière d’exception précise

Une instruction illégale ou ecall transfère le contrôle à un gestionnaire. Les instructions plus anciennes se terminent ; l’instruction fautive et les instructions plus récentes ne valident pas leurs effets normaux. Le processeur enregistre le PC de l’instruction fautive et la cause, à l’aide de registres comme sepc/scause en mode superviseur ou mepc/mcause en mode machine, puis récupère les instructions à l’adresse du gestionnaire. Cette exception précise présente l’état comme une frontière entre les instructions plus anciennes terminées et les opérations ultérieures non achevées.

Points clés

  • Une résolution plus tardive du branchement laisse davantage d’instructions plus récentes à abandonner.
  • La prédiction de branchement non pris ne subit une pénalité de correction que lorsque la prédiction est fausse.
  • Une purge du pipeline supprime les changements d’état et les exceptions du mauvais chemin.
  • Des bits d’instruction tous à zéro sont illégaux ; le nop canonique est 0x00000013.
  • Une résolution anticipée en ID nécessite aussi des opérandes plus tôt et un court-circuit adapté.
  • RISC-V ne possède pas de case de délai de branchement dans son architecture.
  • Les exceptions précises préservent les opérations plus anciennes achevées et écartent les effets de l’instruction fautive et des instructions plus récentes.

5.2 Suivre les prédictions de branchement fondées sur l’historique

La prédiction dynamique apprend à partir des issues observées pendant l’exécution d’un programme. Une table d’historique des branchements (BHT) stocke de petites entrées d’état sélectionnées à l’aide de bits d’une adresse de branchement. Prédis d’abord, compare plus tard avec l’issue réelle, puis mets l’entrée à jour.

Comprendre pourquoi un bit se trompe deux fois dans une boucle

Un prédicteur à 1 bit mémorise l’issue précédente. Si le dernier branchement était pris, il prédit qu’il sera pris la prochaine fois ; sinon, il prédit qu’il ne sera pas pris. Pour une boucle exécutée à répétition dont le branchement est pris neuf fois puis non pris une fois, la sortie laisse le bit à non pris.

À l’exécution suivante, le premier branchement pris est mal prédit. Les branchements pris intermédiaires font passer le bit à pris, de sorte que la sortie finale non prise est elle aussi mal prédite. En régime établi, cela fait deux erreurs pour dix issues, soit 80 % de réussite.

Ajouter un second bit pour maintenir la prédiction

Un compteur saturant à 2 bits possède les états de 0 à 3. Les états 0 et 1 prédisent que le branchement n’est pas pris ; 2 et 3 prédisent qu’il est pris. Une issue prise incrémente le compteur et une issue non prise le décrémente. Les valeurs s’arrêtent à 0 et 3.

ÉtatNomPrédiction
0Fortement non prisNon pris
1Faiblement non prisNon pris
2Faiblement prisPris
3Fortement prisPris

Depuis l’état 3, une sortie non prise fait passer l’état à 2, qui prédit toujours que le branchement est pris. La prochaine entrée dans la boucle est donc prédite correctement. Pour cette même boucle de dix issues, il y a une erreur par exécution en régime établi, soit 90 % de réussite. Deux issues contraires consécutives sont nécessaires pour inverser une prédiction à partir d’un état fort.

Suivre les prédictions avant la mise à jour

Pars de l’état 1 et observe pris, pris, non pris, pris :

  1. L’état 1 prédit non pris : incorrect. Incrémente à 2.
  2. L’état 2 prédit pris : correct. Incrémente à 3.
  3. L’état 3 prédit pris : incorrect. Décrémente à 2.
  4. L’état 2 prédit pris : correct. Incrémente à 3.

Il y a deux erreurs et l’état final est 3. Mettre à jour avant de prédire donnerait à tort au prédicteur accès à l’issue qu’il est censé deviner.

Distinguer direction, cible et interférence

Deux adresses de branchement peuvent indexer la même entrée de la table d’historique des branchements. Cette collision permet à leurs issues d’interférer. Une erreur de prédiction coûte des cycles, mais la correction vérifie l’issue réelle et préserve la justesse du résultat.

Un tampon des cibles de branchement (BTB) fournit une adresse, et pas seulement un bit de direction. Consulté avec le PC pendant IF, il peut fournir la cible prédite d’un branchement pris pour le cycle de récupération suivant, avant le décodage. La prédiction de direction décide d’utiliser ou non cette cible.

Un historique simple a ses limites. Pour une alternance stricte pris/non pris, un prédicteur à 1 bit se trompe constamment une fois qu’il suit cette alternance. Un compteur à 2 bits a raison au plus une fois sur deux ; s’il commence à l’état 1 avant une issue prise, il se trompe à chaque fois. Les prédicteurs à corrélation ajoutent l’historique des branchements récents, les prédicteurs à tournoi choisissent entre des prédicteurs, et une pile des adresses de retour prédit les cibles des retours de procédure. Les pipelines plus profonds rendent la correction plus coûteuse, car davantage d’opérations plus récentes s’accumulent avant la résolution.

Points clés

  • Un prédicteur à 1 bit répète la dernière issue.
  • Un compteur à 2 bits prédit que le branchement est pris dans les états 2 et 3 et sature à 0 et 3.
  • La prédiction utilise l’ancien état ; la mise à jour suit l’issue réelle.
  • Deux bits évitent l’erreur à l’entrée de la boucle provoquée par une seule sortie.
  • Une collision dans la table d’historique des branchements permet à différents branchements de perturber une même entrée d’historique.
  • Un tampon des cibles de branchement fournit une cible prédite ; la prédiction de direction décide de l’utiliser ou non.

5.3 Passer des taux d’aléas au temps d’exécution

La vitesse du pipeline dépend à la fois de la période d’horloge et des cycles passés à attendre ou à corriger une erreur. Le CPI effectif mesure ces cycles supplémentaires en moyenne sur le flux d’instructions.

Pondérer chaque coût par les instructions touchées

Pour une longue séquence à émission simple, pars du CPI idéal de 1. Ajoute chaque source distincte et non chevauchante de cycles perdus sous la forme de la fraction d’instructions touchées multipliée par le nombre de cycles perdus par événement. Un taux conditionnel nécessite aussi la fraction dont il dépend.

Supposons que 25 % des instructions soient des chargements et que 40 % de ces chargements soient suivis d’une instruction consommatrice immédiate. Chaque paire de ce type subit un blocage, donc la contribution des aléas de chargement-utilisation est de 0,25 × 0,40 × 1 = 0,10 cycle par instruction. Supposons que 15 % des instructions soient des branchements, que 10 % de ces branchements soient mal prédits et que la correction coûte deux cycles. La contribution des branchements est de 0,15 × 0,10 × 2 = 0,03.

L’addition des coûts indépendants donne CPI = 1 + 0,10 + 0,03 = 1,13. Imputer un blocage à chaque chargement donnerait 0,25 au lieu de 0,10. Appliquer le taux d’erreur de 10 % des branchements à chaque instruction conduirait de même à un décompte trop élevé.

Inclure la période d’horloge et le nombre d’instructions

Le temps d’exécution est égal au nombre d’instructions exécutées × CPI × période d’horloge. Une horloge à 4 GHz a une période de 0,25 ns. Pour 10⁹ instructions avec un CPI de 1,13, l’exécution prend 10⁹ × 1,13 × 0,25 ns = 0,2825 s. Le temps moyen par instruction est de 0,2825 ns.

Pour une courte séquence, compte explicitement les cycles de remplissage, de vidange et d’aléas. Le CPI de base idéal de 1 décrit le débit en régime établi ; un pipeline à cinq étages qui n’exécute que quelques instructions comporte aussi une contribution de quatre cycles pour son remplissage et l’achèvement de la séquence.

Comparer les stratégies de branchement à conditions égales

Conserve le coût de chargement-utilisation de 0,10, la fraction de branchements de 0,15 et la pénalité de deux cycles :

Stratégie de branchementCoût des branchementsCPI effectif
Attendre à chaque branchement0,15 × 2 = 0,301,40
Prédire non pris, 60 % pris0,15 × 0,60 × 2 = 0,181,28
Dynamique, 90 % de réussite0,15 × 0,10 × 2 = 0,031,13

À période d’horloge et nombre d’instructions identiques, la prédiction dynamique est environ 1,24 fois plus rapide que l’attente, car 1,40/1,13 ≈ 1,24.

Pour comparer différents processeurs, compare CPI × période. Un circuit monocycle à 1 000 ps prend 1 000 ps par instruction. Un pipeline à 270 ps avec un CPI de 1,13 prend 305,1 ps par instruction, soit une accélération d’environ 3,28. Comparer le seul CPI favoriserait le CPI de 1 du circuit monocycle et conduirait à une conclusion erronée.

Comprendre le compromis suivant dans la conception

Un plus grand nombre d’étages de pipeline peut réduire le travail combinatoire par cycle. Il introduit aussi un surcoût lié aux registres et peut augmenter les pénalités de chargement-utilisation et d’erreur de prédiction. La seule fréquence d’horloge ne permet pas de décider si le circuit plus profond l’emporte.

L’émission multiple commence plusieurs instructions par cycle, ce qui permet un CPI inférieur à 1 et un nombre d’instructions par cycle (IPC) supérieur à 1. Les groupes d’émission statique sont choisis par le compilateur ; l’émission dynamique, ou exécution superscalaire, est décidée par le matériel et utilise souvent la spéculation et l’exécution dans le désordre. Les dépendances de données et la prédiction des branchements limitent toujours le chevauchement utile.

Points clés

  • Calcule la moyenne du coût de chaque aléa sur toutes les instructions, en incluant la fraction dont dépend un taux conditionnel.
  • Ajoute les contributions distinctes de cycles perdus au CPI idéal de 1 pour les longs flux à émission simple.
  • Le temps d’exécution est égal au nombre d’instructions exécutées × CPI × période d’horloge.
  • Compare différents processeurs avec CPI × période, et non avec le seul CPI.
  • Des pipelines plus profonds offrent des étages plus courts en échange d’un surcoût et d’un coût des aléas plus élevés.
  • L’émission multiple peut atteindre un IPC supérieur à 1 et un CPI inférieur à 1.

Chemin de données du processeur : exemples

5 Leçons Interactives

1

Suis une instruction de sa récupération à l’enregistrement du résultat

14 étapes
Construis les parcours monocycles partagés et suis une opération arithmétique, un chargement, un rangement et un branchement avec des valeurs concrètes.
  1. 1
    IntroductionTransformer les bits d’une instruction en valeurs enregistrées

    Une instruction désigne une opération, comme l’addition de valeurs de registres ou le chargement de données. Le processeur a besoin de matériel qui effectue cette opération et de signaux de commande qui sélectionnent les bons chemins.

    Suis le chemin de données monocycle de ses éléments de mémorisation jusqu’à ses sorties. Suis ensuite une courte séquence et repère exactement ce qui change à chaque front d’horloge de fin de cycle. Chaque instruction de ce sous-ensemble occupe 4 octets.

  2. 2
    ExplicationCommencer par l’adresse d’instruction mémorisée

    Le PC contient l’adresse de l’instruction courante. La mémoire d’instructions renvoie l’instruction située à cette adresse et un additionneur distinct calcule PC + 4 en même temps.

    Le PC est un élément de mémorisation : il conserve sa valeur pendant le cycle. L’additionneur est combinatoire : sa sortie suit ses entrées. Sur le front d’horloge de fin de cycle, le PC capture la prochaine adresse choisie par son multiplexeur d’entrée.

  3. 3
    ExplicationLire les opérandes et former la valeur immédiate

    Le banc de registres lit rs1 et rs2 par deux ports. Son port d’écriture ne modifie rd que lorsque RegWrite autorise l’écriture sur le front d’horloge ; la lecture de x0 renvoie toujours zéro.

    ImmGen reconstitue une valeur immédiate et effectue son extension de signe sur 64 bits. La copie du bit de signe conserve un déplacement négatif. Pour la valeur de 12 bits 1111 1111 1000, le résultat est −8, et non la valeur 4 088 obtenue par extension par des zéros.

  4. 4
    Point cléDistinguer un résultat calculé d’un résultat enregistré

    L’unité arithmétique et logique additionne, soustrait, effectue un ET ou un OU selon son entrée de commande. Son indicateur Zero indique si le résultat est nul. Les multiplexeurs choisissent parmi les entrées possibles et les signaux d’activation d’écriture déterminent quelles valeurs sélectionnées deviennent des éléments de l’état mémorisé.

    Une unité peut calculer une sortie inutilisée sans modifier le programme. Un signal d’activation d’écriture en mémoire est différent : l’activer peut enregistrer une valeur même lorsque cette écriture n’a jamais été voulue.

  5. 5
    DéfiQuel composant mémorise la valeur ?

    Un additionneur de cible de branchement calcule 740 alors que le PC contient encore 720. Avant le front actif, quelle unité conserve l’adresse de l’instruction courante, et la cible calculée modifie-t-elle elle-même cette adresse ?

    ---reveal---

    Le PC conserve 720. L’additionneur ne fait que calculer une cible possible. Le PC change lorsque la prochaine valeur sélectionnée est capturée sur le front ; une valeur possible sur une entrée non sélectionnée ne l’écrase pas.

  6. 6
    ExplicationAcheminer les opérations arithmétiques et mémoire

    Une opération de type R lit deux valeurs de registres, les envoie à l’unité arithmétique et logique et renvoie le résultat à rd. Un chargement a, lui, besoin d’une adresse formée de la base et du déplacement, puis de la valeur en mémoire à cette adresse.

    Un rangement calcule une adresse de la même manière, mais rs2 fournit les données à écrire. Le chemin des données vers la mémoire doit rester disponible même lorsqu’ALUSrc sélectionne une valeur immédiate pour la seconde entrée de l’unité arithmétique et logique.

  7. 7
    ExplicationChoisir les connexions partagées

    Trois sélecteurs réunissent les parcours :

    • ALUSrc choisit rs2 ou la valeur immédiate pour l’unité arithmétique et logique.
    • MemtoReg choisit le résultat de l’unité arithmétique et logique ou les données de la mémoire pour rd.
    • PCSrc choisit PC + 4 ou la cible de branchement.

    Un chargement fixe ALUSrc à 1 et MemtoReg à 1. Un rangement utilise aussi le chemin d’adresse avec valeur immédiate, mais désactive l’écriture en registre et active l’écriture en mémoire.

  8. 8
    ConseilCalculer une seule fois la cible d’un branchement

    Pour beq, une soustraction teste l’égalité pendant qu’un additionneur distinct forme le PC du branchement + le déplacement signé en octets. Ces calculs peuvent se dérouler en parallèle.

    Le codage du format B omet le bit zéro de poids faible du déplacement. ImmGen peut reconstituer le déplacement complet en octets, ou un décalage externe peut fournir ce bit. Une fois le déplacement complet en octets obtenu, le décaler à nouveau doublerait le déplacement.

  9. 9
    DéfiDistinguer l’adresse de rangement des données à ranger

    Pour sd x11, 32(x18), x18 contient 2 400 et x11 contient 55. Quels sont le résultat de l’unité arithmétique et logique et les données à écrire en mémoire ?

    ---reveal---

    L’unité arithmétique et logique calcule l’adresse 2 432 à partir de 2 400 + 32. Les données à écrire en mémoire sont 55, fournies par x11. Envoyer 55 à l’unité arithmétique et logique à la place du déplacement calculerait une adresse sans rapport ; la sélection de la valeur immédiate doit laisser intact le chemin des données à ranger.

  10. 10
    ExempleSuivre une addition jusqu’au front d’horloge

    À PC 400, add x5, x6, x7 lit x6 = 25 et x7 = −9. ALUSrc sélectionne la valeur du second registre, l’unité arithmétique et logique additionne et MemtoReg sélectionne le résultat 16.

    Sur le front, RegWrite enregistre 16 dans x5 et le PC devient 404. La mémoire de données n’est ni lue ni écrite.

  11. 11
    ExempleSuivre un chargement, puis un rangement

    À PC 404, ld x5, 16(x6) utilise x6 = 1 000 et lit l’adresse 1 016, dont le double mot contient 42. L’unité arithmétique et logique produit 1 016 ; la mémoire produit 42, que MemtoReg sélectionne pour x5. Le PC passe à 408.

    L’instruction sd x5, 24(x6) suivante calcule l’adresse 1 024 et écrit la valeur actualisée de x5, 42. Elle fait passer le PC à 412 sans écrire dans aucun registre.

  12. 12
    ExempleDéterminer l’adresse de l’instruction suivante

    À PC 412, beq x8, x9, 12 lit deux valeurs de 7. La soustraction donne zéro et l’additionneur de cible donne 424. Branch AND Zero sélectionne 424 comme prochain PC.

    Si x9 valait 8, la soustraction donnerait −1 et le PC passerait à 416. Dans aucun des deux cas, un registre à usage général ou la mémoire de données n’est écrit. La comparaison détermine quelle adresse possible est enregistrée.

  13. 13
    DéfiDiagnostiquer une valeur de destination incorrecte

    Une instruction ld x10, 8(x20) correcte avec x20 = 3 200 lit le double mot 91 à l’adresse 3 208. Un multiplexeur d’écriture en registre défectueux laisse à la place x10 = 3 208. Qu’a sélectionné le multiplexeur et que devrait-il sélectionner ?

    ---reveal---

    Il a sélectionné le résultat de l’unité arithmétique et logique, l’adresse 3 208. Il devrait sélectionner la sortie de la mémoire de données, 91. Le calcul de l’adresse peut être correct alors que l’état final est erroné parce que l’écriture en registre a choisi la mauvaise source.

  14. 14
    RécapitulatifAssocier chaque écriture d’état à son chemin

    Pour un suivi monocycle complet, distingue le résultat arithmétique, l’adresse effective, les données de la mémoire et le prochain PC. Les chargements et les opérations arithmétiques écrivent dans rd par des entrées différentes du multiplexeur ; les rangements utilisent un chemin de données distinct ; les branchements ne sélectionnent que l’adresse de l’instruction suivante.

    Tous utilisent la même frontière d’horloge : les opérations combinatoires produisent des valeurs possibles pendant le cycle et les écritures d’état autorisées capturent les valeurs sélectionnées à sa fin.

2

Déduis la commande du travail nécessaire à une instruction

11 étapes
Construis une ligne de commande pour un chargement, justifie les valeurs indifférentes et décode les opérations arithmétiques de type R avec ALUOp et les bits de fonction.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionFaire respecter l’instruction par le chemin de données partagé
  2. 2
    ExempleDéduire une ligne de chargement de son parcours de données
  3. 3
    ExplicationProtéger l’état avec des activations d’écriture définies
  4. 4
    Point cléLaisser les données achever la décision de branchement
  5. 5
    DéfiChoisir le réglage indéterminé sans conséquence
  6. 6
    ExplicationUtiliser ALUOp pour sélectionner une classe d’opérations
  7. 7
    ExempleSuivre les bits de fonction d’une soustraction
  8. 8
    LienRéutiliser l’additionneur pour la soustraction
  9. 9
    DéfiConserver le rôle des bits d’un chargement
  10. 10
    DéfiÉtendre la commande sans ajouter de chemin d’adresse
  11. 11
    RécapitulatifRelier les autorisations au décodage
3

Observe le chevauchement d’instructions indépendantes

15 étapes
Calcule une période d’horloge de pipeline, suis les valeurs dans les registres entre étages et lis les temps d’achèvement dans le déroulement à cinq étages.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDistinguer une instruction du flux d’instructions
  2. 2
    ExempleTrouver l’instruction complète la plus lente
  3. 3
    ExempleFixer la période d’horloge du pipeline selon l’étage le plus lent
  4. 4
    AnalogieComparer le débit et la latence
  5. 5
    DéfiCalculer la durée d’une courte séquence
  6. 6
    ExplicationTransmettre l’instruction, pas seulement son résultat
  7. 7
    ExempleGarder la destination avec un chargement
  8. 8
    ExplicationTransmettre les signaux de commande jusqu’à leur utilisation
  9. 9
    DéfiPourquoi garder le passage inutilisé en MEM ?
  10. 10
    ExempleConstruire un escalier d’étages
  11. 11
    ConseilSituer un étage sans dessiner chaque case
  12. 12
    ExempleInsérer une attente sans répéter les opérations plus anciennes
  13. 13
    DéfiDéterminer la fin retardée
  14. 14
    DéfiCombiner stockage et vue à un cycle donné
  15. 15
    RécapitulatifDéduire la performance du déroulement
4

Suis la valeur la plus récente dans un pipeline bloqué

17 étapes
Repère les instructions productrices, sélectionne les sources de court-circuit, insère une bulle de chargement-utilisation et vérifie un déplacement dans l’ordonnancement.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionTrouver où se trouve la valeur nécessaire
  2. 2
    ExplicationDistinguer les conflits selon leur cause
  3. 3
    ExempleRepérer l’instruction productrice pour chaque lecture
  4. 4
    DéfiLa réutilisation d’un registre crée-t-elle un aléa matériel ?
  5. 5
    ExplicationTransmettre un résultat avant son écriture en registre
  6. 6
    ConseilVérifier chaque correspondance de court-circuit
  7. 7
    ExempleRésoudre deux correspondances avec des instructions qui écrivent
  8. 8
    DéfiTransmettre deux opérandes indépendamment par court-circuit
  9. 9
    LienPréserver le chemin distinct des données à ranger
  10. 10
    ExplicationObserver la limite temporelle du court-circuit
  11. 11
    ExplicationRetenir l’instruction consommatrice et insérer une bulle
  12. 12
    ExempleSuivre l’attente sur trois cycles
  13. 13
    ConseilFaire lire les sources réelles par le détecteur
  14. 14
    ExempleDéplacer du travail utile dans l’intervalle
  15. 15
    DéfiVérifier le déplacement avant de compter le gain
  16. 16
    DéfiCombiner la bulle avec un court-circuit ultérieur
  17. 17
    RécapitulatifChoisir une aide selon le moment où la valeur est produite
5

Rétablis le flux d’instructions et mesure le coût

19 étapes
Suis un branchement pris, compare les états de prédiction et combine les taux d’aléas avec la période d’horloge pour estimer le temps d’exécution.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionMaintenir le travail utile sur le bon chemin
  2. 2
    ExplicationCompter les créneaux de récupération des instructions plus récentes
  3. 3
    ExempleSuivre un branchement pris avec une prédiction de branchement non pris
  4. 4
    ConseilAbandonner des opérations sans exécuter d’instruction illégale
  5. 5
    ExplicationRésoudre plus tôt en obtenant les opérandes plus tôt
  6. 6
    DéfiProtéger l’état après une erreur de prédiction
  7. 7
    LienPréserver la frontière d’exception
  8. 8
    ExplicationUtiliser l’historique pour prédire la direction
  9. 9
    ExplicationConserver la confiance avec deux bits
  10. 10
    ExempleSuivre la prédiction avant la mise à jour
  11. 11
    DéfiTester deux issues contraires
  12. 12
    ExplicationDistinguer la direction de la cible
  13. 13
    Point cléRepérer les interférences et les limites face aux séquences
  14. 14
    ExempleConvertir les taux conditionnels en coût par instruction
  15. 15
    ExempleInclure la durée d’un cycle
  16. 16
    ExempleComparer les stratégies de prédiction
  17. 17
    DéfiRetrouver la fraction de branchements manquante
  18. 18
    DéfiÉvaluer un pipeline plus profond
  19. 19
    RécapitulatifMesurer le chevauchement utile après les coûts de correction

Chemin de données du processeur : QCM

50 Questions Pratiques en 5 séries

Série 1 : Lis le déroulement à cinq étages10 Questions Pratiques

Question 1 sur 10

Quelle grandeur de performance compte les instructions achevées par unité de temps ?
  1. La latence des instructions
  2. Le débit
  3. La latence du cycle d’horloge
  4. La profondeur du pipeline
Afficher la réponseMasquer la réponse
Réponse : B
Le débit mesure la fréquence à laquelle les instructions achevées sortent du processeur. La latence suit, elle, une instruction de son entrée à son achèvement. Un pipeline peut améliorer le débit grâce au chevauchement même lorsque le temps écoulé pour une instruction augmente.

Question 2 sur 10

Pourquoi le champ rd d’un chargement doit-il être transmis jusqu’à MEM/WB ?
  1. WB doit décoder la valeur immédiate du branchement suivant.
  2. MEM doit relire le registre de base de ce chargement.
  3. IF doit sélectionner l’opérande source de ce chargement.
  4. WB doit identifier la destination de ce chargement.
Afficher la réponseMasquer la réponse
Réponse : D
La valeur chargée doit être écrite dans son propre rd lorsque le chargement atteint WB. À ce moment-là, l’instruction en cours de décodage est plus récente et peut avoir une autre destination. Transmettre rd avec le résultat évite d’utiliser le numéro de registre du décodeur courant pour l’écriture plus ancienne.

Question 3 sur 10

Dans un pipeline à cinq étages sans aléa, l’instruction I6 commence IF au cycle 6. À quel cycle atteint-elle MEM ?
  1. 9
  2. 8
  3. 10
  4. 11
Afficher la réponseMasquer la réponse
Réponse : A
MEM est le quatrième étage, donc I6 passe par IF au cycle 6, ID au cycle 7, EX au cycle 8 et MEM au cycle 9. Le cycle 10 correspond à son étage WB, et non à son étage d’accès mémoire. Commencer les instructions plus récentes avant la fin des plus anciennes crée l’escalier de chevauchement.

Question 4 sur 10

Les délais logiques des étages sont de 180, 120, 210, 160 et 130 ps. Le surcoût temporel des registres de pipeline est de 15 ps. Quelle période d’horloge est nécessaire ?
  1. 800 ps
  2. 210 ps
  3. 225 ps
  4. 175 ps
Afficher la réponseMasquer la réponse
Réponse : C
L’étage le plus lent a un délai logique de 210 ps, et le surcoût des registres ajoute 15 ps, ce qui donne 225 ps. Faire la moyenne des délais des étages ne donnerait pas assez de temps à l’étage le plus lent. Les additionner décrit un parcours complet, et non l’intervalle entre les fronts du pipeline.

Question 5 sur 10

L’instruction en EX est une opération de type R avec ALUOp 10. ID/EX ne transmet ni ses bits de fonction ni un code d’opération prédécodé. Quelle information manque ?
  1. L’opération précise de type R à effectuer.
  2. Le fait que sa classe d’instructions est de type R.
  3. Le nombre d’étages du pipeline dans le circuit.
  4. L’adresse de l’instruction séquentielle suivante.
Afficher la réponseMasquer la réponse
Réponse : A
ALUOp 10 indique la classe de type R, mais cette classe contient plusieurs opérations. EX a encore besoin de funct3 et du bit 30, ou d’un code d’opération décodé auparavant, pour choisir entre elles. La classe est déjà connue : répéter cette information ne permettrait donc pas de retrouver la distinction manquante.

Question 6 sur 10

Un pipeline à cinq étages exécute huit instructions avec trois cycles de blocage insérés et aucune perte due aux branchements. À la fin de quel cycle la dernière instruction termine-t-elle WB ?
  1. 11
  2. 15
  3. 12
  4. 19
Afficher la réponseMasquer la réponse
Réponse : B
Huit instructions nécessitent 8 + 4 = 12 cycles avant les blocages. Les trois délais insérés déplacent le dernier WB au cycle 15. Ajouter quatre cycles pour le remplissage et quatre autres pour la vidange compterait deux fois le même déroulement avec chevauchement des étages.

Question 7 sur 10

Un pipeline à cinq étages ne possède pas de court-circuit et écrit dans le banc de registres avant de le lire à chaque cycle. Exécute add x13, x2, x3; or x20, x4, x5; sub x14, x13, x6. L’instruction du milieu est indépendante. Combien de blocages et de cycles au total sont nécessaires ?
  1. 2 blocages ; 9 cycles
  2. 0 blocage ; 7 cycles
  3. 1 blocage ; 9 cycles
  4. 1 blocage ; 8 cycles
Afficher la réponseMasquer la réponse
Réponse : D
L’instruction productrice écrit x13 au cycle 5. Avec une instruction indépendante entre les deux, la soustraction lirait x13 en ID pendant le cycle 4 ; elle nécessite donc un blocage pour lire au cycle 5. Les trois instructions prennent alors 3 + 4 + 1 = 8 cycles ; deux blocages seraient nécessaires pour une instruction consommatrice adjacente.

Question 8 sur 10

Un processeur monocycle prend 900 ps par instruction. Une version à cinq étages a des délais logiques de 180, 120, 210, 160, 130 ps et un surcoût de registres de 15 ps. Les deux exécutent six instructions indépendantes. Quelle est l’accélération du pipeline ?
  1. 4,00 fois
  2. 2,57 fois
  3. 2,40 fois
  4. 5,00 fois
Afficher la réponseMasquer la réponse
Réponse : C
La période du pipeline est de 210 + 15 = 225 ps. Six instructions nécessitent dix cycles, donc le temps du pipeline est de 2 250 ps ; le temps en monocycle est de 5 400 ps, ce qui donne une accélération de 2,40 fois. Le rapport 900/225 = 4 ne s’applique que lorsque le coût fixe de remplissage devient négligeable.

Question 9 sur 10

Un chargement entre en IF un cycle avant une instruction de type R. Si seule l’instruction de type R sautait MEM et passait directement de EX à WB, quel conflit se produirait ?
  1. Les deux auraient besoin de la mémoire de données au même cycle.
  2. Le chargement atteindrait EX après l’instruction de type R.
  3. L’instruction de type R lirait les registres avant le décodage.
  4. Les deux instructions utiliseraient WB au même cycle.
Afficher la réponseMasquer la réponse
Réponse : D
Le chargement occupe WB au cycle 5. L’instruction de type R suivante atteint EX au cycle 4 ; sauter MEM la placerait donc aussi en WB au cycle 5. Le conflit concerne l’unique port d’écriture des registres ; l’instruction arithmétique n’a pas besoin de la mémoire de données.

Question 10 sur 10

Avec un court-circuit complet vers EX, exécute ld x21, 0(x25); add x22, x21, x3; or x24, x6, x7; sub x23, x22, x4. L’opération OU est indépendante et il n’y a aucun aléa de branchement ou structurel. À quel cycle la soustraction finale entre-t-elle en EX ?
  1. 6
  2. 7
  3. 8
  4. 9
Afficher la réponseMasquer la réponse
Réponse : B
La paire chargement-utilisation maintient l’instruction add en ID jusqu’au cycle 4 ; elle entre donc en EX au cycle 5. L’opération OU indépendante entre ensuite en EX au cycle 6, et la soustraction entre en EX au cycle 7. Elle peut recevoir x22 depuis MEM/WB ; traiter cette dépendance RAW ultérieure comme un autre blocage de chargement-utilisation la retarderait inutilement.
Série 2 : Suis les valeurs et les signaux de commande10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Quel circuit conserve l’adresse de l’instruction entre les cycles d’horloge ?
  1. Le générateur de valeurs immédiates
  2. L’additionneur de cible de branchement
  3. Le compteur ordinal
  4. Le multiplexeur de l’unité arithmétique et logique
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Pour sd x14, 40(x9), d’où provient la valeur écrite en mémoire ?
  1. La valeur dans x14
  2. La valeur dans x9
  3. La valeur immédiate 40
  4. L’adresse produite par l’unité arithmétique et logique
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

À PC 640, ld x12, -16(x8) s’exécute avec x8 = 2 080 et une valeur de double mot de −6 à l’adresse 2 064. Que valent x12 et le PC après l’exécution ?
  1. x12 = 2 064 ; PC = 644
  2. x12 = −6 ; PC = 624
  3. x12 = 2 080 ; PC = 644
  4. x12 = −6 ; PC = 644
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Une instruction beq x16, x17, -24 à l’adresse 880 compare deux registres contenant chacun 11. À quelle adresse l’instruction suivante est-elle récupérée ?
  1. 860
  2. 856
  3. 884
  4. 904
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Pourquoi MemtoReg peut-il prendre une valeur indifférente pour beq ?
  1. MemRead vaut 0, donc toute valeur de commande est ignorée.
  2. RegWrite vaut 0, donc la valeur sélectionnée est ignorée.
  3. Branch vaut 1, donc le banc de registres est écrasé.
  4. Zero vaut 1, donc les deux entrées d’écriture sont identiques.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Une instruction possède le code opération de type R, funct3 000 et bit 30 = 1. Quels signaux ALUOp et de commande de l’unité arithmétique et logique ce circuit produit-il ?
  1. ALUOp 01 ; commande 0110
  2. ALUOp 10 ; commande 0010
  3. ALUOp 00 ; commande 0010
  4. ALUOp 10 ; commande 0110
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Une valeur immédiate de 12 bits contient 1111 1111 0000. Quelle valeur signée ImmGen doit-il fournir au chemin de données de 64 bits ?
  1. −16
  2. 4080
  3. −15
  4. 240
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une instruction monocycle ld x15, 32(x18) utilise x18 = 3 000 et la mémoire contient 77 à l’adresse 3 032. Un défaut de commande ne modifie que MemtoReg, qui passe de 1 à 0. L’instruction suivante est sd x15, 48(x18). Quelle valeur ce rangement écrit-il, et où ?
  1. 77 à l’adresse 3 048
  2. 3 032 à l’adresse 3 032
  3. 3 032 à l’adresse 3 048
  4. 77 à l’adresse 3 080
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un branchement à PC 1 200 compare des registres égaux. Son déplacement signé en octets reconstitué est −32, mais un chemin de branchement défectueux décale encore une fois ce déplacement complet vers la gauche avant l’addition. Quel prochain PC obtient-on et quelle aurait dû être sa valeur ?
  1. 1 168 au lieu de 1 136
  2. 1 136 au lieu de 1 168
  3. 1 140 au lieu de 1 172
  4. 1 264 au lieu de 1 232
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un concepteur ajoute une opération bit à bit de type R prise en charge sous le code opération de type R existant. Ses chemins de données et ses écritures d’état correspondent à ceux des autres opérations de type R, et l’unité arithmétique et logique l’implémente déjà. Quelle modification du décodage est nécessaire ?
  1. Étendre le décodage des fonctions de l’unité arithmétique et logique.
  2. Ajouter une ligne de commande pour un nouveau code opération.
  3. Réutiliser la ligne de commande du chargement.
  4. Régler MemtoReg pour sélectionner la mémoire.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 3 : Choisis les opérandes et ordonnance les instructions autour des chargements10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Quelle dépendance relie sub x11, x2, x3 à l’instruction ultérieure and x12, x11, x4 ?
  1. WAR par x11
  2. WAW par x11
  3. RAW par x12
  4. RAW par x11
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

EX/MEM et MEM/WB contiennent tous deux des résultats prêts à être écrits en registre pour le même registre source non nul. Quel résultat l’unité de court-circuit doit-elle sélectionner ?
  1. MEM/WB
  2. EX/MEM
  3. L’ancienne valeur dans ID/EX
  4. La valeur du générateur de valeurs immédiates
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un chargement en EX produit x19 et l’instruction en ID lit x19. Quelles actions réalisent le blocage de chargement-utilisation nécessaire ?
  1. Maintenir le PC et IF/ID ; mettre à zéro les commandes entrant dans ID/EX.
  2. Maintenir ID/EX et EX/MEM ; faire avancer le PC et IF/ID.
  3. Effacer IF/ID et maintenir tous les registres de pipeline plus anciens.
  4. Faire avancer le PC ; recopier les commandes du chargement dans ID/EX.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Une instruction écrirait dans x0 et est immédiatement suivie de add x18, x0, x7. Le résultat précédent de l’unité arithmétique et logique est non nul. Quelle valeur l’instruction add doit-elle utiliser pour son premier opérande ?
  1. Le résultat de l’unité arithmétique et logique
  2. Le nombre 18
  3. Le zéro de x0
  4. L’ancienne valeur de x18
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Avec un court-circuit complet, exécute add x9, x1, x2; add x9, x9, x3; sub x11, x9, x4 avec x1 = 6, x2 = 7, x3 = 9 et x4 = 5. Quelle valeur la soustraction produit-elle et quel registre de pipeline lui fournit x9 ?
  1. 8 ; x9 depuis MEM/WB
  2. 17 ; x9 depuis MEM/WB
  3. 17 ; x9 depuis EX/MEM
  4. 26 ; x9 depuis EX/MEM
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Une instruction add x16, x5, x6 est immédiatement suivie de sd x16, 56(x20). Le pipeline transmet les données à ranger par court-circuit avant la sélection par ALUSrc. Comment le rangement obtient-il ses données ?
  1. ForwardB fournit le résultat de l’addition ; ALUSrc sélectionne toujours 56.
  2. ALUSrc doit sélectionner x16 ; l’adresse omet donc le déplacement.
  3. Le rangement doit attendre que x16 soit écrit dans le banc de registres.
  4. ForwardA fournit x16 comme base d’adresse à la place de x20.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Considère ld x6, 0(x20); add x7, x6, x8; ld x9, 16(x20); sub x10, x9, x11. Aucune autre instruction ne modifie x20, x8 ou x11, et les deux lectures sont valides. Quel ordre supprime les deux blocages de chargement-utilisation tout en préservant les résultats ?
  1. add x7 ; ld x6 ; ld x9 ; sub x10
  2. ld x6 ; ld x9 ; add x7 ; sub x10
  3. ld x6 ; add x7 ; sub x10 ; ld x9
  4. ld x9 ; sub x10 ; ld x6 ; add x7
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

La séquence est ld x5, 0(x20); add x6, x5, x7; sd x6, 8(x20); ld x8, 8(x20). Pourquoi est-il invalide de déplacer le dernier chargement en deuxième position, même si cela remplit l’intervalle de chargement-utilisation ?
  1. Cela créerait un aléa matériel WAR sur x8.
  2. Cela ferait écrire les deux chargements dans le même registre.
  3. Cela modifierait le déplacement en octets du premier chargement.
  4. Cela lirait la mémoire avant sa mise à jour par le rangement.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Dans add x5, x6, x7; sub x6, x8, x9, quelle dépendance entre registres limite la possibilité d’inverser les instructions ?
  1. WAR par x6
  2. RAW par x6
  3. WAW par x5
  4. RAW par x8
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Avec un court-circuit complet, exécute ld x12, 0(x26); add x13, x12, x2; ld x14, 8(x26); sub x15, x14, x13; sd x15, 24(x26). Les données à ranger sont transmises par court-circuit avant ALUSrc et il n’y a aucun autre aléa. Combien de cycles sont nécessaires jusqu’au dernier passage en WB inclus ?
  1. 9
  2. 10
  3. 11
  4. 12
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 4 : Rétablis la récupération et suis l’historique des branchements10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Pourquoi une instruction RISC-V dont tous les bits sont à zéro ne convient-elle pas comme nop de remplacement ?
  1. C’est un codage d’instruction illégal.
  2. C’est le codage d’un branchement pris.
  3. C’est le codage d’un rangement à l’adresse zéro.
  4. C’est une instruction légale qui écrit une valeur non nulle dans x0.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un compteur saturant de branchement à 2 bits est à l’état 0. Quel état suit une nouvelle issue non prise ?
  1. 1
  2. 2
  3. 0
  4. 3
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un branchement pris à PC 960 a un déplacement de −40 octets. Il est récupéré au cycle 1 et résolu à la fin de EX, avec une prédiction de branchement non pris. Quelles adresses sont abandonnées avant la récupération à la cible ?
  1. 920 et 924
  2. 964 et 968
  3. 960 et 964
  4. 968 et 972
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Un compteur saturant à 2 bits commence à l’état 2 et observe les issues non pris, non pris, pris, pris, non pris. Combien de prédictions sont incorrectes et quel est l’état final ?
  1. 3 erreurs ; état final 1
  2. 4 erreurs ; état final 2
  3. 2 erreurs ; état final 0
  4. 4 erreurs ; état final 1
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

La récupération prédit qu’un branchement est pris, mais aucune adresse cible n’est disponible avant le décodage. Quelle structure supplémentaire peut fournir pendant IF une cible déjà rencontrée ?
  1. Un bit d’historique de direction
  2. Une unité de détection des aléas
  3. Un tampon des cibles de branchement
  4. Un multiplexeur d’écriture en registre
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Avec un court-circuit adapté vers ID, ld x18, 0(x22) est immédiatement suivie d’un branchement qui compare x18. Le branchement est résolu en ID. Par rapport à une situation sans attente d’opérande, combien de cycles la comparaison doit-elle attendre et pourquoi ?
  1. 1 cycle ; le court-circuit ordinaire vers EX atteint la comparaison à temps.
  2. 2 cycles ; les données chargées doivent atteindre la comparaison anticipée en ID.
  3. 0 cycle ; la lecture des registres en ID contourne l’accès mémoire.
  4. 3 cycles ; un chargement doit terminer un cycle distinct après WB.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Le branchement d’une boucle exécutée à répétition donne cinq issues prises suivies d’une sortie non prise par exécution. Sans collision et après apprentissage en régime établi, comment se comparent les taux de réussite des prédicteurs à un bit et à deux bits ?
  1. Un bit : 4/6 ; deux bits : 5/6
  2. Un bit : 5/6 ; deux bits : 5/6
  3. Un bit : 4/6 ; deux bits : 4/6
  4. Un bit : 5/6 ; deux bits : 6/6
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une instruction illégale est suivie d’un rangement plus récent tandis que deux instructions arithmétiques plus anciennes sont encore en cours d’achèvement. Quel état une exception précise doit-elle présenter au gestionnaire ?
  1. Aucun des deux résultats anciens présent ; rangement récent absent.
  2. Les deux résultats anciens présents ; rangement récent présent.
  3. Seul le rangement récent présent ; résultats anciens absents.
  4. Les deux résultats anciens présents ; rangement récent absent.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un compteur à 2 bits commence à l’état 1 avant une séquence alternant strictement pris et non pris. Quel taux de réussite atteint-il sur les six premières issues ?
  1. 50%
  2. 0%
  3. 67%
  4. 100%
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Deux branchements partagent un compteur à 2 bits initialement à l’état 3. Le branchement A est pris, B n’est pas pris, A est pris et B n’est pas pris. Combien d’erreurs se produisent et quel branchement les provoque ?
  1. 2 erreurs, toutes deux sur B
  2. 1 erreur, uniquement sur B
  3. 2 erreurs, une sur chacun
  4. 3 erreurs, dont deux sur B
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 5 : Combine les temps du pipeline et les coûts des aléas10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Pour un même nombre d’instructions, quelle grandeur permet de comparer le temps d’exécution par instruction entre des processeurs dont les horloges diffèrent ?
  1. CPI ÷ période d’horloge
  2. CPI × période d’horloge
  3. Fréquence d’horloge × CPI
  4. Nombre d’instructions ÷ CPI
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Dans un long flux d’instructions, 30 % sont des chargements et 20 % de ceux-ci sont suivis d’une instruction consommatrice immédiate nécessitant un blocage. Quelle est la contribution des chargements-utilisations au CPI ?
  1. 0,06
  2. 0,20
  3. 0,30
  4. 0,50
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un long flux comporte 30 % de chargements, dont 20 % sont suivis d’une instruction consommatrice immédiate, et 20 % de branchements, dont 15 % sont mal prédits. Chaque aléa de chargement-utilisation coûte un cycle et chaque erreur de prédiction en coûte trois. Les coûts ne se chevauchent pas. À 2 GHz, combien de temps prennent 400 millions d’instructions ?
  1. 0,212 s
  2. 0,290 s
  3. 0,460 s
  4. 0,230 s
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Deux processeurs exécutent le même long programme. A a une période de 300 ps, un coût de chargement-utilisation de 0,08 cycle/instruction, une fraction de branchements de 0,20, 10 % d’erreurs de branchement et une correction de deux cycles. B a une période de 240 ps, les mêmes coût de chargement-utilisation et fraction de branchements, 20 % d’erreurs de branchement et une correction de quatre cycles. Les coûts ne se chevauchent pas. Lequel est le plus rapide et d’environ combien ?
  1. A, environ 1,13 fois
  2. B, environ 1,25 fois
  3. B, environ 1,13 fois
  4. A, environ 1,11 fois
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Un circuit monocycle utilise 800 ps par instruction. Une version à cinq étages utilise 200 ps par cycle et exécute une courte séquence avec deux blocages et aucune perte due aux branchements. Quel est le plus petit nombre positif d’instructions pour lequel le pipeline est strictement plus rapide ?
  1. 3 instructions
  2. 2 instructions
  3. 4 instructions
  4. 6 instructions
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un long flux comporte 25 % de branchements et un coût de blocage indépendant de 0,05 cycle/instruction. Un nouveau prédicteur fait passer le taux de réussite des branchements de 80 % à 92 %, avec la même correction de trois cycles et la même période d’horloge. Quelle est l’accélération de l’exécution ?
  1. 1,120 fois
  2. 1,136 fois
  3. 1,081 fois
  4. 1,250 fois
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Une modification valide de l’ordonnancement supprime deux blocages de chargement-utilisation d’une séquence de six instructions à cinq étages sans autre perte. Comment le temps total change-t-il avec une période de 250 ps ?
  1. 2 000 ps deviennent 1 500 ps
  2. 2 500 ps deviennent 2 000 ps
  3. 3 500 ps deviennent 3 000 ps
  4. 3 000 ps deviennent 2 500 ps
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Deux circuits exécutent un long flux riche en branchements, avec 30 % de branchements et aucun autre aléa. La prédiction de branchement non pris a un taux de réussite de 60 %. X résout à la fin de EX avec une période de 200 ps ; Y résout à la fin de ID avec une période de 220 ps et aucun blocage dû aux opérandes. Lequel a le temps par instruction le plus faible ?
  1. X à 248 ps
  2. Y à 246,4 ps
  3. X à 224 ps
  4. Y à 272,8 ps
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un processeur à émission multiple maintient un IPC de 2. Quel CPI moyen correspond à ce débit ?
  1. 1
  2. 2
  3. 0,5
  4. 4
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un processeur à cinq étages a un coût de chargement-utilisation de base de 0,09 cycle/instruction et 18 % de branchements. Son CPI mesuré à long terme est de 1,18. Tous les autres cycles perdus sont dus à des erreurs de prédiction de branchement avec une correction de trois cycles. Quel taux de réussite de la prédiction des branchements cela implique-t-il ?
  1. Environ 95,0 %
  2. Environ 66,7 %
  3. Environ 50,0 %
  4. Environ 83,3 %
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Tu bloques sur ton propre exercice ? Aide aux Devoirs

Mots-Clés

72 Mots-Clés, chacun avec sa définition

A

Adresse effective
Une adresse effective est l’adresse mémoire calculée pour un chargement ou un rangement en additionnant la valeur du registre de base et le déplacement signé en octets.
Pour ld x4, 24(x8) avec x8 = 2 000, l’adresse effective est 2 024.
Aléa de chargement-utilisation
Un aléa de chargement-utilisation se produit lorsqu’une instruction placée immédiatement après un chargement a besoin de son résultat avant que celui-ci ait terminé la lecture de la mémoire de données.
L’instruction consommatrice attend un cycle avec un court-circuit vers EX, puis prend les données dans MEM/WB.
Aléa de contrôle
Un aléa de contrôle survient lorsque la récupération a besoin de l’adresse de l’instruction suivante avant qu’un branchement ou un autre transfert de contrôle ne l’ait déterminée.
La prédiction de branchement non pris poursuit la récupération séquentielle tandis qu’une comparaison de branchement se trouve encore dans un étage ultérieur.
Aléa de données
Un aléa de données se produit lorsqu’une instruction atteint un point où elle a besoin d’une valeur avant qu’une instruction précédente l’ait rendue disponible.
Sans court-circuit, une instruction consommatrice en ID peut lire une valeur périmée avant que son instruction productrice atteigne WB.
Aléa structurel
Un aléa structurel se produit lorsque des instructions ont besoin de la même ressource matérielle limitée pendant le même cycle d’horloge.
Une mémoire à un port ne peut pas servir simultanément l’accès MEM d’un chargement et la récupération d’une autre instruction.
ALUOp
ALUOp est un signal de classe d’instructions sur deux bits qui indique à la commande de l’unité arithmétique et logique d’additionner, de soustraire ou de décoder les champs de fonction de type R.
ALUOp 00 sélectionne l’addition pour l’adresse, même si le funct3 d’un chargement décrit la taille de son accès mémoire.
ALUSrc
ALUSrc est le signal de commande qui sélectionne le second opérande de l’unité arithmétique et logique : dans ce circuit, une valeur de registre à 0 ou une valeur immédiate à 1.
Un rangement fixe ALUSrc à 1 tandis que sa valeur de rs2 circule séparément vers la mémoire.

B

Banc de registres
Un banc de registres est l’ensemble des registres architecturaux, muni de ports de lecture et d’écriture qui accèdent aux registres par leur numéro.
Les deux ports de lecture peuvent fournir les valeurs de x6 et x7 à une instruction arithmétique.
Blocage du pipeline
Un blocage du pipeline retarde certaines opérations du pipeline d’un cycle pour permettre à une instruction d’attendre un opérande ou une autre condition nécessaire.
Pendant un blocage de chargement-utilisation, les instructions plus récentes attendent tandis que le chargement avance vers la production de la valeur.
Bulle
Une bulle est un emplacement inactif du pipeline qui avance sans effectuer le travail d’une instruction modifiant l’état.
Un blocage de chargement-utilisation place une bulle en EX pendant que le chargement poursuit son passage en MEM.

C

Champ de fonction
Un champ de fonction fournit des bits d’instruction qui distinguent des opérations partageant un code opération, comme funct3 et funct7 pour les instructions de type R.
Pour add et sub avec funct3 000, le bit 30 de l’instruction sélectionne l’opération arithmétique exécutée.
Chemin critique
Un chemin critique est le plus long chemin combinatoire nécessaire entre deux frontières de mémorisation ; il limite la réduction possible de la période d’horloge.
Dans un circuit monocycle, le parcours du chargement fixe l’horloge même lorsqu’une addition plus courte s’exécute.
Chemin de données
Un chemin de données est l’ensemble du matériel qui conserve et transforme les valeurs pendant la récupération des instructions, les accès aux registres, les calculs et les accès mémoire.
Une instruction arithmétique envoie deux valeurs de registres dans le chemin de données et reçoit un résultat de l’unité arithmétique et logique.
Cible de branchement
Une cible de branchement est l’adresse d’instruction atteinte lorsqu’un branchement est pris, calculée à partir du PC du branchement et du déplacement signé en octets.
Un branchement pris à l’adresse 600 avec un déplacement de −20 transfère la récupération des instructions à l’adresse 580.
Collision
Une collision se produit lorsque différentes adresses de branchement sélectionnent la même entrée de table de prédiction et que leurs mises à jour interfèrent.
Un branchement majoritairement pris peut perturber l’entrée partagée utilisée par un branchement majoritairement non pris.
Commande câblée
Une commande câblée est une implémentation en logique combinatoire qui transforme les bits d’une instruction en sélections du chemin de données et en activations d’écriture.
Le code opération d’un chargement produit une ligne de commande qui sélectionne une valeur immédiate et active la lecture mémoire et l’écriture en registre.
Commande de l’unité arithmétique et logique
La commande de l’unité arithmétique et logique est le code sur quatre bits qui sélectionne l’opération arithmétique ou bit à bit précise effectuée par cette unité dans cette implémentation.
Le code 0110 sélectionne la soustraction, tandis que le code apparenté 0010 sélectionne l’addition.
Compteur ordinal
Le compteur ordinal est un registre de mémorisation qui contient l’adresse utilisée pour récupérer l’instruction courante dans la mémoire d’instructions.
Après une instruction ordinaire de 4 octets à l’adresse 720, le compteur ordinal passe à 724.
Compteur saturant
Un compteur saturant évolue vers sa borne supérieure ou inférieure sans revenir à l’autre extrémité, ce qui maintient une confiance dans la prédiction.
Une issue prise laisse un compteur à 2 bits à 3 lorsqu’il est déjà fortement pris.
Court-circuit
Le court-circuit dirige une valeur produite d’un registre de pipeline directement vers l’entrée d’une instruction ultérieure avant son écriture dans l’état architectural.
Une soustraction adjacente peut recevoir le nouveau résultat d’une addition depuis EX/MEM sans blocage.
CPI effectif
Le CPI effectif est le nombre moyen de cycles par instruction, incluant les cycles supplémentaires perdus à cause des aléas et de la correction des branchements.
Un long flux à émission simple qui perd 0,12 cycle par instruction a un CPI effectif de 1,12.

D

Débit
Le débit est le nombre d’instructions achevées par unité de temps ; il augmente lorsque les opérations utiles des instructions se chevauchent.
Un pipeline rempli et sans aléa peut achever une instruction à chaque cycle après son remplissage initial.
Décodage à deux niveaux
Le décodage à deux niveaux sépare la commande principale de la classe d’instructions du plus petit décodeur qui sélectionne l’opération précise de l’unité arithmétique et logique.
La commande principale donne ALUOp 10 à add et sub ; le décodage des bits de fonction les distingue ensuite.
Dépendance d’écriture après écriture
Une dépendance d’écriture après écriture se produit lorsque deux instructions écrivent dans le même registre, rendant l’ordre de leurs écritures dans le programme déterminant.
Inverser deux écritures dans x12 peut modifier la valeur observée par les instructions suivantes.
Dépendance d’écriture après lecture
Une dépendance d’écriture après lecture se produit lorsqu’une instruction ultérieure écrit dans un registre qu’une instruction précédente doit d’abord lire.
Déplacer l’instruction qui écrit avant celle qui lit peut modifier le programme, même si le pipeline est exécuté dans l’ordre.
Dépendance de lecture après écriture
Une dépendance de lecture après écriture relie une lecture ultérieure de registre à une écriture précédente qui produit la valeur nécessaire à cette lecture.
Dans une addition suivie d’une soustraction qui lit son résultat, la soustraction dépend de l’addition.
Dépendance mémoire
Une dépendance mémoire relie des accès dont l’ordre compte parce qu’ils peuvent accéder à des octets qui se chevauchent et qu’au moins un des accès les écrit.
Un chargement ne peut pas être déplacé avant un rangement susceptible de fournir les octets qu’il doit lire.
Diagramme de pipeline sur plusieurs cycles
Un diagramme de pipeline sur plusieurs cycles présente les instructions en lignes et les cycles en colonnes, en indiquant l’étage de chaque instruction au fil du temps.
La lecture de la colonne du cycle 5 peut montrer une instruction dans chacun des cinq étages du pipeline.
Double mot
Un double mot est une quantité de données de 64 bits, qui occupe 8 octets et est transférée par les instructions RV64 ld et sd.
Des doubles mots à des adresses alignées consécutives pourraient commencer à 2 048, 2 056 et 2 064.

É

Écriture en registre
L’écriture en registre est le transfert du résultat sélectionné d’une instruction dans son registre de destination lorsque l’écriture du registre est autorisée.
Un chargement écrit la valeur de la mémoire en registre, tandis qu’une addition y écrit le résultat de l’unité arithmétique et logique.
Élément combinatoire
Un élément combinatoire est un circuit dont la sortie dépend de ses entrées actuelles, sans conserver de valeur entre les cycles d’horloge.
Un additionneur recalcule sa sortie lorsqu’une entrée change, avant qu’un registre capture la somme.
Élément de mémorisation
Un élément de mémorisation est un composant matériel qui conserve une valeur d’un cycle à l’autre et la met à jour par une écriture commandée.
Le PC conserve l’adresse de l’instruction courante pendant que l’adresse suivante est calculée.
Émission multiple
L’émission multiple commence plus d’une instruction pendant un cycle d’horloge, en s’appuyant sur des choix du compilateur ou du matériel pour trouver des instructions dont l’exécution peut se chevaucher.
L’émission multiple statique repose sur des groupes formés par le compilateur ; l’émission dynamique laisse le matériel sélectionner les instructions.

E

EX/MEM
EX/MEM est le registre de pipeline qui transmet le résultat de l’exécution, les données à ranger, le numéro de destination et les signaux de commande encore nécessaires pour la mémoire et l’écriture en registre.
Un résultat arithmétique dans EX/MEM peut être transmis par court-circuit aux entrées EX de l’instruction suivante.
Exception précise
Une exception précise laisse toutes les instructions plus anciennes achevées et exclut les effets normaux de l’instruction fautive ainsi que tous les effets des instructions plus récentes.
Le gestionnaire reçoit le PC enregistré de l’instruction fautive et la cause, ainsi que l’état correspondant à cette frontière dans l’ordre du programme.
Exécution en pipeline
L’exécution en pipeline fait se chevaucher les instructions en divisant leur exécution en étages, ce qui permet à différentes instructions d’occuper différents étages simultanément.
Pendant qu’une instruction accède à la mémoire de données, une instruction plus récente peut calculer dans l’unité arithmétique et logique.
Extension de signe
L’extension de signe augmente la largeur d’une valeur binaire signée en copiant son bit de signe dans les positions de poids fort ajoutées, ce qui préserve sa valeur.
Un déplacement de chargement négatif sur 12 bits reste négatif après son extension par ImmGen à la largeur des registres RV64.

F

ForwardA
ForwardA commande le multiplexeur de court-circuit de rs1 : dans ce circuit, 00 choisit ID/EX, 10 choisit EX/MEM et 01 choisit MEM/WB.
Une mise à jour récente du registre de base d’un chargement peut être transmise par court-circuit à son calcul d’adresse.
ForwardB
ForwardB commande le multiplexeur de court-circuit de rs2, qui fournit un opérande de registre et alimente le chemin des données à ranger avant la sélection par ALUSrc.
Un rangement peut recevoir ses données par court-circuit même lorsqu’ALUSrc sélectionne une valeur immédiate pour le calcul de l’adresse.
Front d’horloge
Un front d’horloge est la transition active de l’horloge sur laquelle un élément de mémorisation déclenché sur front capture une prochaine valeur dont l’écriture est autorisée.
Sur le front final d’une addition, rd reçoit la somme et le PC reçoit sa prochaine adresse.

G

Générateur de valeurs immédiates
Un générateur de valeurs immédiates reconstitue les bits de la valeur immédiate selon un format d’instruction et étend la valeur signée à la largeur des registres.
Pour un rangement, ImmGen combine des bits de deux parties de l’instruction afin de retrouver son déplacement.

I

ID/EX
ID/EX est le registre qui transmet à l’exécution les opérandes décodés, les numéros de registres, la valeur immédiate, les informations de fonction et les signaux de commande.
EX combine ALUOp transmis avec les bits de fonction transmis pour sélectionner une opération de type R.
IF/ID
IF/ID est le registre de pipeline entre la récupération et le décodage de l’instruction ; il conserve l’instruction récupérée et le PC associé.
Pendant un blocage de chargement-utilisation, maintenir IF/ID permet de décoder à nouveau l’instruction consommatrice en attente.
Indicateur de résultat nul
L’indicateur de résultat nul est une sortie de l’unité arithmétique et logique qui vaut 1 lorsque le résultat calculé est nul, ce qui permet à une soustraction de tester l’égalité des registres.
Des opérandes égaux font produire Zero = 1 à la soustraction du branchement, ce qui permet à Branch de sélectionner la cible.
IPC
L’IPC, ou nombre d’instructions par cycle, mesure le nombre moyen d’instructions achevées par cycle d’horloge et est l’inverse du CPI moyen.
L’émission multiple peut achever suffisamment d’instructions indépendantes pour atteindre un IPC supérieur à un.

L

Latence
La latence est le temps écoulé entre l’entrée et l’achèvement d’une instruction, en incluant tous les étages qu’elle traverse.
Cinq intervalles d’étage de 270 ps donnent à une instruction une latence de pipeline de 1 350 ps.

M

MEM/WB
MEM/WB est le registre de pipeline qui contient les données de la mémoire, le résultat de l’unité arithmétique et logique, le numéro de destination et les signaux de commande nécessaires à l’écriture en registre.
Une instruction consommatrice d’un chargement après blocage peut prendre son opérande dans la valeur chargée contenue dans MEM/WB.
MemRead
MemRead est le signal de commande qui demande un accès en lecture à la mémoire de données, permettant à un chargement de récupérer les données à son adresse effective.
La récupération dans la mémoire d’instructions est distincte de l’accès à la mémoire de données commandé par MemRead.
MemtoReg
MemtoReg sélectionne la valeur envoyée à l’écriture en registre : dans ce circuit, le résultat de l’unité arithmétique et logique à 0 ou la sortie de la mémoire de données à 1.
Un chargement dont MemtoReg serait fixé à tort à 0 écrirait son adresse au lieu des données chargées.
MemWrite
MemWrite est le signal de commande qui autorise une écriture dans la mémoire de données, de sorte que la valeur à ranger est enregistrée à l’adresse effective sur le front d’horloge.
Une instruction arithmétique doit maintenir MemWrite à 0 pour empêcher des modifications involontaires de la mémoire.
Multiplexeur
Un multiplexeur est un circuit qui transmet l’une de plusieurs entrées de données à une sortie selon un signal de sélection.
Le multiplexeur d’écriture en registre sélectionne les données de la mémoire pour un chargement et le résultat de l’unité arithmétique et logique pour une opération arithmétique.

O

Ordonnancement des instructions
L’ordonnancement des instructions réordonne les instructions tout en préservant les résultats du programme, en plaçant des instructions indépendantes dans des intervalles qui provoqueraient sinon un blocage.
Déplacer un chargement indépendant entre un autre chargement et l’instruction qui consomme son résultat peut supprimer un délai de chargement-utilisation.

P

PCSrc
PCSrc sélectionne le prochain PC ; dans le circuit monocycle de branchement sur égalité, il est le ET logique de Branch et de l’indicateur Zero de l’unité arithmétique et logique.
Une addition qui produit zéro suit tout de même le chemin séquentiel, car son signal Branch vaut 0.
Pénalité de branchement
Une pénalité de branchement est le coût en cycles perdus pour attendre un branchement ou corriger une erreur de prédiction ; elle dépend du moment où la récupération correcte peut reprendre.
Dans un pipeline à cinq étages, une résolution à la fin de EX fait perdre deux créneaux de récupération en cas d’erreur de prédiction.
Pile des adresses de retour
Une pile des adresses de retour suit les adresses de retour des procédures afin que la récupération puisse prédire la cible d’un retour avant que l’exécution normale ne la détermine.
Les appels imbriqués associent naturellement les cibles de retour à l’ordre inverse des appels.
Prédicteur à corrélation
Un prédicteur à corrélation utilise des issues de branchements récents au-delà de l’historique local d’un seul branchement pour aider à prédire une direction.
Une décision peut devenir plus facile à prédire lorsque l’issue d’un branchement précédent révèle le chemin emprunté.
Prédicteur à tournoi
Un prédicteur à tournoi choisit entre des mécanismes de prédiction en utilisant leur réussite observée pour décider auquel se fier pour un branchement.
Un prédicteur peut convenir à une séquence de branchement tandis qu’un autre fonctionne mieux pour une séquence différente.
Prédiction dynamique des branchements
La prédiction dynamique des branchements utilise les issues observées pendant l’exécution pour mettre à jour l’état servant aux futures prédictions de direction.
Les issues prises répétées d’une boucle entraînent le prédicteur avant la sortie inhabituelle non prise.
Prédiction statique
La prédiction statique prédit la direction d’un branchement à l’aide d’une règle fixe qui n’apprend pas des issues pendant l’exécution du programme.
La règle « pris vers l’arrière, non pris vers l’avant » utilise la direction du déplacement du branchement comme indice.
Processeur superscalaire
Un processeur superscalaire utilise le matériel pour sélectionner et émettre plusieurs instructions par cycle, selon les ressources disponibles et les dépendances.
Les erreurs de prédiction de branchement et les chaînes de valeurs dépendantes limitent la quantité de travail parallèle utile sur les instructions.
Purge du pipeline
Une purge du pipeline invalide des opérations du pipeline afin que les instructions du mauvais chemin ou abandonnées pour une autre raison ne puissent pas modifier l’état architectural ni déclencher d’exceptions.
Un rangement purgé ne peut pas effectuer son écriture en mémoire après qu’un branchement pris a redirigé la récupération.

R

Registre de pipeline
Un registre de pipeline capture les données et les signaux de commande dont une instruction a besoin après un étage, et les garde disponibles pendant le cycle suivant.
ID/EX conserve les opérandes d’une instruction décodée pendant que IF/ID reçoit une instruction plus récente.
RegWrite
RegWrite est le signal d’activation qui permet de stocker le résultat sélectionné d’une instruction dans le banc de registres sur le front d’horloge.
Un rangement maintient RegWrite à 0, même s’il lit des valeurs de registres pour son adresse et ses données.
Remplissage du pipeline
Le remplissage du pipeline est l’intervalle initial pendant lequel les instructions entrent successivement et où tous les étages ne contiennent pas encore de travail utile.
La première instruction atteint WB au cycle 5, après le remplissage des premiers étages.

S

Surcoût temporel des registres de pipeline
Le surcoût temporel des registres de pipeline est le coût en temps du stockage et de la transmission des valeurs d’un étage, ajouté au délai logique de l’étage le plus lent.
Un étage limitant de 250 ps avec un surcoût de registres de 20 ps nécessite une période de 270 ps.

T

Table d’historique des branchements
Une table d’historique des branchements stocke de petites entrées d’état de prédiction sélectionnées par des bits de l’adresse du branchement, ce qui permet au comportement récent de guider la récupération.
Deux adresses de branchement peuvent sélectionner une même entrée ; l’état stocké n’appartient donc pas nécessairement à un seul branchement.
Tampon des cibles de branchement
Un tampon des cibles de branchement stocke des adresses cibles et fournit une cible prédite pendant la récupération, avant le décodage du branchement.
Une prédiction de branchement pris peut utiliser un succès dans le tampon des cibles de branchement pour récupérer à la cible prédite au cycle suivant.
Temps d’exécution
Le temps d’exécution est le temps écoulé pour un programme, calculé à partir du nombre d’instructions exécutées, du CPI moyen et de la période d’horloge du processeur.
Un même nombre d’instructions peut s’achever plus rapidement avec un CPI plus élevé si la période d’horloge est suffisamment plus courte.

U

Unité de court-circuit
Une unité de court-circuit compare les numéros sources et de destination et vérifie l’autorisation d’écriture pour sélectionner la bonne source d’opérande prête.
Elle exclut rd = x0, car un résultat calculé ne peut pas modifier la valeur zéro de ce registre.
Unité de détection des aléas
Une unité de détection des aléas repère les cas nécessitant un blocage, notamment un chargement en EX dont la destination est lue par l’instruction en ID.
Une vérification précise des sources utilisées évite de traiter les bits de valeur immédiate de type I comme un second registre source.

V

Valeur indifférente
Une valeur indifférente est une valeur de table de commande qui peut être 0 ou 1 parce que le réglage sélectionné ne peut pas influer sur le comportement de l’instruction.
MemtoReg peut prendre une valeur indifférente pour beq, car aucune écriture en registre n’a lieu.
Vidange du pipeline
La vidange du pipeline est l’intervalle final pendant lequel les instructions récupérées précédemment s’achèvent après l’entrée de la dernière instruction de la séquence.
La dernière instruction doit encore passer par ID, EX, MEM et WB après son cycle de récupération.

À propos de cette unité

Par StudeliSignaler une erreur

Crée ton propre Matériel d'Étude

Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.

Commencer