Ch 5 : La Prédiction des Branchements IUP3/ Master Info. 1 Smail Niar ISTV Université de Valenciennes smail.niar@univ-valenciennes.fr Smail.Niar@univ-valenciennes.fr
Les prédictions de branchement Il est intéressant de réduire au max les aléas de contrôle afin de maintenir un IPC=1 pour un processeur pipeliné, ou IPC>>1 pour un SS ou un VLIW Superscalaire ou VLIW: les instructions arrivent n fois plus rapidement => n cycles perdus à chaque suspension ou à chaque mauvaise prédiction de direction de branchement. Smail.Niar@univ-valenciennes.fr
Prédiction branchements ….suite 15 à 30% des instructions sont des branchements Le résultat de la condition du branchement est connu tard ( cycle 4 sur MIPS/DLX) La cible du branchement est connu tard dans le pipeline : cycle 4 dans Mips pipeliné et dans Intel Xscale cycle 11 sur Pentium Pro (plus sur le pentium4) Cycle 6 sur Dec alpha 21164 idée: Evaluer ou prédire (spéculation) au plus tôt la condition et l ’adresse de branchement Si la prédiction n ’est pas bonne en fait marche arrière (annulation) Smail.Niar@univ-valenciennes.fr
3 cycles perdus à chaque branchement (pris) g C 1 T i m ( n c l o k y s ) 4 b q $ , 3 7 P r a x u t d I M D 2 w 5 6 8 9 Smail.Niar@univ-valenciennes.fr
Solution uniquement pour pour : beqz R1, etiq Deux cycles perdus au lieu de 3 Smail.Niar@univ-valenciennes.fr
possibilités dans le traitement des aléas de contrôle #1: Attendre et suspendre le pipeline tant que le branchement n ’est pas résolu (résultat compa. non connu) #2: On prédit toujours que le branchement n ’est pas pris Exécuter les instruction qui suivent le branchement Annuler les instructions chargées si branchement pris Il n’y a pas de danger de modifier l’état des registres car l ’écriture se fait à la fin du pipeline, après que la condition a été évaluée Smail.Niar@univ-valenciennes.fr
Prédiction Branchement ..suite Dans 47% des branchements MIPS, le branchement n ’est pas pris Avantage : PC+4 à été déjà calculé, il suffit de l ’utiliser pour avancer #3: On prédit que le branchement est pris et on commence à exécuter les instructions du branchement 53% des branchement sont pris dans le cas de la machines MIPS Mise en œuvre : pour chaque instruction de branchement on stocke l ’@ du branchement dans une mémoire cache spécialisée Smail.Niar@univ-valenciennes.fr
Branchement Prédit pris Branch Target Buffer BTB Adresse des branchements valide adresse de l ’instruction 1/0 CP+4 CP Smail.Niar@univ-valenciennes.fr Control 1 0 Lors de la phase Fetch Instruction on écrit dans PC, l ’@ de la prochaine instruction à exécuter soit PC + 4 ou bien l ’@du branchement CP
Prédiction par le compilateur Statique Les branchement arrière sont toujours prédit pris et les branchement avant sont toujours prédit non pris Smail.Niar@univ-valenciennes.fr Taken backwards Not Taken Forwards Always taken
Le branchement retarde Delayed Branch #4: Delayed Branch(se faire aider par le compilo) Les n instructions suivant l ’instr Branch sont toujours exécutées (pas de prédiction) branch instruction sequential successor1 sequential successor2 ........ sequential successorn branch target if taken cas particulier : BEQZ 2 cycle d ’attente pour le calcul de l’adresse de branchement => n=2 (2 instruction dans le délai) cf. tr 25 On peut soit déplacer des instructions ou mettre des nops Smail.Niar@univ-valenciennes.fr
Une instruction après le branchement est toujours exécutée add r4, r5, r6 Beqz r4, etiq Sub r6, r3, r2 Add r1, r2, r3 …… …. etiq: Sub r6, r3, r2 Add r1, r2, r3 add r4, r5, r6 Beqz r4, etiq …… …. etiq: Smail.Niar@univ-valenciennes.fr
La prédiction dynamique des branchements Utilisation d ’une mémoire « tampon de branchement » BHT : Branch History Table (prédiction) BHT Indexée par l ’adresse de l’instruction branchement 1 bit à chaque branchement 0 on prédit «Non pris » noté NP ou NT 1 on prédit « pris » noté P ou T si la prédiction n ’est pas bonne on inverse le bit Smail.Niar@univ-valenciennes.fr
Prédicteur sur 1 bit 1 BOUCLE etiq: ….. ……. …….. boucle: bne r1,r2, etiq Supposant: Bit prédiction initialisé à NT 0 il y a 10 itérations Première itération : Prédiction NT , erreur Dernière itération : Prédiction T, erreur Smail.Niar@univ-valenciennes.fr Inconv Boucles : si le branch est toujours pris il y a 2 prédictions incorrects (mispredictions): la première et la dernière
Exemple : Si boucle externe fait m itérations etiq1: i1 début Boucle1 i2 ….. etiq2: i3 Début Boucle2 i4 Si cond go to étiq2 …. Go to etiq1 Si boucle externe fait m itérations et la boucle interne fait n itération: 2m fausses prédictions/ mn itérations exemple m=n=10 20% de fausses prédictions Smail.Niar@univ-valenciennes.fr
Schéma de prédiction avec 2 bits 11 P 10 01 NP 00 On associe à chaque branchement deux bits YX Si Y=1 on prend le branch si Y= 0 on ne prend pas le branch Smail.Niar@univ-valenciennes.fr
Rappel : BTB : Branch Target buffer, Buffer des @ destinations des branchements BHT : « tampon de branchement » : Branch History Table, table des prédictions pour chaque (basée sur l’historique) PC Etiquette, @ Branchement Smail.Niar@univ-valenciennes.fr (prédicateur BIMODAL) PC 10
La corrélation entre les branchements Dans certains programmes, il y a des relations entre les instructions de branchements Branchements « biaisés » Un exemple de la vie courante: Orientation des étudiants pour des cours de mise à niveau. Les étudiants entrant à une université proviennent de 2 options . A : Option Math B : Option Physique b1: Test à l'entrée du lycée b2: Test à l ’entrée de l’université. Collège Test à l’entrée du lycée Série Math appliqué Lycée Université de l ’université. b1 b2 MIAS SPI Smail.Niar@univ-valenciennes.fr
Les résultats des test à l ’entrée de l ’université ne sont connus qu ’un mois après, mais il faut commencer l ’année….? Collège Collège Test à l’entrée du lycée b1 Test à l’entrée du lycée b1 Série Math Série Math Série appliqué Série appliqué Test à l ’entrée de l ’univer. Test à l ’entrée de l ’univer. Smail.Niar@univ-valenciennes.fr b2 b2 bonne prédiction mauvaise prédiction
(Transparent P.Michaud IRISA) Smail.Niar@univ-valenciennes.fr (Transparent P.Michaud IRISA)
Exemple Si d==0 avant le premier « If » , alors dans le deuxième If on trouvera d==1 Supposons que d est dans R1 if (d==0) /*branchement b1*/ d=1 if(d==1) /*branchement b2*/ ……. Smail.Niar@univ-valenciennes.fr
Exemple if (d!=0) go to L1 /*branchement b1*/ d=1 L1 : Bnez R1, L1 ;branch vers L1 si d<>0 Addi R1, R0, #1 ;d= =0, alors d =1 L1: Sub R3, R1, #1 ;d- - Bnez R3, L2 ;branch. B2 (si d<>0) ….. L2: ….. Smail.Niar@univ-valenciennes.fr
Résultat : Si on ne branche pas sur L1 alors NT : Not Taken ou branchement non pris NP Smail.Niar@univ-valenciennes.fr
Performance de la prédiction avec 1 bit avec une séquence: 2, 0, 2, 0 Avec 1 bit 100% de mauvaise prédiction, initialement P1=NP P2=NP Branch1 Branch. 2 D= ? Prédiction b1 Action Nouvelle prédiction Predicti on b2 b2 2 NP P* P NP* Smail.Niar@univ-valenciennes.fr
^m chôse avec deux bits par branchement 11 P 10 01 NP 00 ^m chôse avec deux bits par branchement avec deux bits Supposons qu ’on démarre de l ’état 00. A chaque branchement est associé deux bits (le prédicateur) NP D= ? Prédiction Action Nouvelle Predicti Action Nouvelle b1 b1 prédiction on b2 b2 prédiction b1 b2 2 NP P* NP NP P* NP 00 00 01 01 Smail.Niar@univ-valenciennes.fr NP NP NP NP NP NP 01 00 00 01 2 NP P* NP NP P* NP 01 00 00 01 NP NP NP NP NP NP 01 00 01 00 50 % de mauvaise prédictions sur les deux branchement
Prédiction avec un bit et un bit de corrélation Chaque branchement est représenté dans la table par deux bits : Prédiction si dernier branchement non pris/prédiction si dernier branchement pris Exemple: pour b1= P/NP Si dern Branch non pris alors branchement Si dern Branch pris alors pas branchement D= ? Dernière Branch Prédiction b1 Action Nouvelle prediction Predicti on b2 b2 prédiction 2 NP NP/NP P* P/NP P NP/P Smail.Niar@univ-valenciennes.fr P P/NP NP P/NP NP NP/P NP NP/P Deux mauvaises prédictions au début notées par *
Mise en œuvre matérielle Table des prédicateurs Corrélation Prédiction 1 bit de prédiction et 1 bit de corrélation 1 Adresse branchement ... ... prédiction 1 Smail.Niar@univ-valenciennes.fr ... ... 1 0 selectionner dernier branchement bascule D
Prédiction avec deux bits et deux bits de corrélations 11 10 01 00 ... Pattern History Tables PHTs (2-bit predictors) (1 , 1) Adresse branchement 10 bits Registre de l’historique des branchements Branch History Register BHR (2-bit shift register) 1 selectionner 1023 on prend en compte les deux derniers branchements Il y a 4 combinaisons possibles 00, 01, 10, 11 pour chaque combinaison il y a deux bits de prédictions. Smail.Niar@univ-valenciennes.fr Le registre BHR indique le résultat des deux derniers branchements
Résumé des symboles BTB : Branch Target buffer, Buffer des @ destinations des branchements BHT : « tampon de branchement » : Branch History Table, table des prédictions (basée sur l’historique) PHT : c ’est une BHT qui prend en compte les derniers branchements. Pour chaque configuration des n derniers branchements il y a une prédiction (un BHT) BHR : Branch History Register, registre à décalage contenant les résultats des derniers branchements exécutés. Utilisé pour accéder à la PHT Smail.Niar@univ-valenciennes.fr
Prédicteurs GAg et GAp 1 seul BHT Gag (4 bits) Deux bits de prédiction 1100 ... 1 1 Index predict: taken BHR Branch Pattern History Table (PHT) shift direction Gag (4 bits) 1 seul BHT Deux bits de prédiction n ... 2**n tables, # BHT 1 1 1 Index @ de branchements BHR GAp (4 bits) 1 seul reg d ’historique mais avec @de branchement Smail.Niar@univ-valenciennes.fr
Plusieurs Registres à décalage (historique local) ... 1 1 Index BHT 0 0 Branch address Pag(4) Plusieurs reg à dec d ’historique, 1 par branchement mais pas d ’@ 1 BHR par Branch Smail.Niar@univ-valenciennes.fr ... # BHT 1 1 b1 Index Per-address BHT 0 0 Branch address b2 Branch address b1 1 b2 Pap(4)
Évaluation des Performances 3 programmes de références SPEC CPU2000 : Gcc (compilateur), Equake (….), Wupwise (…) Simulateur : SimpleScalar, Pénalité miss Pred = 3 Sauter : 5M inst et exécuter : 10M, env 20% ins sont des branchements BTP : 512 sets et associativité : 4 Les 4 prédicateurs avec une complexité equivalentes Complexité évaluée avec Wattch : Évaluation de la consommation de puissance (4.9 nJ par accès à la BTP+BHR+BHT) #BHR #BHT #Corrélation = # bits reg Dec Gag : 1 1*4096 12 Gap 1 16*256 8 Pag 8 1*4096 12 Pap 8 16*256 4 Smail.Niar@univ-valenciennes.fr
Échelle Logarithmique Nombre de Misses Échelle Logarithmique Smail.Niar@univ-valenciennes.fr
Smail.Niar@univ-valenciennes.fr
Smail.Niar@univ-valenciennes.fr
Autres prédicateurs à deux niveaux... gselect : Concaténation de qq bits de poids faible de l ’@ce branchement avec le registre BHR gshare : Appliquer un OUX sur une partie de l’@ de branchement et le BHR Addresse Instruction. BHR gselect4/4 gshare8/8 00000000 00000001 00000001 00000001 00000000 00000000 00000000 00000000 11111111 00000000 11110000 11111111 11111111 10000000 11110000 01111111 Smail.Niar@univ-valenciennes.fr
gselect et gshare gselect gshare m+n m m n m m PHT PHT Conca OUX PC Smail.Niar@univ-valenciennes.fr m n m m PC BHR PC BHR gselect gshare
Quelques chiffres Processeurs hautes performances : P4 : prédiction dynamique des branchements : Adresse de la prochaine Trace BTB : 4 way set associative, 512 lignes, BHT : 4 bits. Lorsque pas de prediction possible Pred Statique : Forward NT, Backward T G5 : 3 tables Local/global/selector taille de 16KB Athlon 64 bits : Digital/Compaq 21386 : Processeurs embarqués : Arm7 : Intel Xscale : BTB 128-entry (the address of a branch instruction, the target address associated with the branch instruction, and a previous history of the branch being taken or not taken), 4 states predictions (two bits) Smail.Niar@univ-valenciennes.fr