Le processeur Evolution du processeur Fonctionnement pipepipe-line Processeur RISC Superscalaire – Superpipeline Extensions multimédia Processeur vectoriel Le processeur 1 2 La technologie Les différents types Deux critères permettent de CISC : Complex Instruction Set caractériser le processeur: La fréquence d'horloge Le nombre de cycles par instruction Computer RISC : Reduce Instruction Set Computer Superscalar RISC: RISC: Plusieurs instructions au même cycle 3 4 Autres types... Répartition CPI 20 VLIW : Very Long Instruction Word: 10 Un ensemble d'instructions par cycle. Une instruction au plus par groupe d’instructions. Superpipelined : Utilisation d'une horloge multiphase. Plusieurs instructions dans le même étage de pipeline 5.0 CISC 2.0 Superpipeline RISC 1 0.5 Superscalaire 0.2 VLIW 0.1 5 Processeurs du futur 5 10 20 Vecteur 100 500 1000 2000 6 MHz Système pipeline Superposition dans le temps Le fonctionnement pipeline Augmentation des performances Parallélisme temporel 7 8 Décomposition Principe du pipeline Division d'une tâche en sous tâches 1 unité logique / sous tâche Les sorties d'une unité sont Unit 1 connectées aux entrées de la suivante Les données entrent par le premier étage et sortent par le dernier. Unit 2 Unit 3 Unit 1 1 T1 T2 2 T1 1 T3 2 T2 3 T1 T 14 2 T3 3 T2 4 T1 T 15 T 24 3 T3 4 T2 5 T1 Unit 4 Unit 5 Unit 6 1 2 3 4 T 34 4 T3 5 T2 6 T1 T 44 5 T3 6 T2 7 T1 T 54 6 T3 7 T2 8 T1 T 64 7 T3 8 T2 9 T1 5 T 6 T6 T 6 T 6 T 6 T 25 T 35 T 45 T 55 T 65 T 74 8 T3 9 T2 10 T1 9 10 temps Transfert des données pipeline Définitions Latence du pipeline : temps (en cycles ) Modèle Asynchrone: entre deux instructions consécutives Débit du pipeline : Nombre d'instructions exécutées par cycle, on appelle aussi le degré d'un processeur superscalaire Conflit sur ressource : Deux ou plus instructions demandent l'utilisation de la même unité au même instant Mécanisme de "handshacking" entre chaque couple d'unités DATA Etage i Ready Etage i + 1 ACK 11 12 Modèle Synchrone Construction Horloge contrôle le transfert des données Utilisation de latch Latch entre 2 unités Pipe d'instructions Pipe arithmétique DATA DATA DATA Horloge Etage Etage Etage Etage i i+1 i+2 i+3 Sans latch (CRAY) On parle de Maximum Rate pipepipe-line 13 14 Horloge Speed--up Speed Pipeline d'instructions: Sur un pipe nn-étages, il faut: Fetch / Execute 2 unités séparées n cycles pour obtenir le 1er résultat pour ss-1 résultats, il faut ensuite ss-1 cycles. Soit n+sn+s-1 cycles pour s résultats (sur un processeur scalaire, il faut ns cycles) Phase de Chargement Phase d' exécution Le SpeedSpeed-up est égal à On réalise les deux phases en même S = Tscal /Tpipe = temps sur des instructions différentes. Il suffit de connaître la prochaine instruction: instruction prefetch S n quand ns n+s--1 n+s s + 15 16 Augmentation du parallélisme Pipeline 2 étages L'instruction prefetch permet au plus Execute Fetch Temps d’exécution constant Execute Fetch Temps d’exécution variable 17 de doubler la vitesse du processeur. Exécution souvent plus long que le chargement. La recherche de parallélisme nécessite un découpage plus fin Souvent en 4 ou 5 étapes successives 18 Exemple le MIPS 5 étages Fetch/ Decode/ Fetch OP/ Execute/ Store 1 IF 2 3 4 5 ID IF FO ID IF EX FO ID IF SO EX FO ID IF SO EX FO ID SO EX FO SO EX Fetch/ SO 5 actions en parallèle 19 1 IF 2 3 4 5 EX ID IF MEM EX ID IF REG MEM EX ID IF ID : Decode + fetch operands Mem : write back cache + mem Reg : store ALU into register REG MEM EX ID REG MEM EX REG MEM REG 5 actions en parallèle 20 Efficacité Le pipepipe-line du 80486 Fetch Fetch:: Instructions depuis le cache ou la mémoire vers 2 buffers de prefetch. Chaque buffer contient en moyenne 5 instructions. Remplissage dès que possible des buffers. Decode stage 1: Décode le code opération et les modes d’adressage Decode stage 2: Génère les signaux pour l’ALU. Réalise les adressages plus complexes Execute: Opérations ALU, Accès cache, registres Write Back: Maj des flags, écriture des résultats sur le cache et le buffer de l’interface du Bus ID IF Decode/ Execute/ Memory/ Register Soit ti le temps de traversée de l'étage i. Le temps d'exécution d'une instruction est: inst Le délai entre 2 instructions successives est Max Max est appelé cycle du pipeline 21 Rupture de pipeline 22 Instructions de Branchement Instructions de branchement Data dépendance Défauts de cache Conflits hardware (mémoire) Lors de l'exécution d'un JUMP La prochaine instruction est la 23 suivante OK Ce n'est pas la suivante Vidage du pipepipe-line Remplissage du pipe avec les bonnes instructions 24 Réduction de la vitesse Réduction des ruptures 4 techniques pour réduire les ruptures x EX x x x x Abandon 10 à 20% des instructions sont des JUMP réduction de la vitesse globale Boucle TantQue, Exit de pipeline Buffer d'instructions Loop buffer Table de branchement Branchement retardé 25 Buffer d'instructions 26 Multiple prepre-fetch FIFO d'instructions : assure un flux constant On utilise 2 FIFOs Une pour les instructions suivant le JUMP Une pour les instructions à l'adresse du JUMP 27 Double FIFO On charge les 2 FIFOs après un JUMP Après le JUMP, on choisit l'instruction dans l'une des 2 FIFOs Si plusieurs JUMP pris en compte, il faut plusieurs FIFO (2n = n JUMP) Augmente les conflits d’accès mémoire 28 Loop Buffer Petite mémoire rapide contrôlée par l’unité de chargement des instructions Mémoire Séquentiel Contient les N instructions les plus Fetch FIFO récemment chargées. Fonctionnement comme un cache d’instructions mais en séquence A chaque fetch on recherche d’abord l’instruction dans le loop buffer ... Non séquentiel 29 30 Fonctionnement Table de Branchement Prédire dynamiquement l'adresse Avec le prefetch, quelques instructions suivantes sont présentes. Si le JUMP saute quelques instructions en avant, on peut la trouver dans le buffer ex: if then else Si le JUMP saute vers le début d’une boucle, la boucle complète peut se trouver dans le buffer Cray 1, motorola 68010 31 Les instructions de JUMP sont Adresse branchement Recherche dans table Adresse de branchement Adresse trouvée CO Adresse Fetch 32 Branchement retardé Decode history table Adresse Instruction suivante : utilisation répétée de la même adresse La 1ère exécution range l'adresse de branchement Lorsque la même instruction JUMP est exécutée (Fetch), on utilise l'adresse mémorisée dans une table (mémoire rapide) Decode Execute Instruction placées dans le code avant qu'elles ne prennent effet Pour un pipeline à 2 étages , le JUMP prend effet après la prochaine instruction n étages : le JUMP prend effet après les nn-1 suivantes 33 Pour un 2 étages Efficacité Pas de vidage de pipe Optimisation du compilateur 70% des JUMP peuvent être suivis Execute Fetch Jump Jump NEXT NEXT Adresse Saut 34 d'une instruction RISC 35 36 Data dépendances Sur 5 étages Dépendances de données Exemple: C = 2 * (A + [@100]) Store ADD AX, [100] % A+100% SAL AX, 1 %*2% MOV CX, AX %C% AX Exec AX ADD AX [100] Fetch Op CX Shift AX AX Decode Fetch ADD SAL 37 Mov Conflit mémoire : entre fetch et accès [100] 38 Fonctionnement Détection de la dépendance et blocage de pipeline jusqu'à résolution. Autoriser le chargement des instructions qui sont indépendantes (pas de data dépendance) On ne retarde que les instructions dépendantes. Processeur RISC 39 Jeu d’instructions 40 Critères Ensemble des commandes primitives que le programmeur peut utiliser sur une machine. Deux écoles RISC et CISC. La complexité du jeu d'instruction dépend du format de l'instruction et des données, des modes d'adressage, du jeu de registres, des instructions de contrôle de flot. 41 42 CISC Caractéristiques De plus en plus de fonctions sont Il comprend entre 120 à 350 prises en compte au niveau du hardware. Cette école a été encouragée avec les techniques de micro programmation (1960(1960-70). Il simplifie la charge du compilateur. instructions, Il utilise un petit nombre de registres 8 à 24, Il possède une douzaine de modes d'adressage. 43 Caractéristiques des RISC 44 Conséquences Le RISC est composé d'environ Un grand nombre de registres 100 instructions dans un format fixe 3 à 5 modes d'adressage les accès mémoire sont réservés aux instructions de Load/Store améliore le changement de contexte. La plupart des instructions s'exécutent en un cycle. L'intégration sur un seul chip permet d'augmenter la fréquence d'horloge. 45 Quelques CISC et RISC 46 RISC On remarque que 25 % des Caractéristiques Année Nombre d'instructions Taille des instructions Modes d'adressage Nombre de registres Taille du cache IBM 370 Vax 11/780 1973 1978 208 303 2à6 2 à 57 4 22 16 16 64 64 CISC 80486 1989 235 1 à 11 11 8 8 88000 Mips R4000 IBM RS6000 1988 1991 1990 51 94 184 4 32 4 3 1 2 32 32 32 16 128 32 à 64 RISC Superscalar 47 instructions d'un CISC sont utilisées 95% du temps. Faut-il utiliser le silicium pour des Fautinstructions non fréquemment utilisées? 48 Modes d’adressage Types d’instructions Prédécrément Indirect Déplacement GCC Postincrément Jump Moves ALU Indexé Fréquence Indirect Immédiat TEX Déplacement Registre 0 10 20 30 40 50 49 Apparition des RISC 0 10 20 30 40 50 50 Première réalisation Premier article en 1980 (Patterson et Papier de MIPS en 1983 Ditzel) Implantation sur un seul chip Temps de conception réduit Horloge rapide Meilleur utilisation du VLSI Introduction du pipeline et du multiple unités fonctionnelles Premier prototype en 1985 51 Propriétés 52 Caractéristiques communes Architecture Load/store avec un Un petit nombre d’instructions Un CPI proche de 1 (cycle par ensemble de registres orthogonal Simples modes d’adressage Contrôle des délais de pipeline instruction) 53 54 Coût et performance 300000 Evaluation des performances Temps/tache = (inst/tache) x (cycle/inst) x (temps/cycle) 20 250000 15 200000 10 150000 Megahertz 100000 5 50000 Mips processeur 0 0 80386 Transistors R3000 VUP 80386 R3000 Mips normalisé (VUP) 55 56 Succès des RISC Avantage du faible CPI Horloge rapide (temps/cycle) Peu de cycles par instruction : par le Parallélisme au niveau de l’instruction : pipeline Pour 5 étages on obtient un facteur de 4 1.8 instructions RISC pour une instruction VAX ou 680x0 fonctionnement pipeline (cycle/inst) Faible augmentation du nombre d’instructions par tâche : optimisation du compilateur (inst/tâche) 57 58 Haut débit mémoire Débit mémoire VAX / RISC Risc demande beaucoup de débit 60 mémoire Plusieurs accès à chaque cycle Utilisation de mémoires caches Beaucoup d’accès instructions: appels de procédure Peu d’accès données: grand nombre de registres 50 40 Data Instruction 30 20 10 0 59 RISC-TEX VAX-TEX RISC-GCC VAX-GCC 60 Approches de mise en oeuvre Les opérandes Références à des variables scalaires 80% sont locales aux procédures IBM / Standford Un ensemble de registre unique Load/store efficace, optimisation des délais par le compilateur Berkeley Multiple ensemble de registres gérés en fenêtre Load/store de 2 cycles ou plus Constante Integer Variable scalaire Array/structure 20 55 25 61 Appel de procédure 62 Fenêtre de registres Diminuer le coût de l’appel de Un grand nombre de registres Seul un sous ensemble est visible à procédure Passage de paramètres Sauvegarde des registres Adresse de retour un instant donné (par ex 32) Chaque ensemble est divisé en groupes. Pointeur de fenêtre courante CWP 63 Groupes de registres Recouvrement des fenêtres n- 1 26-31 R31 Paramètres reçus R26 R25 n n 6 10 R16 R15 Paramètres envoyés Variables globales R0 16-25 n 10-15 26-31 0-9 Variables locales R10 R9 64 16-25 n+1 10-15 26-31 6 10 16-25 65 10-15 Recouvrement des fenêtres lors de chaque appel Evite le passage sur la pile 66 Fonctionnement Allocation des registres A chaque appel on met à jour le CWP Les instructions RISC sont registre à vers la nouvelle fenêtre. Diminution du trafic mémoire En cas de débordement, les fenêtres sont recopiées en mémoire (trap sur CWP) Pourrait fonctionner sur un CISC avec beaucoup de registres registre L’accès aux registres est beaucoup plus rapide que la mémoire L’allocation optimisée des registres peut réduire le nombre d’accès mémoire 67 68 function MostlyZero(n:integer):boolean; var num,ones,zeros,half:integer; res:boolean; begin num:= n*n; ones:=0; zeros:=0; while num>0 do begin half:=num div 2; if 2*half=num then zeros:=zeros+1 else ones:=ones+1; num:=half end; if zeros>ones then res:=true else res:=false; MostlyZero:=res Registres ou cache? Variables locales Unité de rangement Variables globales Swapping Adressage R Window Number Registres Tous les scalaires locaux Variable par variable Allouée par le compilateur Par profondeur d'appel Adressage registre TAG Index Registres Cache Most Recently Used Blocs de mémoire MRU Algorithme de remplacement Adressage mémoire Tag + Index Cache Index Exemple 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Mémoire Decoder TAG Data Y = Data N 69 70 end; RISC et PipePipe-Line Exécution en séquence Instruction Registre à Registre. Deux Load A, M Load B, M Add C, A, B Store M, C Branch X phases: I: instruction fetch E: exécute sur l’ALU depuis et vers registres I E D I E D I E I E D I E Instruction Load Store. Trois phases: I: instruction fetch E: Exécute. calcul de l’adresse mémoire D: Mémoire. transfert reg <=> mémoire 71 72 Exécution sur un pipe 2 étages Exécution sur un pipe 3 étages I et E s’exécutent en parallèle. D s’exécute I, E et D en même temps. seul. Un seul port mémoire. Load A, M Load B, M Add C, A, B Store M, C Branch X NOOP I E I Load A, M Load B, M NOOP Add C, A, B Store M, C Branch X NOOP D E I D E I E I D E I E NOOP est inséré par le compilateur I E I D E I D E I E I E I D E I E 73 74 Exécution sur un 4 étages E est coupé en 2: E1 et E2 ( E trop long) Load A, M Load B, M NOOP Add C, A, B Store M, C Branch X NOOP NOOP I Superscalaire / superpipeline E1 E2 D I E1 E2 D I E1 E2 I E1 E2 I E1 E2 D I E1 E2 I E1 E2 I E1 E2 75 Superscalaire (1987) 76 Taux de parallélisme CISC et RISC produisent une Les superscalaires permettent instruction par cycle. Sur un superscalaire on produit plusieurs instructions par cycle. On utilise plusieurs pipelines d'instructions. d'extraire encore plus de parallélisme. Toutes les instructions indépendantes peuvent être exécutées en même temps (limité par le nombre de pipeline) 77 78 Fonctionnement Efficacité Par observation, en moyenne on peut 1 IF 2 IF 1 2 1 2 1 2 1 2 ID ID IF IF FO FO ID ID IF IF EX EX FO FO ID ID IF IF SO SO EX EX FO FO ID ID IF IF SO SO EX EX FO FO ID ID SO SO EX EX FO FO SO SO EX EX SO SO 10 actions en parallèle obtenir deux instructions à exécuter en parallèle. On limite le degré du processeur à 3 ou 5. (projet de degré à 16 sur Alpha - utilisation multimulti-user) 79 Superpipeline (1988) 80 Fonctionnement Utilisation d’une horloge multiphase Redécomposition pipeline de chaque 1 IF1 IF2 ID1 ID2 FO1 FO2 E X1 EX2 SO1 SO2 2 IF1 IF2 ID1 ID2 FO1 FO2 EX1 EX2 SO1 SO2 1 IF1 IF2 ID1 ID2 FO1 FO2 EX1 EX2 SO1 SO2 2 IF1 IF2 ID1 ID2 FO1 FO2 EX1 EX2 SO1 1 IF1 IF2 ID1 ID2 FO1 FO2 EX1 EX2 2 IF1 IF2 ID1 ID2 FO1 FO2 EX1 1 IF1 IF2 ID1 ID2 FO1 FO2 2 IF1 IF2 ID1 ID2 FO1 1 IF1 IF2 ID1 ID2 2 IF1 IF2 ID1 étage du pipeline d’instruction Demande une fréquence d’horloge élevée Exemple R4000 SO2 SO1 EX2 EX1 FO2 SO2 SO1 SO2 EX2 SO1 SO2 EX1 EX2 SO1 SO2 82 Dépendance de flot Augmenter le parallélisme au niveau de Exemple: l’instruction add R1, R2 move R3, R1 La deuxième instruction ne peut être exécutée tant que la première n’est pas exécutée Compilateur ou Hardware 5 limitations SO2 SO1 EX2 EX1 FO2 FO1 10 actions en parallèle 81 Limitations SO2 SO1 EX2 EX1 FO2 FO1 ID2 Dépendance de flot Dépendance procédurale Conflits sur ressources Dépendance de sortie Antidépendance Pipe1 Pipe2 83 IF IF D D X W X W 84 Dépendance procédurale Conflit sur ressource Présence de Branch impose le vidage de Utilisation de la même unité fonctionnelle, tous les pipes inst1 IF branch IF inst2 inst3 mémoire, cache, bus... D D X X W W IF IF On peut supprimer ce conflit en dupliquant D D IF IF X X D D W W X X les ressources ou en pipelinant les unités fonctionnelles W W Add Add IF IF D D X W X W 85 Instruction--issue Instruction 86 Les stratégies Ordre dans lequel le processeur exécute Accès et exécution ordonnés Accès ordonné et exécution désordonnée Accès et exécution désordonnés les différentes étapes des instructions Ordre de fetch Ordre d’exécution Ordre de modification des registres ou mémoires Modifier l’ordre en assurant une exécution correcte 87 Accès et exécution ordonnés 88 Exemple Même ordre que sur une machine I1 demande 2 cycles pour exécution I3 et I4 sont en conflit sur une unité séquentielle. Exemple: fonctionnelle I5 dépend du résultat produit par I4 I5 et I6 sont en conflit sur une unité fonctionnelle superscalaire avec Fetch et Decode deux instructions en parallèle 3 unités fonctionnelles 2 unités d’écriture des résultats 89 90 Exécution désordonnée Accès et exécution ordonnés Decode I1 I3 I3 I5 I2 I4 I4 I4 I6 I6 Execute I1 I1 Utile pour les instructions demandant WriteBack plusieurs cycles Exemple: floating point sur Motorola 88000 I2 I3 I4 I5 I6 I1 I2 I3 I4 I5 I6 Autant d’instructions en exécution qu’il y a d’unités Respect des dépendances de flot et procédurale Dépendance de sortie 91 92 Exécution désordonnée Dépendance de sortie Exemple: R3 = R3 + R5 Decode Dépendance de flot I1 I3 R4 = R3 + 1 Dépendance de sortie I5 Execute I2 I4 I4 I6 I6 I1 I1 WriteBack I2 I3 I4 I5 I6 R3 = R5 +1 I2 I1 I4 I5 I6 I3 R7 = R3 + R4 93 Accès et exécution désordonnés 94 Fonctionnement Découplage des étages decode et execute Un buffer d’instructions: Instruction Le choix parmi les instructions à exécuter Window Decode place les instructions dans la fenêtre Quand une UF devient libre elle obtient une instruction exécutable dans la fenêtre: ressource et dépendance Respect des dépendances Respect de l’antidépendance 95 est plus large 96 Accès et exécution désordonnés Antidépendance Exemple: – R3 = R3 + R5 R4 = R3 + 1 Dépendance de flot Decode Window I1 I3 I5 Dépendance de sortie I2 I4 I6 I1 I2 I3 I4 I4 I5 I6 I5 Execute I1 I1 WriteBack I2 I6 I5 I3 I4 R3 = R5 +1 I2 I1 I4 I5 I3 I6 Antidépendance R7 = R3 + R4 97 Renommage des registres 98 Pour notre exemple Eliminer les dépendances de sorties et Exemple: antidépendances Plusieurs instructions utilisent le même registre Allocation dynamique des registres par le processeur ( ce n’est plus le compilateur) Un même registre du code peut référencer plusieurs registres lors de l’exécution R3b = R3a + R5a R4b = R3b + 1 R3c = R5a +1 R7b = R3c + R4b 99 Compilation 100 Superscalaire et CISC Lorsque l'on ne peut exécuter autant Application du principe supescalaire au d'instructions que le degré du processeur, certains pipelines restent en attente. Le nombre d'instructions en cours d'exécution dépend des dépendances de données entre les instructions, et des conflits d’accès aux ressources Le travail du compilateur devient capital: réorganisation du code... CISC est plus rudimentaire que sur un RISC Donne néanmoins de bons résultats Exemple: le Pentium 101 102 Instruction cache Pentium Adresse branchement Prefetcher Pipe line de 5 étages comme le 80486 QueueAQueueB Fetch Fetch:: Instructions depuis le cache ou la mémoire vers 2 buffers de prefetch. Remplissage dès que possible des buffers. Adresse de branchement Décodeur coupleur Decode stage 1: Décode le code opération et les modes d’adressage. Branch prédiction. Coupleur d’instructions Branch Target Buffer Unité contrôle Decode stage 2: Génère les signaux pour l’ALU. Réalise les adressages plus complexes Execute: Opérations ALU, Accès cache, registres Write Back: Maj des flags, écriture des résultats sur le cache U opérande mémoire opérande mémoire ALU ALU Choix du branchement V et le buffer de l’interface du Bus Possède deux unités integer ( (du 80486) Shifter 103 Couplage d’instructions Pentium vs 80486 U et V peuvent exécuter 2 instructions en 2 fois plus rapide parallèle Les instructions doivent être simples: Pas de micromicro-programme Un seul cycle Pas de dépendance de flot ou de sortie Pas deux déplacements ou immédiats... Deux instructions successives sont alors couplées et exécutées en parallèle 104 105 1 PF 2 3 4 D1 PF 1 PF 2 PF 3 4 5 6 7 8 D1 D1 PF PF D2 D1 PF D2 D2 D1 D1 PF PF EX D2 D1 PF WB EX D2 D1 WB EX D2 EX EX D2 D2 D1 D1 PF PF WB WB EX EX D2 D2 D1 D1 WB WB EX EX D2 D2 80486 WB EX WB Pentium WB WB EX EX WB WB 106 Superscalaire vs Superpipeline Prédiction de branchement Prédiction dynamique Branch Target Buffer Performances équivalentes Superpipeline demande moins de Mémorisation de la dernière adresse de branchement hardware mais une horloge plus rapide Superpipeline moins efficace sur le branch et le démarrage du programme. StartStart-up plus long. Une seule queue de prefetch reste active Celle donnée par la table 107 108 VLIW Compilation Généralisation des concepts de codification horizontale en microprogrammation et du calcul superscalaire. Plusieurs instructions dans le même mot ( 1024 bits ), un champs pour chacune. Plusieurs unités fonctionnelles travaillent en parallèle, elles partagent la même file de registres. Le compactage des programmes standard peut être assuré par le compilateur. 109 110 Compatibilité Fonctionnement Il n'y a pas de compatibilité entre deux codes de deux VLIW différents. (différents types de parallélisme: le débit différent d'une même unité fonctionnelle entraîne des différences à l'exécution) Encore moins avec les processeurs standard. 111 1 IF 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ID FO IF ID EX EX EX EX FO SO IF ID EX EX EX EX FO IF ID IF SO EX EX EX EX FO SO EX EX EX EX SO 112 8 actions en parallèle VLIW vs superscalaire Architecture VLIW Registres Load Store Unit FP Add Unit ... Integer Unit Load Store Unit FP Add Unit ... Integer Branch Unit Unit Branch Unit 113 Le décodage de l'unique instruction est plus simple. Le format du VLIW est moins compact, certains champs de l'instruction peuvent ne pas être utilisés tout le temps. 114 Le point de vue d’Intel 3 extensions: Extensions multimédia: multimédia: Intel MMX / SSE / SSE2 Motorola Altivec MMX (1997) SSE (1999) SSE2 (2000) En collaboration avec François Piret Etudiant promo 2002 115 116 Intel MMX Intel MMX Pas de modifications architecturales pas de modifications de l’OS pas de nouveaux registres, pas de nouvelles exceptions + X86 compatibilité - Context Context--switch 2 améliorations: Un cache L1 plus important 57 nouvelles instructions ( SIMD) 117 118 Intel SSE Intel SSE Streaming SIMD Extensions Modifications architecturales: 128 bits ? 8 registes 128 bits multimulti-usages Vise la 3D 4 op. simple précision 70 nouvelles instructions Virgule flottante (sans partage) Hardware Datapath 64 bits 119 120 Intel SSE2 Intel SSE2 54 nouvelles instructions Data de 128 bits plus malléables calcul scientifique (FP) 121 Le point de vue Motorola 122 Motorola Altivec Jeu d’instruction Altivec Unité de calcul IntraIntra-élément Arithmétique ou non Inter Inter--élément Arithmétique ou non vectoriel 32 registres 128 bits 162 instructions 3 opérandes 123 Motorola Altivec 124 Motorola Altivec Intra Intra--élément Inter Inter--élément 125 126 Comparaison entre Intel, AMD et Motorola Fab.. Fab Ext.. Ext ISA de base Annonce Prod.. Prod Inst.. Inst Intel MMX X86 1996 1997 57 AMD 3Dnow! 1997 1998 21 1998 1999 70 8*128b X86/ MMX X86/ MMX Registre FP (8*64b) FP (8*64b) Intel SSE Motorol a Altivec PowerPC 1998 1999 162 32*128b AMD Enh. 3dnow X86/ MMX/ 3Dnow! 1999 2001 24 FP (8*64b) Intel SSE2 X86/ MMX/ SSE 2000 2001 144 8*128b 127 128 Les opérations 1. 2. 3. 4. 5. 1. Les entiers 1. 2. 3. 4. Entier Virgules flottantes Polymorphes Comparaisons et contrôle de flux Mémoire Saturation et overflow Addition et soustraction Multiplication Shift 129 1.1. Saturation et overflow 130 1.2. Addition et soustraction 131 AMD Intel Motorola Modulo add/sub 8,16,32 8,16,32,64 8,16,32 Saturation add/sub U8,U16,S8, S16 U8,U16,S8, S16 U8,U16,U32, S8,S16,S32 Moyenne U8,U16 U8,U16 U8,U16,U32, S8,S16,S32 Min/max. U8,S16 U8,S16 U8,U16,U32, S8,S16,S32 132 1.3. Multiplication 1.3. Multiplication (suite) AMD Intel Motorola Mul. Tronquée S16,U16 S16,U16 S16 Mul. Tr. Arrondie S16 - S16 Mul. Complète S16 S16,U32 U8,U16,S8,S16 Shift log. droite 16,32,64 16,32,64 8,16,32 Shift ari. Droite 16,32 16,32 8,16,32 Shift gauche 16,32,64 16,32,64 8,16,32 • La réduction • Pair / impair 133 134 1.3. Multiplication (suite et fin) 2 5793 / 2^12 •La toncature: 135 AMD Intel Motorola Interleave/merge 8,16,32 8,16,32 8,16,32 Align/rotate - - 8 Shuffle/permute 16(4^4) 16(4^4), 32(4^5) 16(32^16) 16 16 AMD Intel Motorola Mul. Tronquée S16,U16 S16,U16 S16 Mul. Tr. Arrondie S16 - S16 Mul. Complète S16 S16,U32 U8,U16,S8,S16 Shift log. droite 16,32,64 16,32,64 8,16,32 Shift ari. Droite 16,32 16,32 8,16,32 Shift gauche 16,32,64 16,32,64 8,16,32 136 1.6. Taille et conversion de type 1.5. Opération de communication de données Insert/Extract 1.4. Le Shift AMD Intel Motorola Saturating FP pack FP32 S32 FP32 S16 FP32 S32 FP S32 FP U32 Truncating FP pack - FP64 FP32 FP64 S32 - S32 S16 S32 S16 S32 S16 S16 S8 S16 U8 32 16* 32 8* S16 S8 S16 U8 32 16* 32 8* S16 S8 S16 U8 16 8* 16 8* 16 8 FP unpack - 32 bits unpack S32 FP32 FP32 FP64 S32 FP32 S32 FP64 U32 FP32 S32 FP32 U16 U32* U16 U32* U8 U16* U8 U16* Saturating 32 bits pack Saturating 16 bits pack Truncating 32 bits pack Truncating 16 bits pack 8,16,32 16 bits unpack 137 8 bits unpack U16 U32* S16 FP32 U8 U16* 32 16 138 3. Opérations polymorphes 2. Virgule flottante Opération AMD Intel Motorola AND, ANDN, OR, XOR AND, ANDN, OR, XOR AND, ANDN,NOR OR, XOR 4. Comparaisons et contrôle de flux approximation réciproque Exceptions Arrondi Opérations scalaires == 139 AMD Intel Motorola 8,16,32,FP32 8,16,32,FP32,FP64 8,16,32,FP32 != - FP32,FP64 > S8,S18,S32,FP32 S8,S18,S32,FP32,FP64 >= FP32 FP32,FP64 U8,U16,U32,S8,S16,S3 2,FP32 FP32 < - FP32,FP64 - <= - FP32,FP64 - <> - - FP32 ? - FP32,FP64 - !? - FP32,FP64 - 5. La mémoire 140 Le prefetching Load / Store Intel: Alignement AMD: Motorola: Préfetching 141 142 Présentation du workload Horloge (Mhz) SIMD extensions SIMD instructions 1e utilisation Transistor (*106) Micron L1 cache (Kbytes) 3. Comparaison des performances 143 AMD Athlon 500 MMX/3Dnow+ 57/24 Juin 1999 22.0 0.25 64 Intel Pentium III 500 MMX/SSE 57/70 Février 1999 9.5 0.20 16 Motorola G4 500 Altivec 162 Août 1999 6.5 0.20 32 L2 cache(Kbytes) 0.5 0.5 1 Registre (# * taille) FP(8x64b)/ FP(8x64b) FP(8x64b)/ 8x128b 32x128b Reorder buf. Entries 72 40 6 It, Fp multimedia units Int add latence Int multiply latence FP add latence FP multiply latence 2 (combiné) 2[64b/cycle] 3[64b/cycle] 4[64b/cycle] 4[64b/cycle] 2 (combiné) 1[64b/cycle] 3[64b/cycle] 4[64b/cycle] 5[64b/cycle] 3,1 1[128b/cycle] 3[128b/cycle] 4[128b/cycle] 4[128b/cycle] FP approx. latence 3[32b/cycle] 2[64b/cycle] 4[128b/cycle] 144 Analyse des performances AMD Athlon 500 Intel Pentium III 500 Motorola G4 500 Add block Block match Clip Color space DCT FFT IDCT Max val Mix Quantize 9.6x 7.0x 1.6x 9.4x 16.9x 2.0x 3.6x 4.0x 2.8x 1.8x 6.4x 4.9x 1.3x 5.6x 31.1x 1.7x 2.8x 3.8x 2.0x 2.5x 2.5x 3.4x 2.6x 4.5x 36.6x 2.0x 3.9x 6.6x 3.8x 2.1x Short term anal. 1.5x 1.5x 6.5x Short term synth 2.9x 7.6x 6.5x Subsmp horiz Subsmp vert Synth filt Transform 1.4x 2.4x 2.8x 2.5x 1.3x 2.2x 1.8x 4.7x 1.6x 9.6x 1.8x 27.4x Moy. arithmétique 4.5x 5.1x 7.6x Processeur vectoriel 145 Processeur vectoriel 146 IBM 3090 VF Co processeur dédié au calcul Mémoire d'opérations sur des vecteurs. Un vecteur est défini comme un tableau d'opérandes. La même opération est effectuée sur l'ensemble des données. Cache Vecteur éléments Décodeur Vecteur instructions CPU Scalaire Registres Scalaires CPU Vectoriel Valeur scalaire Registres Vectoriels 147 Fonctionnement 148 Intérêts IF ID FO EX SO EX IF ID FO EX SO EX EX IF ID FO EX SO EX EX EX IF ID FO EX EX EX EX EX EX EX EX 149 Augmente la densité du code Réduit le nombre d’instruction à exécuter (I-bandwith) (I Les données sont régulières et structurées: prise en compte hardware Intègre le contrôle de la boucle 150 Notion de registres vectoriels Ensembles de 16 ou 64 ou 128 registres Jeu d’instructions Extension du jeu d'instructions (machine à de 64 ou 128 bits Peuvent contenir des entiers et surtout des flottants Instructions de chargement spécifiques registres vectoriels): Plusieurs unités de Load/Store (3 sur le Cray) V1 op V2 s1 op V2 V1 op V2 M(1:n) V1 op V1 op V1 V3 V3 s1 V1 M(1:n) V2 s1 opération binaire scalaire réduction vecteur Load vecteur Store opération unaire réduction unaire 151 Unités fonctionnelles 152 UF Pipeline Registres input Plusieurs unités indépendantes Elles sont en général pipelinées Elles peuvent être parallèles ALU pipeline Registre output 153 UF Parallèle Pipeline d’addition C S A Compare exposants Shift mantisse Add mantisses X1, Y1 X2, Y2 C S A N 154 N ALU Registres input Normalise ALU Z1 Z2 C S A N X3, Y3 Z3 C S A N X4, Y4 Z4 C S A N X5, Y5 Z5 C S A N X6, Y6 Z6 C S A N ALU ALU Registre output 155 156 Avec deux pipelines parallèles Chaînage de pipelines Une opération peut commencer lorsque X1, Y1 C X2, Y2 C X3, Y3 X4, Y4 X5, Y5 X6, Y6 S A N S A N C S A N C S A N C S A N C S A N Les deux premiers opérandes sont prêts X1 et Y1 L’unité fonctionnelle est libre Z1 Z2 Z3 Z4 Dès qu’un autre couple (Xi, Yi) est prêt, on l’envoie vers l’UF. La production d’une UF est directement consommée par l’UF suivante Z5 Z6 157 158 Pour les Load/Store C= A + B (3 ports d’E/S) Les entrées/sorties utilisent des mémoires entrelacées. Sans conflits, elles produisent une donnée par cycle processeur par port. On démarre le calcul avant que toutes les données soient arrivées A1 B8 C16 A2 B9 C17 A64 B7 C15 Move V3, C Move A,V1 C1 B1 B2 B3 ...... ...... A2 A3 A4 A5 + + + + B2 B3 B4 B5 159 Move B,V2 A1 A2 A3 160 ADD V1, V2, V3 Chaînage pour les UF C = (s x A) + B On peut également chaîner les UF La ou les sorties des UF sont connectées Vload A, V1 directement aux entrées des UF suivantes On obtient un Pseudo pipepipe-line par concaténation Vload B, V2 Vmul s, V1, V3 Vadd V3, V2, V4 Vstore V4, C 161 162