Architectures RISC et superscalaire Pipe-Line synchrone version 1.0
Introduction Les processeurs RISC (Reduced Instruction Set Computer) sont apparus au début des années 80, grâce au développement des capacités d intégration VLSI et au développement des technologies de compilation. Les pionniers sont : - Université de Berkeley (Prof. D.Patterson) SPARC 1981 - Université de Stanford (Prof. J.Hennessy) MIPS 1982 L objectif est d améliorer les performances des processeurs, en déplaçant la frontière entre matériel et logiciel, et en utilisant la technique du pipeline synchrone. Les processeurs à architecture RISC sont très utilisés dans les systèmes multi-processeurs intégrés sur puce (MPSoC), car ils ont un excellent rapport puissance de calcul / mm2 de silicium. 2
Introduction (suite) On présente dans ce cours une réalisation «pipe-linée» du processeur P32 présenté en cours. Cette architecture exécute le même jeu d instruction que l architecture micro-programmée, (elle peut exécuter le même code binaire), mais elle est 4 ou 5 fois plus rapide. 3
Evaluation des performances La principale métrique est le chronomètre On cherche à minimiser le temps d exécution du programme, en diminuant la valeur du CPI sans augmenter TC : Texec = N * CPI * TC N : nombre total d instructions exécutées CPI : nombre moyen de cycles par instruction TC : temps de cycle CPI = k CPI k * k, où les { ak } sont les fréquences mesurées pour les différents types d instruction du programme. 4
MIX instructions Tous les types d instructions n ont pas la même fréquence d utilisation. Les valeurs { ak } sont dépendantes de chaque programme particulier, mais on peut définir des valeurs typiques, par classes d instructions : add lw sw bne Instructions de calcul entre registres Instructions de lecture en mémoire Instructions d écriture en mémoire Instructions de branchement (conditionnel ou non) 45% 20% 10% 25% 5
Principe du pipe-line synchrone Exécution séquencielle : instruction i instruction i+1 instruction i+2 temps Exécution parallèle pipeline : instruction i instruction i+1 instruction i+2 On n attend pas que l instruction i ait fini de s exécuter pour démarrer l instruction i+1 6
Pipeline à 5 étages lw Ai, imd(aj) (lecture mémoire) I FETCH DECODE IR <= M[PC] PC<= PC+1 OP1<= A(R) OP2<= A(S) EXECUTE RES<= OP1+IR MEMORY WRITE DT<= M[RES] A(T) <= DT instruction : COP R S T IMD 7
Pipeline à 5 étages I FETCH DECODE lw Ai, imd(aj) (lecture mémoire) IR <= M[PC] PC<= PC+1 OP1<= A(R) OP2<= A(S) add Ak, Aj, Aj (addition registres) IR <= M[PC] PC<= PC+1 OP1<= A(R) OP2<= A(S) EXECUTE RES<= OP1+IR RES<= OP1+OP2 MEMORY WRITE DT<= M[RES] A(T) <= DT DT<= RES A(T) <= DT instruction : COP R S T IMD 8
Pipeline à 5 étages lw Ai, imd(aj) add Ak, Aj, Aj bne Ai, imd (lecture mémoire) (addition registres) (branchement) I FETCH IR <= M[PC] IR <= M[PC] IR <= M[PC] PC<= PC+1 PC<= PC+1 PC<= PC+1 DECODE OP1<= A(R) OP1<= A(R) OP1<= A(R) OP2<= A(S) OP2<= A(S) OP2<= A(S) PC<= PC+imd PC<= PC+imd PC<= PC+imd si (A(R)!=0) & bne si (A(R)!=0) & bne si (A(R)!=0) & bne EXECUTE RES<= OP1+IR RES<= OP1+OP2 NOP MEMORY DT<= M[RES] DT<= RES NOP WRITE A(T) <= DT A(T) <= DT NOP instruction : COP R S T IMD 9
Exécution parallèle des instructions Dans un pipe-line à 5 étages, on a 5 instructions en cours d exécution : instruction i instruction i+1 instruction i+2 instruction i+3 instruction i+4 I0 D0 E0 M0 W0 I1 D1 E1 M1 W1 I2 D2 E2 M2 W2 I3 DD E3 M3 W3 I4 D4 E4 M4 W4 temps 10
Les difficultés à résoudre 1/ Conflits de ressource Que se passe-t-il si deux étages du pipe-line ont desoin d utiliser une même ressource matérielle? 2/ dépendances de données Que se passe-t-il lorsque l instruction I+1 utilise un résultat calculé par l instruction I+1? 3/ dépendances de contrôle Que se passe-t-il pour l instruction I+1 si l instruction i est un branchement pris? 11
Conflits de ressource (1) Deux accès à la mémoire au même cycle! - lecture instruction : I4 - lecture de données : M1 i i+1 i+2 i+3 i+4 I0 D0 E0 M0 W0 I1 D1 E1 M1 W1 I2 D2 E2 M2 W2 I3 DD E3 M3 W3 I4 D4 E4 M4 W4 12
Conflits de ressource (2) Règle générale : Chaque étage du pipe-line doit disposer de ses propres ressources matérielles! exemple 1 : Le processeur doit posséder deux ports indépendant pour lire les instructions et pour lire(ou écrire) les données Instruction 32 32 Donnée Adresse Instruction 32 Processeur 32 Adresse Donnée exemple 2 : l étage IFETCH doit disposer de son propre additionneur pour effectuer l incrémentation PC<= PC+1, et ne peut utiliser l Unité Arithmétique et Logique de l étage EXEC 13
Dépendances de données (1) Dépendance de type producteur / consommateur : L instruction (i) produit un résultat utilisé par une des instructions (i+1), (i+2) ou (i+3) t0 t1 t2 t3 t4 t5 t6 t7 i i+1 i+2 i+3 i+4 I0 D0 E0 M0 W0 I1 D1 E1 M1 W1 I2 D2 E2 M2 W2 I3 DD E3 M3 W3 I4 D4 E4 M4 W4 L instruction (i) écrit le résultat dans le registre destination en fin de cycle t4, et l instruction i le lit en début de cycle t2 14
Dépendances de données (2) t0 t1 t2 t3 t4 t5 t6 t7 add Ak,Ai,Aj i+1 i+2 i+3 i+4 I0 D0 E0 M0 W0 I1 D1 E1 M1 W1 I2 D2 E2 M2 W2 I3 D3 E3 M3 W3 I4 D4 E4 M4 W4 Si l instruction productrice est une instruction de calcul, on peut résoudre le problème par un mécanisme de «bypass» La dépendance est masquée : Tout se passe «comme si» l instruction (i) avait terminé son exécution lorsque l instruction (I+1) démarre, et la sémantique d exécution séquentielle des instructions est préservée. 15
Dépendances de données (3) t0 t1 t2 t3 t4 t5 t6 t7 lw Ai, imd(ak) i+1 i+2 i+3 i+4 I0 D0 E0 M0 W0 I1 D1 E1 M1 W1 I2 D2 E2 M2 W2 I3 D3 E3 M3 W3 I4 D4 E4 M4 W4 Si l instruction productrice est une instruction de lecture en mémoire, la dépendance de donnée entre (i) et (i+1) ne peut pas être masquée, car la donnée n entre dans le processeur qu à la fin du cycle t3. En revanche, les dépendances entre (i) et (i+2) ou (i+3) peuvent être masquées par les bypass. 16
Dépendances de données (4) t0 t1 t2 t3 t4 t5 t6 t7 mul Ai, Aj, Ak i+1 i+2 i+3 i+4 I0 D0 E0 E0 E0 W0 I1 D1 E1 M1 W1 I2 D2 E2 M2 W2 I3 D3 E3 M3 W3 I4 D4 E4 M4 W4 Si l instruction productrice est une instruction complexe (une multiplication prend 3 cycles), la dépendance de donnée ne peut pas être masquée, car le résultat n est disponible qu à la fin du cycle t4. Ce résultat peut être utilisé, au plus tôt, par l instruction (i+3). 17
Dépendances de données (5) Deux approches pour résoudre le problème des dépendances de données dans le cas des instructions «lw» ou «mul» : 1/ solution «matérielle» On «gèle» partiellement le processeur en cas de dépendance, pour attendre la disponibilité de la donnée attendue. => Inconvénient : la durée visible (CPI) de l instruction passe à 2 cycles pour «lw» et 3 cycles pour «mul» 2/ solution «logicielle» On modifie la sémantique d exécution séquencielle du programme, et on informe le compilateur que les instructions lw et mul ont un «effet retardé»: le résultat ne peut pas être utilisé immédiatement. => Inconvénient : Le compilateur doit anticiper les lectures en mémoire et les multiplications, ou mettre des instructions «nop» 18
Dépendances de contrôle (1) t0 t1 t2 t3 t4 t5 t6 t7 bne i+1 i+2 i+3 i+4 I0 D0 E0 M0 W0 I1 D1 E1 M1 W1 I2 D2 E2 M2 W2 I3 D3 E3 M3 W3 I4 D4 E4 M4 W4 Si l instruction (i) est un branchement, l instruction cible ne peut être lue qu au cycle t2 (étage I2), puisque l adresse de saut n est calculée qu au cycle t1 (étage D0). => l instruction (i+1) est entrée à tort dans le pipe-line. 19
Dépendances de contrôle (2) Deux approches pour résoudre le problème des instructions de branchement : 1/ solution «matérielle» On n exécute pas l instruction (i+1) qui est entrée à tort dans le pipe-line: pas d écriture dans les registres ou en mémoire. => Inconvénient : la durée visible (CPI) des instructions de branchement passe à deux cycles. 2/ solution «logicielle» On modifie la sémantique d exécution séquencielle du programme : les instructions de branchement ont un effet retardé : l instruction qui suit immédiatement un branchement est toujours exécutée. => Inconvénient : Le compilateur doit anticiper les instructions de branchement, en modifiant l ordre des instructions. 20
Conclusions La technique de pipe-line synchrone permet de gagner un facteur 4 en performance, pour une augmentation de surface (nombre de transistors) d un facteur 2 environ. Il a fallu pour cela «régulariser» le jeu d instruction : Toutes les instructions s exécutent en 5 cycles Toutes les instructions ont le même format (32 bits) Un seul mode d adressage. Une grosse partie du travail est déporté vers le compilateur : Anticipation des lectures mémoire Anticipation des branchements Décomposition des opérations complexes. RISC = Reject Important Stuff into Compiler 21