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 ←R1R5 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
Documents similaires
-
24
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 24, 2022
- Catégorie Law / Droit
- Langue French
- Taille du fichier 1.5397MB