Processeurs Architecture des ordinateurs 1 Introduction Un processeur exécute

Processeurs Architecture des ordinateurs 1 Introduction Un processeur exécute un programme Composé d’instructions plus ou moins complexes Certaines instructions peuvent nécessiter des données Localisées en mémoire Chargées explicitement Les instructions sont elles-mêmes en mémoire Pour travailler, le processus dispose de registres Zones de stockage temporaires dans le CPU Extrêmement rapides mais en nombre limité Certains ont un rôle particulier (calculs en flottant, calcul d'adresses ...) Informatique générale - processeurs 2 Exécution d'une instruction 3 Cycle d’instruction Traiter une instruction implique les opérations suivantes Lire l’instruction en mémoire : fetch Comprendre ce que fait l’instruction (addition ? multiplication ? …) : decode Aller chercher les opérandes si nécessaire (en mémoire ou en registre) : read Exécuter l’instruction : execute Éventuellement écrire les résultats dans un registre ou en mémoire : write back 4 Cycle d'exécution d'une instruction (revoir TD n° 1) À chaque signal de l'horloge : fetch : l'adresse i de l'instruction (par exemple 183) est transférée de CI vers RA on augmente de 1 la valeur de CI le contenu du mot d'adresse mémoire i va (via le bus de données) dans RI decode : l'instruction est décodée (par exemple ici add 327, c'est à dire ajouter le mot à l'adresse 327 à l'accumulateur) 183 184 NB. on a en général plusieurs registres, pas uniquement un seul accumulateur 5 Cycle d'exécution d'une instruction (revoir TD n° 1) Execute :  l'adresse de la donnée (ici 327) est transférée dans RA  le contenu du mot d'adresse 327 (ici 56) est transféré dans l'UAL, ainsi que le contenu de l'accumulateur (ici 14) : read  les 2 valeurs sont additionnée : execute proprement dit  et le résultat est mis dans l'accumulateur : write back 327 56+14 6 Cycle d'exécution d'une instruction et mémoire Fetch c’est un accès mémoire, donc passe par un cache ; l'instruction est le plus souvent dans le cache L1 Les processeurs modernes ont un cache séparé pour les instructions et pour les données Decode/Execute/Write Back L’instruction est une suite de bits (32, 64 … bits) Le processeur doit décoder cette suite pour savoir si des opérandes sont nécessaires trouver les opérandes (en mémoire ou en registre) configurer les circuits nécessaires pour l’exécution 7 Cycle d'exécution d'une instruction et mémoire Une instruction est en général divisée en micro-instructions propres à chaque type de processeur L’exécution des micro-instructions est effectuée par différentes parties du CPU Arithmetic Logical Unit (ALU) pour les entiers et le calcul d’adresses mémoires Floating Point Unit (FPU) pour les flottants Finalement le résultat est écrit dans un registre, parfois en mémoire 8 Différences entre architectures RISC et CISC Risc : des instructions plus simples CISC (complex instr. set) ●opérations entre registres et mémoire ●modes de calcul d'adresse sophistiqués RISC (reduced instr. set) ●opérations entre registres uniquement ●modes de calcul d'adresse élementaires RISC/CISC CISC 9 Différents formats d'instruction Architecture RISC : format fixe, assez facilement décodable, par exemple  128 codes instruction (27)  32 registres (25)  Résultat et 1er opérande obligatoirement en registre  2e opérande en registre ou valeur littérale entière sur 13 bits 10 Différents formats d'instruction Architecture CISC : format variable, plus compliqué à décoder 11 Exécution en pipeline 12 Pipeline Chaque instruction passe par différentes étapes ces étapes n'utilisent pas les mêmes circuits donc pas besoin d’attendre qu’une instruction finisse pour en traiter une autre comme pour une chaîne de montage (automobiles ...) Pipeline un pipeline est un ensemble d’éléments en série chargés d'une partie de l'exécution d'une instruction le nombre d’éléments P est appelé profondeur du pipeline 13 Pipeline  Pipeline basique à 5 étages dans une machine RISC  IF = Instruction Fetch,  ID = Instruction Decode,  EX = Execute,  MEM = Memory access,  WB = Register write back  on exécute donc N instructions en N + P - 1 cycles (au lieu de N×P si pas de pipeline) 14 Limitations du pipeline Une étape du pipeline s’exécute en général en 1 cycle CPU Le pipeline ne réduit pas le temps nécessaire pour une instruction Mais il augmente le nombre d’instructions par cycle (à un moment donné, autant d'instructions en cours d'exécution que la profondeur du pipeline) Donc amélioration des performances du processeur Ok, donc il suffirait d’avoir un très long pipeline pour avoir de meilleurs performances ? Oui mais non 15 Limitations du pipeline Il faut pouvoir découper une instruction en étapes Complexité du processeur Le pipeline a un coût Le passage d’une étape à une autre n’est pas instantané Une instruction « pipelinée » prendra un temps plus long qu’une instruction classique Linéaire en fonction du nombre d’étapes Il augmente les accès mémoires 16 Structural Hazard Deux étapes différentes du pipeline peuvent nécessiter les même circuits du processeur Par exemple Une instruction fait des calculs sur un entier Elle sera découpée en micro-instructions, dont une fera appel à l’ALU Une autre instruction entre dans le pipeline : quand elle accèdera à la mémoire elle aura aussi besoin de l’ALU C’est ce qu’on appelle un structural hazard 17 Structural Hazard On a un Structural Hazard quand des instructions dans le pipeline nécessitent au même moment les même ressources Dans cette situation, il faut bloquer le pipeline Stall (instruction bloquée dans sa progression) C’est l’instruction la plus avancée qui a priorité Toutes les instructions arrivées après elle dans le pipeline sont bloquées Celles arrivées avant peuvent continuer 18 Éviter les structural hazard Comment empêcher les structural hazard Il faut que toutes les ressources soient suffisamment nombreuses pour les éviter Autrement dit : quelle que soit la combinaison d’instructions dans le pipeline, il doit y a toujours suffisamment de ressources Avoir plusieurs ALU Avoir plusieurs bus d’accès mémoire …. Très coûteux et complexe (mais en partie fait dans les processeurs les plus modernes) 19 Data Hazard Le pipeline change le timing d’exécution des instructions Deux instructions séquentielles peuvent avoir leur exécution qui se recouvre partiellement Exemple : ADD R1, R2, R3 // R1 ←R2+R3 SUB R4, R1, R5 // R4 ←R1­R5 Dans une exécution avec pipeline, l’instruction 2 lira la valeur de R1 avant qu’elle ne soit écrite ! Calcul sur l’ancienne valeur de R1 ⇒ résultat faux ! Il faut donc bloquer le pipeline dans ce cas (stall) IF ID MEM EX WB IF ID MEM EX WB écriture dans R1 lecture de R1 20 Control Hazard Le pire de tous les problèmes Exemple : la boucle while while (a < b) a := a + 1; En assembleur (fictif) _w: cmp a,b // compare a et b jge _e // saut si a ≥ b inc a // a := a+1 jmp _w // saut inconditionnel _e: 21 Control Hazard  L’instruction jge entre dans le pipeline  On ne sait pas encore le résultat de la comparaison, donc on ne sait pas s'il faut sauter (suivre une branche) à _e ou s'il faut continuer dans la branche en séquence  Que fait-on en attendant ? On peut bloquer le pipeline jusqu’à savoir : pas du tout efficace  L’instruction jge doit fournir 2 informations Savoir si oui ou non on doit sauter : quelle est l’adresse du saut ? Pour limiter l’attente dans le pipeline, il faut ces 2 informations le plus vite possible On doit donc modifier le pipeline pour les avoir le plus tôt possible Limitera le nombre de cycles de blocage Mais pas suffisant, un programme a énormément de sauts 22 Prédiction de branchement Au lieu d’attendre, pourquoi ne pas commencer à exécuter l’instruction suivante ? On fait l’hypothèse que le saut n’aura pas lieu Si le saut n’a pas lieu, on n'a rien perdu ! Le pipeline n’a pas été bloqué, rien (registres, mémoire) n'a encore été modifié par l'instruction : performance optimale  Si le branchement a lieu Tout ce qui est entré dans le pipeline après l’instruction n’aurait pas dû y entrer Il faut vider le pipeline : flush Plus le pipeline est long plus c’est coûteux 23 Prédiction de branchement On peut mieux faire que toujours décider de ne pas suivre une branche Partie du CPU dédiée à cette tâche (Branch Processing Unit - BPU) Permet d’obtenir un taux de succès élevé Souvent basé sur l’historique d’exécution Si une branche n’a pas été prise récemment, très probablement elle ne le sera pas dans un futur proche Taux de succès très élevé Par exemple 91% sur les Pentium 3 (1999) 24 Réordonnancement d’instructions Pourquoi ne pas traiter les problèmes en amont, avant d’entrer dans le pipeline ? Exemple : ADD R1, R2, R3 // R1 ←R2 + R3 SUB R4, R1, R5 // R4 ←R1 – R5 ADD R6, R7, R8 // R6 ←R7 + R8 ADD R2, R3, R5 // R2 ←R7 + R8 Dans cet ordre, il y a dépendance des données (R1), donc blocage du pipeline Mais si on fait les 3 ADD en premier, alors plus de problème ADD R1, R2, R3 // R1 ←R2 + R3 ADD R6, R7, R8 // R6 ←R7 + R8 ADD R2, R3, uploads/S4/ 7-processeurs.pdf

  • 24
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Jan 24, 2022
  • Catégorie Law / Droit
  • Langue French
  • Taille du fichier 1.5397MB