INF6500 : Structures des ordinateurs Sylvain Martel - INF6500 1 Cours 1 : Processeur et unité centrale de traitement Sylvain Martel - INF6500 2 Instructions Pipeline Longueur pipeline Type d’instructions RISC CISC (Hybride) Aléas Structurels Données Contrôle Répertoire d’instructions Pile Accumulateur Registre-mémoire Chargement-rangement Nbre reg. GPR Special use Types LAE EAE EAL Résoudre Bulles Bus Istr/Data Registres Ordonnancement Envoi (forwarding) Branchement pris Branchement non-pris Branchement différé Format (Nombre d’opérandes) 2 3 Nombre et types de modes d’adressage Sylvain Martel - INF6500 3 L’ordinateur moderne: UCT, Mémoire et E/S + Bus Sylvain Martel - INF6500 4 Carte mère (Motherboard) Sylvain Martel - INF6500 5 Processeur (UCT) Sylvain Martel - INF6500 6 Pentium Mémoire E/S Sylvain Martel - INF6500 7 Mémoire (DRAM) Sylvain Martel - INF6500 8 AGP Bus USB (Universal Serial Bus) PCI ISA Sylvain Martel - INF6500 9 LPT E/S DIO A/D D/A IDE Floppy (HD) Sylvain Martel - INF6500 10 BIOS (Basic Input/Output System) Sylvain Martel - INF6500 11 Contrôleurs Contrôleurs Sylvain Martel - INF6500 12 Misc. Drivers Buffers Alimentation Batterie Sylvain Martel - INF6500 13 IR Transceiver STM Interface (I/V Amplifier and A/D Converter) Embedded Computer 64Kx16 SRAM Central Controller (CPLD) 48 MIPS DSP 48 MHz Oscillator Piezo-Drive Switching Circuit (One Leg) Temperature 15 mm Sensor Analog Section Power Converters Power Amplifiers STM Scan Tube Driving Section High Power Input Voltage Regulation High Power Rectification Bridge (Outside Section) Sylvain Martel - INF6500 IR Emitters 14 Outside Layer Simple UCT Adresse SRAM 00 0101 01 0001 Décodeur EXEC 0 Décodeur Compteur Data 0 Data 1 EXEC 15 Oscillateur Sylvain Martel - INF6500 15 Simple UCT (Codes pour les instructions) SRAM 0101 0001 Sylvain Martel - INF6500 16 Pentium Multiplication Division Sylvain Martel - INF6500 17 Pentium Barrel Shifter Sylvain Martel - INF6500 18 Pentium SRAM (Cache) Sylvain Martel - INF6500 19 Flot de conception VHDL Sylvain Martel - INF6500 20 Conception VHDL Sylvain Martel - INF6500 21 VHDL – Exemple: DFF Sylvain Martel - INF6500 22 L’UCT Mémoire Instructions Opérandes Horloge (oscillateur) Pipeline (UCT) Résultats Sylvain Martel - INF6500 23 Répertoire d’instructions et modes d’adressage Sylvain Martel - INF6500 24 Le jeux ou la liste d’instructions dépend du type d’applications supporté par le processeur et le type de processeur Applications du type: Général (PC) Communication Graphique (jeux vidéo) Traitements de signaux (radar, etc.) Gadgets, équipements simples, etc. Type de processeurs (UCT) Général (Pentium) DSP (Digital Signal Processor) « Micro-controller », etc. Sylvain Martel - INF6500 25 La classification des jeux d’instructions Définition d’un jeu d’instructions: Portion visible de la machine pour les programmeurs ou les créateurs de compilateurs La principale différence entre les différents jeux d’instructions réside dans le type interne de stockage dans l’UCT Sous forme d’une pile (stack) Sous forme d’un accumulateur (accumulator) Sous forme de registres (registers) Registre mémoire (register memory) Chargement rangement ou registre registre (resister register) Sylvain Martel - INF6500 26 Pile Pile PUSH A PUSH B A B A ADD B C UCT (ALU) Sylvain Martel - INF6500 POP C 27 Pile (suite) Pour une expression du type: (A*B) – (B*C) – (A*D), le système doit l'évaluer dans un ordre fixe, donc souvent moins efficace et doit souvent re-charger la même opérande plusieurs fois. Sylvain Martel - INF6500 28 Accumulateur Accumulateur LOAD A MEM A B ACC ADD ADD MEM A B Sylvain Martel - INF6500 ACC 29 Registre (registre-mémoire) 1 LOAD A MEM 3 A B C 2 R1 R2 ADD 2 Sylvain Martel - INF6500 30 Registre-registre/Chargementrangement (Load-store) MEM 1 LOAD R1,A 2 LOAD R2,B 3 ADD R3,R1,R2 R1 R2 R3 R4 ADD A B C 4 STORE C,R3 Sylvain Martel - INF6500 31 Avantages/désavantages Pile (stack) Avantage: le plus petit encodage parce que pas de locations pour opérandes ou résultat est spécifiées. Désavantage: Généralement les opérandes doivent être dans le bon ordre. Sylvain Martel - INF6500 32 Avantages/désavantages Accumulateur Avantage: Petit encodage d‘instructions parce que seulement une opérande et location sont spécifiées. Désavantage: Généralement les opérandes doivent être dans le bon ordre. Sylvain Martel - INF6500 33 Avantages/désavantages (Registre) Chargement-rangement Avantage: Les opérandes peuvent être dans un ordre flexible à cause des registres. Désavantage: Encodage d‘instructions avec un format plus large. Sylvain Martel - INF6500 34 La classification des jeux d’instructions (suite) Après les années 80, l’ensemble des systèmes ont été conçus suivant l’architecture chargement rangement car: Un registre est plus rapide qu’une mémoire. Il est plus facile et plus efficace de manipuler des registres pour un compilateur. Contrairement au système de pile, une expression avec l’emplois de registres peut s’évaluer dans n’importe quel ordre (a*b)-(c*d)-(e*f). Ce système réduit le trafic mémoire vu que les registres peuvent contenir des variables. Sylvain Martel - INF6500 35 Example: accès externes – sans un registre 1 2 UCT 3 4 6 5 C=A+B C=C+5 A B C 6 accès externes 5 Sylvain Martel - INF6500 36 Example: accès externes – avec un registre R1 1 2 4 3 C=A+B C=C+5 A B Compilateur R1 = A + B C = R1 + 5 C 4 accès externes 5 UCT Sylvain Martel - INF6500 37 La classification des jeux d’instructions (suite) Le nombre de registres à utiliser dépend de leur usage par le compilateur: Evaluer des expressions Passer des paramètres Conserver des variables Types de registres: Utilisation générale (general purpose register (GPR)): registres utilisés par le compilateur Utilisation spécifique (special use): utilisation spécifique au processeur Compteur de boucles Adresse de retour, etc. Sylvain Martel - INF6500 38 La classification des jeux d’instructions (suite) Autre décision architecturale: Le nombre d’opérandes pour les instructions: Format 3 opérandes : instr. contient 1 résultat et 2 sources; (ADD R3,R1,R2) Format 2 opérandes : une opérande est la source et le résultat durant l’opération; (ADD R1,R2) …. Sylvain Martel - INF6500 39 Avantages et désavantages des 3 types d‘ordinateurs les plus connus basés sur les GPR (M: opérandes mémoires, N: nombre total d'opérandes) Type M N Avantages Désavantages Registreregistre 0 3 Simple, longueur fixe d‘encodage d‘instructions Plus grand nombre d‘instructions qu‘avec références mémoires donc programmes plus longs Registremémoire 1 2 Les opérandes peuvent être accédées sans une instruction “load”. les instructions tendent à être faciles à encoder et donnent un bonne densité Encoder un numéro de registre et une adresse de mémoire dans chaque instruction peut restreindre le nombre de registres. Le nombre de cycle horloge par instruction peut varier par location de l‘opérande Mémoiremémoire (pas utilisé) 2 3 2 3 Plus compacte, ne gaspille pas de GPR pour les temporaires Grande variation de la longueur des instructions, surtout pour 3 opérandes, aussi grande variation de travail par instruction, accès mémoire créer “bottleneck” Sylvain Martel - INF6500 40 L’adressage mémoire La représentation de l’information en informatique se fait sur une base binaire (0 ou 1). L’unité de stockage est le bit. Ce stockage de l’information nécessite plusieurs bits que l’on classe suivant l’échelle suivante (celle-ci peut varier selon l’architecture). 1 1 1 1 octet (byte) = 8 bits demi mot (half word) = 16 bits mot (word) = 32 bits double mot (double word) = 64 bits Il existe deux conventions pour l’ordre des octets: Little Endian : le bit le moins significatif se trouve à droite et le plus significatif à gauche dans un nombre binaire. Big Endian : le bit le moins significatif se trouve à gauche et le plus significatif à droite dans un nombre binaire. Sylvain Martel - INF6500 41 L’adressage mémoire (suite) Modes d’adressage (addressing modes) Registre (Registers) Immédiat ou littéral (Immediate) (pour les constantes) Déplacement (Displacement)(pour les variables) Indirect par registre (Register referred) Indexé (Indexed) Direct ou absolu (Direct or absolute) Indirect via mémoire (Memory indirect) Auto-Incrémenté (Autoincrement) Auto-décrémenté (Autodecrement) Indexé étendu (Scaled) (DSP – Circular addressing, FFT, etc.) Malgré leur grand nombre les plus utilisés sont les modes déplacement, immédiat et indirect par registre (75% à 99% des modes utilisés dans les programmes). Sylvain Martel - INF6500 42 L’adressage mémoire - Mode registre ADD R4,R3: Regs[R4] <- Reg[R4] + Regs[R3] R3 R4 Fig. 2.6 Sylvain Martel - INF6500 43 Instructions 2 opérandes (Mode registre) Exemple: total 16 instructions (Add = 0101), 4 GPR (R0-R3), dans le répertoire et processeur de 16 bits ADD R1,R2 0101 ADD 01 R1 10 8 bits non utilisés R1 Sylvain Martel - INF6500 44 Instructions 3 opérandes (Mode registre) Exemple: total 16 instructions (Add = 0101), 4 GPR (R0-R3), dans le répertoire et processeur de 16 bits ADD R3,R1,R2 0101 ADD 11 R3 01 10 R1 R2 Sylvain Martel - INF6500 6 bits non utilisés 45 L’adressage mémoire - Mode immédiat ADD R4,#3: Regs[R4] <- Reg[R4] + 3 R4 CTE 3 Fig. 2.6 Sylvain Martel - INF6500 46 Instructions (Mode immédiat) Exemple: total 16 instructions (Add = 0101), 4 GPR (R0-R3), dans le répertoire et processeur de 16 bits ADD R1,#? 0101 01 10 bits disponibles pour une constante Maximum 210-1 sans signe ADD R1 9 bits disponibles pour une constante Signe (0=+, 1 =-) Sylvain Martel - INF6500 47 L’adressage mémoire (suite) Pour ce qui est du nombre de bits pour le champ de déplacement, il convient d’avoir 12 à 16 bits et de 8 à 16 bits pour la taille du champ immédiat. Pourquoi? Pour diminuer le nombre d’accès à la mémoire mais ceci complique l’architecture de l’UCT et peut augmenter le CPI moyen ou rallonger le temps de cycle (diminuer la fréquence horloge) Horloge (oscillateur) Pipeline (UCT) Sylvain Martel - INF6500 48 Ex. Si pas assez de bits pour constante ou accès à une variable en mémoire Exemple: total 16 instructions (Add = 0101), 4 GPR (R0-R3), dans le répertoire et processeur de 16 bits Pas assez 0101 01 10 bits disponibles pour une constante Maximum 210-1 sans signe ADD R1 9 bits disponibles pour une constante Signe (0=+, 1 =-) Sylvain Martel - INF6500 49 L’adressage mémoire (suite) Displacement: ADD R4,100(R1): Regs[R4] <- Regs[R4] + Mem[100+Regs[R1]] Register indirect: ADD R4,(R1): Regs[R4] <- Regs[R4] + Mem[Regs[R1]] : Pointeur en langage C/C++ Indexed: ADD R3,(R1+R2): Regs[R3] <- Regs[R3] + Mem[Regs[R1]+Regs[R2]] R3 R1 R2 MEM GEN. ADDR. ADDR DATA ETC… DATA Sylvain Martel - INF6500 50 Instructions (Mode indexé) Exemple: total 16 instructions (Add = 0101), 4 GPR (16 bits) (R0-R3), dans le répertoire et processeur de 16 bits ADD R3,(R1+R2) Maximum 2 adresses de mémoire 32 0101 001 11 01 10 Mais plus complexe OPCODE VS. 3 bits non utilisés ADD Indexé 0101 001 R3 11 R1 R2 Maximum 27 ou 128 adresses Sylvain Martel - INF6500 51 Data Simple UCT Adresse SRAM 00 0101 01 0001 Décodeur Décodeur EXEC 0 Type instruction Décodeur Compteur Adresse Adressage EXEC 15 Oscillateur Sylvain Martel - INF6500 52 Longueur de OPCODE Nombre de bits dépend du nombre de differentes instructions et modes d‘adressage que le processeur supporte Instruction Mode adressage OPCODE Sylvain Martel - INF6500 Champ Opérandes 53 Longueur du code (OPCODE) reduit pour processeurs de type RISC versus processeurs de type CISC Avec RISC Chaque instruction est plus simple donc exécute plus rapidement (vitesse horloge augmente) Besoin d‘un plus grand nombre d‘instructions pour exécuter la même tâche Plus grand nombre d‘accès à la mémoire Blocs EXEC plus simples mais circuit décodage plus complexe Sylvain Martel - INF6500 54 Les opérations dans le jeu d’instructions (standard) Il existe différents types d’opérateurs: Arithmétique et logique (ALU) (addition,soustraction) Transfert de données (Load and Store) (chargements et rangements) Contrôle (Branches and Jumps)(branchement, saut, appel de procédure) Système (appel au système d’exploitation) Flottant (Opérations flottantes : addition, multiplication) Décimal (Addition décimal, multiplication décimale, conversion décimal vers caractère) Chaînes (Transfert de chaînes, comparaison de chaînes, recherche de chaînes) Graphique (Opérations sur pixels, opérations de compression/décompression) Sylvain Martel - INF6500 55 Les opérations dans le jeu d’instructions (suite) Les instructions de contrôle Le branchement conditionnel (conditionnal branch) (très utilisés) Les sauts (jumps) (souvent utilisés) Les appels de procédure (procedure calls) (moins utilisés) Les retours de procédures (procedure returns) (moins utilisés) Les instructions les plus utilisées: 1) Chargement (22% des instructions totales exécutées) 2) Branchements conditionnels (20% des instructions totales exécutées) 3) Comparaisons (16% des instructions totales exécutées) 4) Rangement (12% des instructions totales exécutées) 5) Additions (8% des instructions totales exécutées) Sylvain Martel - INF6500 56 Les opérations dans le jeu d’instructions (suite) Les sauts indirects sont utiles lorsque l’adresse de destination est inconnue à la compilation. Certaines structures de plus haut niveaux rencontrent justement ce besoin: Les opération de ‘case’ et ‘switch’ dans les langages de haut niveau. Les fonctions virtuelles, les méthodes. Les pointeurs de fonction. Les librairies dynamiques (DLLs) Les branchements et les sauts conditionnels, sont souvent optimisés au niveau des architectures en raison de la grande fréquence des tests simples (x=0?, x<y?). Sylvain Martel - INF6500 57 3 variations de base d‘encodage d‘instructions Longueur fixe (même nombre d‘opérandes, format du code plus large) Opération Addr. Field 1 Addr. Field 2 Addr. Field 3 Longueur variable (nombre d‘opérandes varie) Opération Addr. Spec. 1 Addr. Field 1 … Addr. Spec. n Addr. Field n (Specifier) Mode d‘adressage Hybride: plusieurs format dépendant du OPCODE Sylvain Martel - INF6500 58 Simple exemple xxxx Instruction type ADD xxxx 0 xx xx Mode R? R? 1 xx xx R? R? xx R? 0: 2 opérandes 1: 3 op érandes Sylvain Martel - INF6500 59 Type et taille des opérandes Pour connaître le type d’une opérande, on peut regarder son codage dans le code opération (opcode). Il existe plusieurs types d’opérandes: Entier (Integer) Simple précision (Single precision) Flottant (Floating point) Double précision (Double precision) Caractère (Char) Sylvain Martel - INF6500 60 Point flottant (Floating Point) versus entier (Integer) Floating Point Unit Integer Sylvain Martel - INF6500 61 Avantages/désavantages (plus ou moins de bits Plus de bits - Plus de mémoire (plus large) Plus de bits - Bus plus large (PCB routing, $) Plus de bits - HDW (hardware) plus complexe Sylvain Martel - INF6500 62 Le pipeline Sylvain Martel - INF6500 63 Stratégies pour accélérer l`exécution d`un programme P1 M1 P1 Pipeline1 Pipeline2 Sous-tâche Sous-tâche P1 P2 Architecture parallèle Sous-tâche Sous-tâche Pipeline Sylvain Martel - INF6500 « Superscalar » 64 Pentium Pipeline Sylvain Martel - INF6500 65 Temps par étage du pipeline Registre T1 T2 T3 FREQ = 1 / MAX (T1, T2, T3) Horloge Sylvain Martel - INF6500 66 Les obstacles du pipeline :les aléas Il existe des situations, appelées aléas (hazards), qui empêchent l’instruction suivante de flux d’instruction de s’exécuter au cycle d’horloge prévu. Il existe trois types d’aléas: Aléas structurels (structural hazards) Aléas de données (data hazards) Lorsque le matériel ne peut gérer toutes les combinaisons possibles de recouvrement d’instructions au moment de l’exécution. Lorsqu’une instruction dépend du résultat d’une instruction précédente. Aléas de contrôle (control hazards) Résultent de l’exécution en pipeline des branchements et des autres instructions qui modifient le compteur de programme (CP) Sylvain Martel - INF6500 67 Forwarding Illustration de la technique de l’envoi 0/1 0 MUX 1 EX Sylvain Martel - INF6500 68 Forwarding (suite) INSTR1: EX 5 cycles INSTR2: EX 1 cycle 0/1 0 MUX 1 EX INSTR2 a besoin du résultat de INSTR1 INSTR1 NOP NOP NOP NOP INSTR2 NOP (NO Operations) ou bulles sont générées par le compilateur Sylvain Martel - INF6500 69 Ordonnancement L’ordonnancement du compilateur pour les aléas de données pour augmenter la performance INSTR1 NOP NOP NOP NOP INSTR2 INSTR3 INSTR4 INSTR5 INSTR6 INSTR1 INSTR3 INSTR4 INSTR5 INSTR6 INSTR2 Si INSTR3,4,5,6 sont indépendants Sylvain Martel - INF6500 70 Branchement CP (PC-Program Counter) (Branch) (Return) Registre ADDR Sylvain Martel - INF6500 71 Branchement (suite) Si un branchement modifie l’adresse du CP pour y mettre l’adresse destination, il s’agit d’un branchement pris, sinon il est non pris. Si un branchement est pris, le CP de l’instruction n’est pas modifié avant la fin de l’étage MEM. Pour résoudre ce problème, il existe 4 solutions: INSTR2 INSTR1 Sylvain Martel - INF6500 72 Branchement (suite) 1) On suspend donc le pipeline jusqu’à l’étage MEM, qui détermine le nouveau CP. Cette décision doit cependant se faire après que l’instruction soit décodée est reconnue comme un branchement. Il faut alors suspendre le pipeline pendant trois cycle (un cycle est une répétition de LI, et deux cycles ne font rien). Cette méthode est coûteuse en nombre de cycle et la performance du pipeline diminue. LI NOP NOP NOP BRANCH? INSTR2 DI INSTR1 EX MEM Sylvain Martel - INF6500 73 Branchement (suite) 2) Une autre méthode un peu plus complexe consiste à traiter chaque branchement comme non pris. Si il y effectivement un branchement, on procède comme en 1), en transformant l’instruction lue en NOP (aucune instruction). INSTR4 INSTR3 INSTR1 BRANCH? Non INSTR4 INSTR3 INSTR1 BRANCH? Oui NOP NOP NOP BRANCH? LI DI BRANCH? EX INSTR1 INSTR3 INSTR4 INSTR5 INSTR2 INSTR6 INSTR7 INSTR8 MEM Sylvain Martel - INF6500 74 Branchement (suite) 3) On peut également considérer le branchement comme toujours pris. Vu qu’il est impossible de connaître l’adresse de destination du branchement avant le décodage, cette approche n’offre aucun avantage pour une architecture qui ne connaît pas l’adresse cible plus tôt. INSTR7 INSTR6 INSTR2 BRANCH? Non NOP NOP NOP BRANCH? Oui INSTR7 INSTR6 INSTR2 BRANCH? LI DI BRANCH? EX INSTR1 INSTR3 INSTR4 INSTR5 INSTR2 INSTR6 INSTR7 INSTR8 MEM Sylvain Martel - INF6500 75 Branchement (suite) 4) Certaines machines utilisent un schéma appelé le branchement différé (delayed branch). Dans un tel concept, on retrouve un certain nombre d’instructions après l’instruction de branchement qui sont exécutées que le branchement soit pris ou non. Celles-ci constituent des délais de branchement. Le compilateur tente alors d’optimiser ces délais, de plusieurs façons. Instruction avant (from before):le délai est rempli par une instruction indépendante provenant d’avant le branchement. Les autres solutions sont utilisées uniquement si celle-ci est impossible. Sylvain Martel - INF6500 76 Branchement (suite) Instruction cible (from target):le délai est remplacé par l’instruction cible du branchement. Instruction après (from fall-through): le délai est remplacé par une instruction du chemin non pris. La prédiction de branchement statique: utiliser la technologie des compilateurs. Considérons: LW R1,0(R2) DSUB R1,R1,R3 BEQZ R1,L OR R4,R5,R6 ……… (not taken/or L : ADD R7,R8,R9 Au lieu de NOP (taken) taken) Sylvain Martel - INF6500 77 Branchement (suite) La présence d’une instruction de chargement rangement suivi d’une instruction ALU utilisant le registre R1 nécessite une suspension. Supposons que le branchement (BEZQ) est presque toujours pris et que la valeur de R7 ne soit pas critique dans le chemin en séquence. On pourrait accélérer le code en déplaçant l’instruction ADD R7,R8,R9 juste derrière LW Pour effectuer de tel changements, on doit connaître la statistique de branchement à la compilation. Il existe deux méthodes: Examiner la structure du programme Utiliser des informations collectées sur des exécutions précédentes du programme (plus précis). Sylvain Martel - INF6500 78 Sylvain Martel - INF6500 79