Le pipeline Laboratoire de Systèmes Logiques
Le pipelining Technique utilisée pour optimiser le temps d exécution d un processus répétitif. Si le temps d exécution d un processus est T p, l exécution séquentielle de m processus prend un temps T t : T t = mt p Si le processus est décomposé en n étapes, chacune d une durée Ts, alors: T t = mnt s Page 2
Solution en pipeline: à chaque étape du processus est affectée une ressource indépendante, de façon à pouvoir exécuter plusieurs processus en parallèle, chacun à une étape différente T s T t = T p + (m-1)t s = n T s + (m-1) T s = (m+n-1) T s T p si m >> n alors T t» m T s Page 3
entrée clock registre étape 1 Flowthrough time: temps pour produire le premier résultat registre étape n registre Clock cycle time: temps entre deux résultats (période d une étape plus le retard du registre) Déterminé par l étape la plus longue sortie Page 4
Logiquement, un meilleur résultat est obtenu en augmentant le nombre d étapes: elles seront plus simples et la fréquence d horloge pourra ainsi être plus élevée. Cette approche présente toutefois plusieurs problèmes: la décomposition fine est très difficile chaque nouvelle étape ajoute un nouveau retard de registre, augmentant ainsi le flowthrough time l indépendance entre les étapes est plus difficile à obtenir la vitesse de lecture des entrées et d écriture des résultats augmente en conséquence Page 5
Exemple de pipeline arithmétique A 4 B 0 0 1 0 0 1 0 4 0 + 3 1 0 4 0 + 1 0 4 + 5 Page 6 AxB
4 4 3 1 0 0 4 + registre registre registre CK 4 4 4 Page 7
Pipeline des instructions d un processeur i t t+1 t+2 t+3 t+4 t+5 t+6 t+7 t+8 i+1 i+2 i+3 i+4 Page 8
Utilisé depuis le CDC 6600 Un pipeline parfait conduit à exécuter une instruction par cycle Pour une technologie donnée, la fréquence est plus élevée si le nombre de niveaux (pas, phases, étapes) du pipeline augmente Il est tout à fait naturelle d avoir un pipeline à trois phases: fetch, decode, execute Page 9
Aléas d un pipeline Aléas de structure: l implémentation empêche une certaine combinaison d opérations Aléas de données: le résultat d une opération dépend de celui, pas encore produit, d une instruction précédente Aléas de contrôle: l exécution d un saut est réalisée avec un certain retard Si un aléa est détecté, la solution la plus simple est d arrêter le pipeline (stall): les instructions qui précédent celle qui produit l aléa peuvent continuer, mais toutes les autres sont arrêtées jusqu à la disparition de l aléa Page 10
Exemple: le processeur MIPS Phase IF: recherche de l instruction (fetch) Phase ID: décodage de l instruction et lecture des registres opérandes Phase EX: exécution de l opération ou calcul de l adresse de mémoire Phase MEM: accès de la mémoire ou écriture dans le PC de l adresse de saut (la condition a besoin du résultat de l opération) Phase WB: écriture dans un registre du résultat de l opération (write back). Ne suit pas la phase EX pour prévoir le cas d un LOAD Page 11
Certaines phases sont inutiles pour certaines instructions, mais toutes les instructions ont une durée de 5 cycles Le PC doit pouvoir être incrémenté à chaque cycle On doit lire une instruction à chaque cycle On doit pouvoir lire une donnée à chaque cycle On doit disposer de deux MAR (memory address register), un pour les données et un autre pour les instructions (avantage pour une architecture de Harvard) Le format unique d instruction est avantageux Page 12
PC Mémoire ALU IMAR PC IR M[IMAR] PC PC + 4 A RS1 B RS2 load ou store: DMAR A + (partie du IR) MDR B opération: ALUout A op (B ou (partie du IR)) saut conditionnel: ALUout PC + (B ou (partie du IR)) cond RS1 op 0 if (cond) load: PC ALUout MDR M[DMAR] store: M[DMAR] MDR opération: Rd ALUout load: Rd MDR Page 13
Aléas de données Deux instructions contigües, i et j, peuvent présenter trois types d aléa de données: RAW (read after write): j essaie de lire une source avant que i ne l ait modifiée WAR (write after read): j essaie de modifier une destination avant que i ne l ait utilisée comme source (cas impossible dans MIPS) WAW (write after write): j essaie d écrire dans une destination avant que i ne l ait fait: l ordre normal d écriture est modifié (cas impossible dans MIPS) Page 14
Exemple: ADD R1, R2, R3 SUB R4, R1, R5 ADD R1 R2 + R3 R4 R1 - R5 t t+1 t+2 t+3 t+4 t+5 IF ID EX MEM WB SUB IF ID EX MEM WB on a besoin ici de R1, dont la valeur est disponible seulement deux coups d horloge plus tard R1 R2 + R3 Page 15
Solution: forwarding ou bypassing On cherche les opérandes à la sortie de l ALU, sans attendre leur écriture dans les registres On doit empiler n résultats à la sortie de l ALU, où n est le nombre de cycles où l aléa peut être présent (3 dans l exemple précédent) Le nombre de cycles peut être réduit de 1 si l écriture dans les registres a lieu pendant la première moitié de WB et la lecture des opérandes pendant la seconde moitié de ID Page 16
registres trajectoires de bypass Page 17
Exemple: LW R1, 32(R6) R1 M[R6 + 32] ADD R4, R1, R7 R4 R1 + R7 SUB R5, R1, R8 AND R6, R1, R7 LW t t+1 t+2 t+3 t+4 t+5 IF ID EX MEM WB ADD IF ID EX MEM WB M[R6 + 32] R1 est cherché ici pour le ADD Page 18
Le registre d un LOAD ne peut pas être utilisé comme source d une opération postérieure, et cela pendant un certain nombre de cycles: c est un delayed LOAD Le nombre de cycles où le registre ne peut pas être utilisé est la pénalité du LOAD (load delay ou load slot) Le forwarding n apporte pas de solution à ce cas. La solution la plus simple est ici le stall ou interlock: le pipeline est arrêté jusqu à ce que l aléa disparaisse (un cycle dans notre exemple) Le compilateur peut empêcher que ces cas arrivent, ajoutant des NOPs après le LOAD, dans le pire des cas Page 19
Aléas de contrôle Le pipeline doit chercher une nouvelle instruction avant que la présente soit exécutée. Si l instruction présente est un branchement conditionnel, avant que l adresse de saut soit calculée d autres instructions ont été cherchées. Pour notre exemple, la pénalité de branchement est de 3 cycles. Elle augmente avec la profondeur du pipeline. Si le processeur est superscalaire à n voies, la pénalité de branchement peut être multipliée par n. En moyenne, on trouve un branchement chaque 4-6 instructions... Page 20
Le blocage du pipeline est possible seulement après le décodage de l instruction de saut, quand l instruction suivante a déjà été cherchée. Pour notre exemple: t t+1 t+2 t+3 t+4 t+5 t+6 t+7 t+8 t+9 BRANCH IF ID EX MEM WB i + 1 IF IF ID EX MEM WB i + 2 IF ID EX MEM WB Une autre solution est celle de laisser régler le problème au compilateur, comme dans le cas des LOADs Bien entendu, le traitement des interruptions complique encore les choses... Page 21
Prédiction statique: Prédiction des sauts 486: par défaut le branchement n est pas pris MicroSparc et HP-PA: les branchement en arrière sont pris MIPS et PowerPC: le compilateur peut choisir le sens Prédiction dynamique: la prédiction pour un même branchement peut changer en cours d exécution, d après l histoire du comportement du branchement solution simple: prendre le même comportement que la dernière fois. Solution adoptée par l Alpha et le K5. le Pentium utilise une Branch History Table (BHT) pour garder trace du nombre de fois où le branchement a été pris le Pentium Pro est le premier processeur à employer une prédiction dynamique à deux niveaux. Une mauvaise prédiction a une pénalité de 15 cycles au minimum Page 22
95% Pentium Pro Branch prediction accuracy on SPECint92 90% 85% 80% 75% 70% 65% 60% 40% 486 SuperSparc MicroSparc-2 PPC601 21064 R8000 21064A 21164 PPC620 UltraSparc Pentium Always Not Taken Always Taken BTFN Compiler Directed 1-bit History 2-bit History Two Level Branch prediction algorithm Page 23
Le BHT possède une ligne par branchement. Et chaque ligne est un compteur-décompteur à deux bits: si le branchement est pris, on incrémente (avec arrêt à 3), on décrémente autrement (avec arrêt à 0). Un branchement est pris si le bit de poids fort de son compteur correspondant est égal à 1. Page 24
Dans la prédiction dynamique à deux niveaux il y a un BHT par branchement. Et le compteur de chaque ligne est une indication du nombre de fois qu une certaine séquence pris-non pris du branchement a eu lieu: le pointeur de ligne est un registre à décalage qui reçoit un 1 si le branchement est pris et un 0 dans le cas contraire. 111010 11 10 00 10 111010 01 11 Page 25