Jeu d`instruction
Transcription
Jeu d`instruction
Jeu d’instruction Le rôle de la couche ISA Programme en Fortran Programme en C compilation compilation Couche ISA Logiciel (software) Matériel (hardware) Exécution du programme ISA Par matériel ou par microprogramme Matériel int main (){ int a = 3; … return a = b+c; } main : load a, R1 add R1, R2, R3 … $0F47 0x03D810A2 Frontière logiciel/matériel Plan de partie 1. 2. 3. 4. Codage des opérations Critères de classification des ISA Modes d’adressage Opérations du jeu d’instructions I. Codage des instructions Rappel Une instruction est la réunion des différents signaux de commande du chemin de données du processeur I. Codage des instructions Une instruction est découpée en champs Un code opération (opcode) Des informations complémentaires sur l’emplacement des données sources et de la destination La technique associée à la localisation des opérandes d’une instruction s’appelle l’adressage ou le mode d’adressage. 1. Format général d’une instruction Une instruction désigne un ordre (minimal) donné au processeur. Au contrôleur de savoir comment répondre à cet ordre : décodage en commandes CodeOp sur m bits = addition, multiplication, rangement… m 2Code instructions d’instruction du processeur Désignation des opérandes opération = le jeu a. Désignation de l’opérande (du résultat) La désignation dépend de l’endroit au se trouve la donnée Dans l’instruction elle-même (RI) : immédiat Dans un registre de travail Adressage Dans la mémoire Définition : Immédiat Un immédiat est une valeur numérique donnée directement en décimale ou hexadécimale contrairement à un adressage de positionnement de la valeur. La valeur est directement donnée dans l’instruction Elle est donc placée (indirectement ou directement) par le programmeur b. Trois options de codage Opération et Mode Adresse Nb d’opérandes Adresse 1 OP1 Opération Adresse OP1 OP2 Mode Adresse Adresse n OPn Variable (VAX: entre 1 et 53 octets) OP3 Opération Mode Adresse Adresse 1 OP1 Opération Mode Adresse Mode Adresse Adresse 1 OP1 Adresse 2 OP2 Opération Mode Adresse Adresse 1 OP1 Adresse OP2 Fixe (DLX, MIPS, PPC, SPARC) Hybride (IBM 360, Intel 80x86) c. Les choix de codage Le codage des instructions sur n bits dépend Du nombre d’opérandes par instruction (champs de l’instruction) Du mode d’adressage de ces opérandes (k bits) Du nombre d’instructions (m bits) Du nombre de registres de l’architecture Les compromis de l’architecte Le désir d’avoir autant de registres que possible L’impact sur la taille moyenne des instructions La facilité d’avoir des instructions de longueurs égales pour le décodage Plan de partie 1. 2. 3. 4. 5. 6. Codage des opérations Critères de classification des ISA Modes d’adressage Opérations du jeu d’instructions Registres de l’architecture Retour sur le codage des instructions II. Classification des ISA II. Classification des ISA Le critère le plus caractéristique est le type de stockage interne à l’UC : Pile Accumulateur Registres adressage implicite (0 adresse) adressage à 1 adresse uniquement adressage explicite (2 ou 3 opérandes) Exemple Implanter C= A + B selon les 4 types de jeu d’instructions : Pile Accumulateur Toutes les instructions peuvent accéder à la mémoire Registre (Registremémoire) Registre (chargement/rang ement) Seules les instructions de chargement (LOAD) et de rangement (STORE) peuvent accéder à la mémoire. Exemple C= A + B Pile Accumulateur LOAD A Registre (Registremémoire) LOAD R1, A Registre (chargement/rang ement) LOAD R1, A PUSH A PUSH B ADD B ADD R1, B LOAD R2, B ADD STORE C STORE C, R1 ADD R3, R1, R2 POP C STORE C, R3 Architectures correspondantes Architecture à Pile Pile B A 8 8 6 Commandes ALU 8 O N Z Architecture à accumulateur Mémoire B A 8 8 6 Commandes ALU 8 O N Z Accumulateur Architecture à chargement / rangement Banc de registres B A 8 8 6 Commandes ALU 8 O N Z 2. Historique La plupart des machines anciennes utilisaient des architectures à pile ou à Acc. Depuis les années 1980, pratiquement toutes ont une architecture à Chargement/Rangement (GPR). Deux raisons : Les registres sont plus rapide que la mémoire Le compilateur peut utiliser l’architecture plus facilement et plus efficacement Réduction du trafic mémoire Exemple : (A*B) – (C*D) – (E*F) 3. Machines Chargement/Rangement Les différences : L’UAL a 2 ou 3 opérandes Nombre d’adresses mémoire par instruction UAL (de 0 à 3) Nombre d’adresses mémoire 0 1 2 3 Nombre max d’opérandes 3 3 3 3 Exemples SPARC, MIPS, PowerPC, Alpha Intel 80x86, Motorola 68000 VAX VAX Classification par adressage Type Avantages Inconvénients Registre-Registre (0,3) Codage simple d’instructions de longueur fixe. Modèle simple de génération de code. Les instructions prennent le même nombre de cycle pour s’exécuter Nombre d’instructions élevées. Certaines instructions courtes gaspillent des champs dans le codage uniforme. RegistreMémoire (1,2) Les données peuvent être obtenues sans un chargement préalable. Les formats d’instructions apportent une grande densité. Le nombre de cycles par instruction varie selon la position de l’opérande. MémoireMémoire (3,3) Le plus compact! Ne gaspille pas de registres pour les données temporaires Grande variation de taille des instructions. Les accès mémoires créent un goulot d’étranglement. 4. Résumé sur la classification des ISA Quelques critères discriminants : Nombre max d’opérandes Nombre d’adresses mémoire pour les opérations UAL Mode d’adressage des opérandes mémoires Format (codage) des instructions Implémentation du jeu d’instruction Nombre d’instructions Suite du cours III. Adressage mémoire 1. Organisation mémoire • Les mots mémoires sont aujourd’hui multiple de l’octet • Les adresses de ces mots sont alignées en mémoire • On ne peut transférer que des mots alignés • La taille d’un mot correspond généralement à l’architecture du processeur (pas toujours), • Aujourd’hui on appelle généralement mot, un ensemble de 32 bits a. Hiérarchie mémoire Capacité Bandes Indéfinie 1 Moctet 200 Mo/s Un seul espace d’adressage 1ms 100 cycles Mémoire principale 1 Goctet 133Mo/s 1 Koctet 800Mo/s 10ms 10k cycles Disques optiques Mémoire secondaire Disque magnétique 1 Toctet 30Mo/s Temps d’accès Cache Registres 100ns 10 cycles 10ns 1 cycles 1ns 1 cycle b. protocole de rangement Big Endian Motorola 68000, Sparc Little Endian Intel, AMD Les deux modes 0x12 34 56 78 PowerPC MIPS 0x78 56 34 12 00 01 02 04 05 06 07 08 09 10 11 03 02 01 00 07 06 05 04 09 08 11 10 03 L’instruction BSWAP reg du x86 Inverse l’ordre des octets du registre reg de Big à Little c. Alignement des mots mémoire Historiquement les mots mémoire étaient des mots de 8 bits (1 octet) Pour maintenir la compatibilité des logiciels, et du code ASCII, le matériel manipulant des mots de 32 bits est obligé d’émuler des mots de 8 bits Les 2 bits de poids faible du bus d’adresse n’existent en fait tout simplement pas! Les fils du bus d’adresse vont de 31 à 2 ! d. Exemple LOAD R1, [0x00000008] accède au mot de 4 octets dont les adresses sont : LOAD R1, [0x…12] accède au mot de 4 octets dont les adresses sont : 0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 1001 0000 0000 0000 0000 0000 0000 0000 1010 0000 0000 0000 0000 0000 0000 0000 1011 0000 0000 0000 0000 0000 0000 0001 0010 0000 0000 0000 0000 0000 0000 0001 0011 0000 0000 0000 0000 0000 0000 0001 0100 0000 0000 0000 0000 0000 0000 0001 0101 Les accès mémoire dont les 2 bits d’adresse de poids faible ne sont pas nuls (non multiples de 4) sont dit « out of alignment » Dans le processeur un flag dans le registre d’état est présent pour détecter ce type d’exception e. Illustration Conséquence : • Lorsqu’on dit incrémenter le PC, L’opération n’est pas PC+1 Mais PC+4! Accès alignés – non-alignés Objet adressé par Alignés Non alignés Octet 0,1,2,3,4,5,6,7 Jamais Demi-mot 0,2,4,6 1,3,5,7 Mot 0,4 2,3,5,6,7 Double-mot 0 1,2,3,4,5,6,7 2. Adressage mémoire Les Modes d’adressage Mode Registre Immédiat Exemple Add R4, R3 Add R4 #3 Signification Cas d’utilisation Déplacement R4 <= R4 +R3 Registres R4 <= R4 + 3 Constantes, opération ALU, comparaisons… Add R4, 100(R1) R4 <= R4 + Mem[R1+100] Variables locales Indirect par registre Indexé Add R4, (R1) R4<= R4 + Mem[R1] pointeurs Add R4, (R1+R2) R4 <= R4+ Mem[R1+R2] Tableaux : R1=base, R2=index Direct Add R4, (1001) R4 <= R4 + Mem[1001] Variables statiques Indirect via Add R1, @(R3) mémoire Auto-incrémenté Add R1, (R2)+ R1<= R1 + Mem[Mem[R3]] Adresse de pointeur R1<=R1+Mem[R2]; R2++ Parcours de tableaux Auto-décrémenté Add R1, -(R2) R2--; R1 <= R1 + Mem[R2] Idem Indexé étendu R1 <= R1+ Mem[100+R2] spécifique Add R1, 100(R2)[R3] Utilisation des modes d’adressage en mode mémoire. (Etendu) Mode immédiat Pourcentage d’opérations utilisant les immédiats Influences sur l’ISA : • Valeurs du champs Imdt : Taille des instructions Distributions de valeurs des immédiats Influences sur l’ISA : • Qu’en est-il de la valeur des adresses utilisées en mode direct ? Distribution de déplacements Résumé Une machine moderne a surtout besoin d’avoir un jeu d’instruction Avec les modes d’adressage : registre, déplacement, immédiat, et indirect par registre Avec une taille d’adresse de 12 à 16 bits Avec une taille d’immédiat de 8 à 16 bits IV. Les opérations du jeu d’instruction 1. Nombre d’instructions Un jeu d’instruction simple peut contenir une centaine d’instruction Un jeu d’instruction complexe peut contenir plus d’une centaine d’instructions Première définition d’un jeu d’instruction RISC/CISC a. Catégories d’instructions Type d’opérateur Arithmétique Transferts de données Contrôle Système Flottant Décimal Chaîne Graphique Exemple ALU Chargement/rangement Branchement, saut, call Appel OS, gestion mémoire IEEE 754 Opérations base 10 Comparaison, parcours Opérations sur pixels, compression… b. Les 10 instructions simples représentent 96% des exécutions Rang 1 2 3 4 5 6 7 8 9 10 Instructions x86 Chargement Branchement conditionnel Comparaison Rangement Addition Et Soustraction Transfert reg–reg Appel (call) retour total Moyenne sur entiers 22% 20% 16% 12% 8% 6% 5% 4% 1% 1% 96% 2. Instructions de contrôle du flux d’exécution Représentent + de 40 % des exécutions Introduction : Comment se réalise un if cond then op1 else op2 en langage machine ? etiqu2 : endif : bne cond etiqu2; op1; jmp endif; op2; … a. Quatre types de flux de contrôle Branchements conditionnels (80%) Sauts (6%) Appels de procédure (7%) Retours de procédure (7%) Dans tous les cas, l’adresse de destination est spécifiée explicitement dans l’instruction (sauf le retour). L’adresse est donnée en adressage relatif par rapport au PC courant (sauf sauts indirects : fonctions virtuelles, biblio dynamiques : l’adresse n’est pas connue à la compil.). Code indépendant de sa position mémoire : code relogeable ! b. Evaluation des conditions Code condition : Registre condition Des bits spéciaux (FLAGS) sont positionnés par les opérations de l’ALU (pas d’instruction particulière) Test d’un registre spécial qui contient la valeur Comparaison et branchement Les 2 réalisées en 1 instruction c. Les indicateurs de conditions de l’ALU N : qui est mis à 1 si le résultat est négatif Z : qui est mis à 1 si le résultat est égal à 0 V : qui est mis à 1 si le résultat provoque un dépassement de capacité C : qui est mis à 1 si le résultat provoque une retenue sortant P : qui est mis à 1 si le résultat présente une parité paire … 3. Types des opérandes Nous avons déjà vu que la représentation binaire était à la base de la représentation de différents types de données : Données numériques : entiers (signés ou non) ou réels Données non-numériques : ASCII (7bits), UNICODE (16 bits) Valeurs booléennes Adresses (entiers) Il existe des instructions dédiées à chacun de ces types de données Données numériques manipulées par le Pentium II Données numériques manipulées par l’UltraSparc II Complément à 2 IEEE 754 V. Les registres de l’architecture Les registres Les registres de la couche microarchitecture ne sont pas tous visibles depuis la couche ISA On peut de plus les classer en 2 catégories : Registres spécialisés PC, RI… Accessible en mode système (kernel) : contrôle des caches, des unités d’E/S, SR Registres généraux (R0, R1, R2…) Jeu d’instruction du Pentium II Compatible depuis le 8086 (1978)! Depuis le 80386 le premier processeur 32 bits, on appelle cette architecture IA-32 3 modes opératoires mode réel : les nouveautés sont ignorées, le pentium II est un 8088! mode virtuel : exemple d’une commande DOS sous windows Mode protégé : mode pentium II Evolution chez Intel 8086 80286 (1989) (1993) (1995) Cache mémoire à 2 niveaux 8Ko + 256Ko Pentium II + Celeron + Xeon Double pipeline Pentium pro (1985) 32 bits, cache de 8K Pentium (1982) 32 bits 80486 16 bits, mémoire étentue 80386 16bits, 1Mo, (1978) (1997) MMX Pentium III Pentium IV (1999) (2000) Compatibilité ascendante Registres du processeur 8080 bits 8080 0 1 2 3 4 A B C D Bus de données 8bits H L Bus d’adresse 8bits 255 Registres du processeur 8086 – 16 bits 8086 AX AH AL BX BH BL CX CH CL DX DH DL 0 1 2 3 4 Bus de données 16bits SI DI SP BP Bus d’adresse 20bits 65,535 Principaux registres du Pentium-II – 32bits 0 1 2 3 4 Bus de données 16bits Bus d’adresse 20bits 4Go Exemple d’instructions de l’IA-32 Langage assembleur : MOV reg, reg MOV reg, imm ADD reg, reg Langage machine (8 octets) : 0x 89 (11SS SDDD)2 1011 11DDD+4octets pour imm 0x 01 (11SS SDDD)2 Codes des registres S et D : EAX 000 ESP 100 ECX 001 EBP 101 EDX 010 ESI 110 EBX 011 EDI 111 Block-diagram du Pentium Registres généraux de l’Ultrasparc II Block-diagram de l’ultrasparc-II VI. Le rôle des compilateurs 1. Compilateur Vs. Architecture Aujourd’hui tous les codes machine sont produits par les compilateurs. La conception de nouveaux ISA demande la prise en compte de la technologie des compilateurs. Isoler le compilateur du matériel risque d’arriver à des manques efficacité. Quelles caractéristiques conduiront à un code de qualité? Qu’est ce qui facilite dans l’architecture l’écriture de compilateurs efficaces? 2. Impact des compilateurs Optimisation essentielle : allocation des registres par coloriage de graphes (pour + de 16 registres). Comment un programme de haut niveau utilise l’ISA? Pour y répondre : Comment sont allouées et adressées les variables et combien de registres sont nécessaires pour allouer correctement les variables? 3 zones mémoires : Tas (allocation dynamique) Pile (paramètres, variables locales) Mémoire globale (variables globales) VII. Classification RISC/CISC Historique des ISA 1960, Les compilateurs ne sont pas développés. La machine émule le fonctionnement de la pile. Architecture à Pile populaire. 1970, La mémoire coûte chère. Réduire les coûts logiciels ainsi que la taille du code. On remplace donc du logiciel par du matériel. Jeu d’instruction complexe. (VAX…) 1980, évolution de la technologie des compilateurs. Architectures RISC, chargement/rangement. (MIPS, IBM 801, RISC-I) Critères RISC, critères d’aujourd’hui Peu d’instructions (simples) Peu de modes d’adressage Taille fixe des instructions Au moins 16 registres + qqs registres flottants Utiliser des registres généraux avec une architecture chargement/rangement Utiliser les modes d’adressage : Déplacement, immédiat, indirect par registres RISC/CISC Les choix architecturaux ont un impact sur le jeu d’instruction (ou inversement) : 2. Le nombre d’unités de calcul => Nb Codop 3. Le nombre d’opérandes pour chacune (ACC, Reg, Pile) 4. Leur mode d’accès (mémoire, registres) 5. Le nombre de registres = taille des champs 6. Le nombre de bus mémoire OPCOD : 1 OP1 : 3, 4 OP2 : 3, 4 OPn : 2, 1 Architectures de traitement utilisées dans l’embarqué RISC Un exemple de machine RISC virtuelle, le DLX Registres Type de données 32 registres (R0 = 0) 32 registres flottant (F0, F31), 32 ou 64 bits Entiers : Octets, demi-mots, mots Flottant : simple, double précision Modes d’adressage Immédiats, indirect et déplacement avec champs de 16 bits Espace Mémoire adressable sur 32 bits en Big Endian Format d’instructions Taille fixe sur 32 bits : 6 bits de codop 3 formats d’instruction Jeu d’instruction du DLX Transferts de données Arithmétique et logique Contrôle Virgule flottante Block-diagram du MIPS-R3000 Performances Le DLX dispose d’instructions simples Contrairement au VAX qui fournissait des instructions proches du langage de haut niveau Une telle architecture doit exécuter plus d’instructions pour un même code. Elle est donc moins performante ? Comparaison MIPS R2000/VAX 8700 Simplicity favors regularity