La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CENTRAL PROCESSING UNIT Hugo Descoubes - Juin 2013 Architecture et Technologie des Ordinateurs.

Présentations similaires


Présentation au sujet: "CENTRAL PROCESSING UNIT Hugo Descoubes - Juin 2013 Architecture et Technologie des Ordinateurs."— Transcription de la présentation:

1 CENTRAL PROCESSING UNIT Hugo Descoubes - Juin 2013 Architecture et Technologie des Ordinateurs

2 CPU Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Tout CPU effectue séquentiellement les traitements présentés ci-dessous : 2 – copyleft FETCH DECODE EXECUTE WRITEBACK

3 CPU La très grande majorité des architectures modernes sont capables de réaliser une partie voire toutes ces étapes en parallèle. Nous parlerons de pipelining hardware. 3 – copyleft FetchDecodeExecuteWriteback ProgramMemory … CPU PC 1 level Hardware Pipeline PC Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

4 CPU La très grande majorité des architectures modernes sont capables de réaliser une partie voir toutes ces étapes en parallèle. Nous parlerons de pipelining hardware. 4 – copyleft Fetch ProgramMemory … Decode CPU Execute Writeback PC PC Program Counter 4 levels Hardware Pipeline Opcode Manipulation Sources Operands Manipulation Dest. Operand Manipulation Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

5 CPU Pour un CPU, posséder un pipeline hardware est donc intéressant. Cependant, un pipeline trop long peut entraîner des ralentissement (souvent lié aux instructions de saut). Il devient alors très difficile daccélérer larchitecture (mécanismes daccélération). A titre dexemple, les architectures Penryns de Intel possèdent un pipeline Hardware de 14 niveaux et Nehalem étages. Pipeline matériel de la famille sandy bridge : 5 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

6 CPU 6 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Etudions un CPU élémentaire RISC-like nétant rattaché à aucune architecture connue. Observons le jeu dinstruction très très réduit associé :

7 CPU 7 – copyleft Implémentation assembleur du langage C ci-dessous : Programme en C Programme en C Programme assembleur Programme assembleur Program AddressMnemonicoperandsBinary Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

8 CPU 8 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory PC = 0x0 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R2 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

9 CPU 9 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x1 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

10 CPU 10 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x2 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

11 CPU 11 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x3 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

12 CPU 12 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x4 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

13 CPU 13 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x5 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

14 CPU 14 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x6 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

15 CPU 15 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x7 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

16 CPU 16 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x8 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory uuuuuuuu Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

17 CPU 17 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x0 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory uuuuuuuu uuuuuuuu Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

18 CPU 18 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x1 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory uuuuuuuu uuuuuuuu Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

19 CPU 19 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x2 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory uuuuuuuu Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

20 CPU 20 – copyleft Fetch stage Instruction Bus Decode stage Execution Unit PC = 0x3 8 4 Program Address Bus MUX 3 Data Address Bus 8 Data Bus CPU Address Binary R1R x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x x x x x x7 uuuuuuuu 0x8 uuuuuuuu … … 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu 0x x x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Program Memory Data Memory Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

21 CPU 21 – copyleft Etc … Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

22 CPU 22 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Harvard Modifié Harvard Modifié Un CPU peut posséder différents modèles dinterconnexion avec les mémoires (program et data). Chaque modèle amène son lot davantages et dinconvénients. Historiquement, lune des premières architectures rencontrées était celle de Von Neumann. Mapping mémoire voire mémoire unifiée (code et données). Le CPU 8086 de Intel possède une architecture de Von Neumann. Néanmoins via une astuce il possède un pipeline à 2 niveaux. Instruction Data Bus Program&DataMemory Unified CPU

23 CPU 23 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Harvard Modifié Harvard Modifié En 2012, certains CPUs actuels utilisent encore ce type de fonctionnement dans certains cas. Il sagit darchitectures hybrides Harvard/Von Neumann, par exemple les PIC18 de Microchip. Possibilité de placer des données en mémoire programme. Observons quelques avantages et inconvénients de cette architecture : Mapping mémoire unique Mapping mémoire unique (data et program) Polyvalent si mémoire unifiée Polyvalent si mémoire unifiée. Applications code large et peu de données et vice versa. pipeline matériel impossible/difficile Mais, pipeline matériel impossible/difficile (fetch, decode, execute, writeback en parallèle).

24 CPU 24 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Harvard Modifié Harvard Modifié En 2012, larchitecture de Harvard est toujours rencontrée sur certains processeurs. Prenons les exemples des PIC18 de Microchip, AVR de Atmel … Une architecture de Harvard offre une mémoire programme séparée de la mémoire donnée. Technologie, taille des adresses donc taille des mémoires et bus distincts. Data Bus Instruction Bus CPU ProgramMemory DataMemory

25 CPU 25 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Harvard Modifié Harvard Modifié Observons quelques avantages de ce type darchitecture : pipeline matériel possible pipeline matériel possible. Fetch (program memory) en parallèle des phases decode (CPU), execute (CPU ou data memory) suivi du writeback (CPU ou data memory). Observons quelques inconvénients de ce type darchitecture : Mapping mémoires distincts Mapping mémoires distincts (adresse mémoire donnée différente adresse mémoire programme). Moins flexible pour le développeur. Peu polyvalent Peu polyvalent. Certaines applications exigent une large empreinte en mémoire donnée (traitement image et son, bases de données…) pour dautres ce sera le code …

26 CPU 26 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Harvard Modifié Harvard Modifié Larchitecture de Harvard modifié tend à allier les avantages des deux architectures précédemment présentées. Elle amène cependant son lot dinconvénients. La très grande majorité des CPUs modernes utilise ce type darchitectures. Prenons une liste non exhaustive de CPU : Core/Coreix de Intel, Cortex-A de ARM, C6xxx de Texas Instrument … Harvard Data Bus Instruction Bus L1D Controller CPU L1P CacheL2 Unified L2 Controller Main Memory Unified or L3 Cache Unified (shared) Von Neumann Cache L1D Separated Cache L1P Separated

27 CPU 27 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Harvard Modifié Harvard Modifié En informatique, une mémoire cache est chargée denregistrer et de partager temporairement des copies dinformations (données ou code)venant dune autre source En informatique, une mémoire cache est chargée denregistrer et de partager temporairement des copies dinformations (données ou code) venant dune autre source, contrairement à une mémoire tampon qui ne réalise pas de copie. Lutilisation de mémoire cache est un mécanisme doptimisation pouvant être matériel (Cache Processeur L1D, L1P, L2, L3 shared…) comme logiciel (cache DNS, cache ARP…). Sur processeur numérique, le cache est alors hiérarchisé en niveaux dépendants des technologies déployées :

28 CPU 28 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Harvard Modifié Harvard Modifié Ce type darchitecture allie les avantages et comble les inconvénients associés aux architectures de Harvard et de Von Neumann via lutilisation de mémoire cache (mémoire temporaire). Néanmoins, pour un développeur bas niveau adepte de loptimisation ou du développement de drivers, une manipulation optimale de la mémoire cache exige une grande rigueur de codage. cohérence des informations Lun des principaux dangers de ce type de mémoire, est la cohérence des informations présentes dans la hiérarchie mémoire du processeurs. Par exemple pour un coreix de la famille sandy bridge, une même donnée peut exister avec différentes valeurs en mémoire de masse (hard disk), mémoire principale (DDR3), mémoire cache L3 (shared multi-core), L2 (unified mono-core), L1D (separeted mono- core) et dans les registres internes du CPU.

29 CPU 29 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Découvrons plus en détail le 8086 anciennement proposé par Intel. Rappelons que ce CPU est à la base des architectures x86 : : bus dadresse de donnée : bus de contrôle : Interruptions : Direct Memory Access

30 CPU 30 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Dr J. Y. Haggège Execution Unit : Execution Unit : décode puis exécute les instructions présentes dans la file dattente Bus Interface Unit : Bus Interface Unit : contrôle des bus pour les accès mémoire. Calcul adresses physiques (segmentation). Gestion phases de fetch via IP ou Instruction Pointer (équivalent à PC ou Program Counter).

31 CPU 31 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Dr J. Y. Haggège Segmentation: Segmentation: la segmentation mémoire sera vue plus tard dans le cours lorsque nous aborderons létude de la MMU (Memory Managment Unit). Pile : Pile : vu dans la suite du cours. Indexage : Indexage : vu dans la suite du cours.

32 CPU 32 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Dr J. Y. Haggège General Purpose Registers : General Purpose Registers : AX (AH+AL), BX (BH+BL), CX (CH+CL) et DX (DH+DL) sont des registres généralistes 16bits. Certains dentre eux peuvent être spécialisés AX=accumulateur, CX=compteur… Instruction Pointer : Instruction Pointer : contient ladresse de la prochaine instruction à aller chercher.

33 CPU 33 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Dr J. Y. Haggège Arithmetic Logical Unit : Arithmetic Logical Unit : lUAL ou ALU est lunité de calcul du CPU. Cette unité effectue des opérations arithmétiques et logiques élémentaires. Flags : Flags : des flags (indicateurs) sont toujours associés à une ALU : Carry (débordement), Z (zero), S (signe), O (overflow) …

34 CPU 34 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Original 8086 Instruction set

35 CPU 35 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Original 8086 Instruction set

36 CPU 36 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Nous allons maintenant découvrir quelques-unes des principales instructions supportées par le 8086 (documentation en ligne, Il ne sagira pas dune étude approfondie de chaque instruction et certaines subtilités ne seront pas abordées dans ce cours ou seront vues par la suite (adressage indexé, segmentation…). La présentation suivante sera découpée comme suit :http://zsmith.co/intel.html Instructions de management de données Instructions de management de données Instructions arithmétiques et logiques Instructions arithmétiques et logiques Instructions de saut Instructions de saut

37 CPU 37 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Comme tout CPU, le 8086 est capable de déplacer des données dans larchitecture du processeur : registre (CPU) vers mémoire registre (CPU) vers mémoire registre (CPU) vers registre (CPU) registre (CPU) vers registre (CPU) mémoire vers registre (CPU) mémoire vers registre (CPU) Un déplacement mémoire vers mémoire en passant par le CPU nest pas implémenté et aurait peu dintérêt (mémoire vers CPU suivi de CPU vers mémoire). Si nous souhaitons réaliser des transferts mémoire/mémoire sans passer par le cœur, les périphériques de type DMA (Direct Memory Access) peuvent sen charger. Si votre processeur en possède.

38 CPU 38 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Commençons par linstruction MOV. Vous constaterez que cette instruction supporte un grand nombre de modes dadressages. Ceci est typique dun CPU CISC. En général, les CPU RISC implémentent moins de modes dadressage avec des instructions dédiées à chaque mode. Adressage registre : Adressage registre : déplacement de données dans le CPU. Registre vers registre. Adressage immédiat : Adressage immédiat : affectation dune constante dans un registre. Le déplacement dune constante vers la mémoire est également possible.

39 CPU 39 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Nous partirons pour le moment dune hypothèse fausse. Supposons que nous ne pouvons manipuler que 64Ko de mémoire (données et programme unifiées) et donc des adresses sur 16bits uniquement Les modes dadressage suivants manipulent tous la mémoire. Nous partirons pour le moment dune hypothèse fausse. Supposons que nous ne pouvons manipuler que 64Ko de mémoire (données et programme unifiées) et donc des adresses sur 16bits uniquement. Nous découvrirons la capacité mémoire réelle de 1Mo du 8086 lorsque nous présenterons la notion de segmentation. Adressage direct : Adressage direct : déplacement de données du CPU vers la mémoire ou vice versa. Ladresse de la case mémoire à manipuler est directement passée avec lopcode de linstruction. 64Ko 0 0xFFFF 0x0000 1o 0x000F … … Data Memory

40 CPU 40 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Adressage indirect : Adressage indirect : déplacement de données du CPU vers la mémoire ou vice versa. Ladresse de la case mémoire à manipuler est passée indirectement par un registre. Adressage indexé : Adressage indexé : non vu en cours. Registres dindex SI et DI. Suffixes dinstruction : Suffixes dinstruction : permet de fixer le nombre doctets à récupérer ou sauver en mémoire (uniquement en syntax AT&T). 64Ko 0 0xFFFF 0x0000 1o 0x000F … … Data Memory

41 CPU 41 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Quelque soit le langage dassemblage rencontré, les opérandes manipulées par une instruction seront toujours lune de celles qui suit : Immédiat Immédiat (constante) : imm>reg ou imm>mem Registre Registre (contenant une donnée ou une adresse) : reg>reg Addresse : Addresse : reg>mem ou mem>reg ou saut mem Les combinaisons présentées ci-dessus permettent daccéder et de manipuler la totalité de larchitecture du processeur.

42 CPU 42 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Instructions arithmétique : Instructions arithmétique : attention, les modes dadressage supportés diffèrent dune instruction à une autre. Etudions quelques instructions arithmétique en mode dadressage registre : Instructions logique : Instructions logique : manipulation bit à bit de données :

43 CPU 43 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Les instructions de saut ou de branchement en mémoire programme peuvent être conditionnels ou inconditionnels. En langage C, elles permettent par exemple dimplémenter : if, else if, else, switch, for, while, do while, appels de procédure. Structures de contrôle : Structures de contrôle : Observons une partie des instructions de saut conditionnelles. Elles utilisent toutes les flags retournés par lALU et doivent être pour la plupart utilisées après une instruction arithmétique, logique ou de comparaison. Dr J. Y. Haggège

44 CPU 44 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Prenons un exemple de programme C et étudions une implémentation assembleur possible. La solution nest bien sûr pas unique :

45 CPU 45 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu dinstruction jeu dinstruction Appel de procédure: Appel de procédure: dans une premier temps, nous ne parlerons que des appels de procédure sans passage de paramètres. Cette partie sera vue dans la suite du cours lorsque nous aborderons la notion de pile ou stack. Juste après avoir vu la segmentation mémoire, notamment les segments SS=Stack Segment et CS=Code Segment).

46 CPU 46 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Observons les principales évolutions des architectures x86-64 du 8086 jusquà larchitecture Sandy Bridge :

47 CPU 47 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Observons les principales évolutions des architectures x86-64 du 8086 jusquà larchitecture Sandy Bridge :

48 CPU 48 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Rappelons les registres rencontrés sur architecture 8086 de Intel : Dr J. Y. Haggège

49 CPU 49 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core En même temps que les architectures des CPUs évoluent, le nombre et les tailles des registres de travail évoluent également. Observons les principaux registres de travail généralistes (iL/iH imbriqué dans iX imbriqué dans EiX lui-même imbriqué RiX) : General Purpose Registers (i = A, B, C, D) Depuis 8086 architecture Depuis architecture (E = Extended) Depuis Intel 64 architecture (64bits mode-only) General Purpose Registers for Floating Point Unit : x87 and MMX extensions (i = 0 to 7) Depuis architecture (x87 extension) Depuis Pentium MMX architecture

50 CPU 50 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core General Purpose Registers for SIMD Execution Units (SSE extensions) (i = 0 à 7 with Pentium III SSE ) (i = 0 à 7 with Pentium III SSE ) (i = 0 à 15 with Intel 64) (i = 0 à 15 with Intel 64) Depuis Pentium III architecture (SSE extension) Depuis Sandy Bridge architecture (AVX extension) 64bits mode-only General Purpose Registers (i = 8 to 15) Depuis Intel 64 architecture (64bits mode-only)

51 CPU 51 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Pour rappel, linstruction dpps précédemment étudiée durant le chapitre précédent fut introduite avec lextension SSE4.1 et utilise donc les registres 128bits XMMi :

52 CPU 52 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Pointer Registers (i = S and B) Registres pour la manipulation de pointeurs (SP, BP, SI, DI et xS) : Segment Registers (i = C, D, S, E, F and G) (i = C, D, S, E, F and G) (64bits mode-only) Index Registers (i = S and D) (64bits mode-only) Depuis 8086 architecture

53 CPU 53 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Instruction Pointer Register Dautres registres divers ou spécialisés sont également arrivés au cours des évolutions des architectures : Descriptor Table Registers (GDTR, LDTR, IDTR), task register (TR), control registers CR0-CR8 64bits mode-only … Depuis 8086 architecture

54 CPU 54 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Environnements dexécution en modes 32bits et 64bits :

55 CPU 55 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Analysons maintenant les principaux mécanismes daccélération matérielle apportés sur architecture Sandy Bridge de Intel Analysons maintenant les principaux mécanismes daccélération matérielle apportés sur architecture Sandy Bridge de Intel. Une bonne partie de ces mécanismes doptimisation nont pas forcément à être connus des développeurs, même pour un développeur bas niveaux. Contrairement à dautres architectures (par exemple, CPU DSP C6xxx de TI), les CPUs compatibles x86-64 exécutent un flot dinstruction présent in-order (dans lordre) en mémoire et appliquent des mécanismes daccélération matérielle dexécution out-of order dans le CPU. Ceci amènent notamment une architecture hardware plus complexe, plus gourmande en énergie, sujette à de fortes contraintes déchauffement, plus difficile à appréhender et à accélérer.

56 CPU 56 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Vu densemble du pipeline matériel de la microarchitecture Sandy Bridge de Intel : Front End Out-of Order Engine Execution Core Cache Hierarchy

57 CPU 57 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry Etudions le pipeline matériel de la microarchitecture Sandy Bridge de Intel sortie courant La mémoire cache et la notion de TLB (Translation Lookaside Buffer) seront étudiés plus tard dans le cours. Nous partirons de lhypothèse (souvent juste) que les instructions nécessaire à lexécution du code en cours traitement par le CPU sont présentent en ICache (Instruction Cache).

58 CPU 58 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry Branch Prediction Unit Lunité de prédiction aux branchements est chargée danticiper et prédire les branchements futurs. Elle peut prédire de façon efficace : branchement conditionnel, jump et call directs et indirects, returns de procédure. Le pipeline actuellement présenté est hérité de la microarchitecture Nehalem de Intel (premiers corei7 fin 2008). Legacy Decode Pipeline (Nehalem)

59 CPU 59 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Lunité Instruction Fetch est chargée dacheminer 16octets alignés à travers lITLB et présents en L1 Icache vers lunité de pré-décodage. Comme tout jeu dinstruction CISC, les instructions ne possèdent pas une taille fixe. Lunité de pré-décodage est chargée didentifier le nombre dinstruction contenue dans les 16o récupérés (instructions préfixées). Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.)

60 CPU 60 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Potentiellement, des bulles (clusters dans la file dattente sans instruction) peuvent être naturellement insérés en fonction du code en cours dexécution. Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Instruction Queue

61 CPU 61 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Cet étage peut également réaliser la macro-fusion dinstruction simple. Sous condition, prenons des exemples dinstructions pouvant fusionnées sur architecture Sandy Bridge : CMP, TEST, ADD, SUB, AND, INC, DEC Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Macro-fused Instruction Queue

62 CPU 62 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit xorq %rax32(%rbp) xorOperation+memoryStore Lunité de décodage dinstruction est chargée de décoder les instructions CISC en micro-opérations ou uops élémentaires (operation, load, store, jump …). Par exemple, xorq %rax, 32(%rbp) devient xorOperation+memoryStore Par exemple, lorsque Intel introduisit lextension SSE2 avec le Pentium4, chaque instruction sur 128bits était découpée en 2 uops de 64bits. Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Instruction Decoder Complex Decode Simple Decode Simple Decode Simple Decode 1uop 4uops

63 CPU 63 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Les instructions CISC complexe sont routées vers un décodeur dédié (Complex Decode). En cas dinstructions générant plus de 4 uops, celles-ci sont alors extraites dune mémoire morte ROM associée à un séquenceur (MSROM) chargé denvoyer le flot de uops à létage suivant. Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Instruction Decoder Complex Decode Simple Decode Simple Decode Simple Decode 1uop 4uops MSROM Microcode Sequencer 4uops/Cy

64 CPU 64 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Le flot dinstruction est alors acheminé vers une nouvelle file dattente dont le travail principal est de combler les bulles rencontrées dans les étages précédents afin dassurer un flot dans le désordre quasi constant de 4uops (out-of order). Certains mécanismes daccélération sont insérés à cette étape. Etudions les principaux. Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Instruction Decoder Complex Decode Simple Decode Simple Decode Simple Decode 1uop 4uops MSROM Microcode Sequencer 4uops/Cy ~4uops guarantee Instruction Decoder Queue (micro-fusion)

65 CPU 65 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Le Loop Stream Detector (LSD) permet de détecter et de verrouiller les petites boucles (< 18 instructions) et évitent donc notamment des phases de fetch et de décodage inutiles. La boucle est invalidée par lunité de prédiction dès quune prédiction manquée est détectée (miss- prediction). Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Instruction Decoder Complex Decode Simple Decode Simple Decode Simple Decode 1uop 4uops MSROM Microcode Sequencer 4uops/Cy ~4uops guarantee Instruction Decoder Queue (micro-fusion) Loop Stream Detector Loop Stream Detector up to 28uops

66 CPU 66 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Cet étage peu également réaliser sous condition des micro-fusions de uops pouvant être décodées et exécutées par la suite : uop + uop = micro-fused complex uop Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Instruction Decoder Complex Decode Simple Decode Simple Decode Simple Decode 1uop 4uops MSROM Microcode Sequencer 4uops/Cy ~4uops guarantee Instruction Decoder Queue (micro-fusion) Loop Stream Detector Loop Stream Detector up to 28uops

67 CPU 67 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Observons linstruction dpps précédemment étudiée dans le cours et découvrons son découpage en uops (unfused, micro-fused et macro-fused) à avant létage dexécution out-of order du CPU :

68 CPU 68 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Le Decoded Icache est lune des évolutions majeure amenée avec larrivée de la micro- architecture Sandy Bridge. Legacy Decode Pipeline (Nehalem) Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Instruction Decoder Complex Decode Simple Decode Simple Decode Simple Decode 1uop 4uops MSROM Microcode Sequencer 4uops/Cy ~4uops guarantee Out-of Order Instruction Decoder Queue (micro-fusion) Loop Stream Detector Loop Stream Detector up to 28uops Decoded Icache 1,5K uops 8ways set Direct Mapped 32sets 8ways/set up to 6uops/way Decoded ICache (Sandy Bridge) 4uops/Cy uops cache build advertised

69 CPU 69 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core L1 ICache 32Ko 8ways set associativeITLB 4Ko page 128 entry 2-4Mo page 8 entry 16o aligned/Cy 128bits Instruction Fetch Unit Branch Prediction Unit Le Decoded Icache est une mémoire cache de uops de taille fixe Le Decoded Icache est une mémoire cache de uops de taille fixe déjà décodées et donc remplie après létage de décodage dinstruction. Cette mémoire cache est enfouie dans larchitecture du cœur. Il sagit dune technologie proche du Trace Cache du Pentium 4. Il faut savoir que sur un flow typique dinstructions, ~80% des uops sont issues de ce cache, ~15% du pipeline hérité et ~5% du MSROM. Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) 1 Inst. Instruction Queue 18++ Instructions (macro-fusion) 1 Inst. up to 4 Inst./Cy Instruction Decoder Complex Decode Simple Decode Simple Decode Simple Decode 1uop 4uops MSROM Microcode Sequencer 4uops/Cy ~4uops guarantee Instruction Decoder Queue (micro-fusion) Loop Stream Detector Loop Stream Detector up to 28uops Decoded Icache 1,5K uops 8ways set Direct Mapped 32sets 8ways/set up to 6uops/way Decoded ICache (Sandy Bridge) 4uops/Cy uops cache build advertised

70 CPU 70 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Il existe plusieurs familles darchitectures capables dexécuter un flot dinstructions dans le désordre (out-of order). Il existe plusieurs familles darchitectures capables dexécuter un flot dinstructions dans le désordre (out-of order). Les architectures Intel (depuis le Pentium pro famille P6), les PowerPC de IBM, les Cortex-A de ARM … effectuent ces mécanismes daccélération dans le CPU au niveau de létage dexécution (après décodage). Dautres architectures comme les CPU DSP C6000 de Texas Instruments effectuent ces mécanismes à la compilation. Lavantages étant davoir un CPU beaucoup plus simple mais un code out-of order en mémoire contrairement aux architectures précédemment citées qui possèdent un code in-order en mémoire et donc plus facile à lire et à debugger pour le développeur.

71 CPU 71 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Prenons un exemple de code en assembleur C6000 de TI. Observons ce même code non optimisé (in-order) et optimisé (out-of order) : Memory program in order Memory program out-of order

72 CPU 72 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Etudions létage dexécution dans le désordre de micro-opérations (out- of order engine) : Létage dallocation et de renommage est chargé dallouer des ressources au flot de uops (registres temporaires renommés). Cette unité travail avec un très large jeu de registres non accessibles au développeur et enfouis dans larchitecture du CPU (registres entiers 160 entry, flottant 144 entry…) Instruction Decoder Queue ~4 uops guarantee/Cy (out-of order) Allocate and Rename Register Allocation Table Large set of rename registers rename registers up to 4 uops/Cy unfused micro-fused macro-fused

73 CPU 73 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Rappelons lexécution et le découpage en micro traitements de linstruction dpps précédemment rencontrée : XMMi (i = 0 à 15 with Intel 64) 128bits General Purpose Registers for SIMD Execution Units XMM XMM Temp Temp Temp Temp4

74 CPU 74 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Létage dallocation et de renommage peut également exécuter puis retirer du pipeline certaines instructions simples ou idiomatiques : nop nop Zero idioms Zero idioms (sub reg,reg, xor reg,reg …) … Instruction Decoder Queue ~4 uops guarantee/Cy (out-of order) Allocate and Rename Register Allocation Table Large set of rename registers rename registers up to 4 uops/Cy unfused micro-fused macro-fused

75 CPU 75 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Létage de retirement peut supporter jusquà 168 uops en vol. Cet étage est chargé de retirer les uops de la file dattente après sêtre assurer du bon résultat suite au passage dans létage dexécution. Lunité de retirement est également chargée de capturer les défauts et exceptions matérielles (stop lexécution des uops à la source des défauts). Instruction Decoder Queue ~4 uops guarantee/Cy (out-of order) Allocate and Rename Register Allocation Table Retirement ReOrder Buffer (ROB) 168 uops entry in-flight Large set of rename registers rename registers up to 4 uops/Cy unfused micro-fused macro-fused

76 CPU 76 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Etudions létage dexécution : Le scheduler ou ordonnanceur charge dans une fille dattente (jusquà 54 uops) les uops prêtes à être exécutées jusquà ce que les opérandes sources soient également prêtes. Le scheduler réparti alors les uops vers les unités dexécution correspondantes (jusquà 6uops/cycle). Instruction Decoder Queue ~4 uops guarantee/Cy (out-of order) Allocate and Rename Register Allocation Table Retirement ReOrder Buffer (ROB) 168 uops entry in-flight Large set of rename registers rename registers up to 4 uops/Cy unfused micro-fused macro-fused Scheduler Scheduler (54 uops entry) port2 port3 port4 port0 port1 port5 up to 6 uops

77 CPU 77 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core superscalaire Létage dexécutions possède une architecture dîtes superscalaire. Exécution de plusieurs instructions sur un même cycle CPU via plusieurs unités dexécutions. Observons les familles de uops supportés par chaque port : Instruction Decoder Queue ~4 uops guarantee/Cy (out-of order) Allocate and Rename Register Allocation Table Retirement ReOrder Buffer (ROB) 168 uops entry in-flight Large set of rename registers rename registers up to 4 uops/Cy unfused micro-fused macro-fused Scheduler Scheduler (54 uops entry) port2 port3 port4 port0 port1 port5 AGU Load Store (address) AGU Store (data) Integer MMXSSE AVX AVX low x87 AVX AVX high Result Bus 128bits up to 6 uops Memory Order Buffer (MOB)

78 CPU 78 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Poursuivons létude de linstruction dpps et de son passage dans le pipeline matériel dune architecture Sandy Bridge :

79 CPU 79 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Les unités dexécutions AGU (Address Generation Unit) sont chargées de calculer des adresses (modes dadressage complexes) puis daller sauver ou chercher des données présentes en mémoire cache donnée. Ce sont les seules unités à posséder un chemin daccès vers la mémoire donnée (jusquà 48o/cycle). Scheduler port2 port3 port4 port0 port1 port5 AGU Load Store (address) AGU Store (data) Integer MMXSSE AVX AVX low x87 AVX AVX high Memory Order Buffer (MOB) Result Bus 128bits L1 Data Cache 32Ko 8ways set associativeDTLB 4Ko page 64 entry 2-4Mo page 32 entry 1Go page 4 entry 128bits

80 CPU 80 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Les instructions et donc uops désirant réaliser un accès à la mémoire donnée amènent naturellement des latences. Les grandeurs données sont optimales et ne tiennent pas compte déventuels cache miss, défauts dalignement, dexceptions matérielles et de lhyperthreading (partage des unités dexécution) :

81 CPU 81 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Sandy Bridge General Purpose Processor Sandy Bridge Core A titre indicatif, observons les empreintes silicium de chacun des étages ou entités précédemment présentées :

82 CPU 82 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Sandy Bridge Core A titre indicatif, observons les empreintes silicium de chacun des étages ou entités précédemment présentées : Sandy Bridge Pipeline

83 CPU 83 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Une avancée technologique mal reconnue à lépoque de sa sortie en 2002 sur Pentium 4 mais néanmoins ré-implémenter depuis 2008 sur les architectures CoreiX et Atom est lHyper-Threading ou HT. Observons le principe de cette technologie nexigeant que 5% de silicium supplémentaire mais pouvant dans certains cas améliorer les performances de 30% : : Thread A : Thread B Superscalar CPU (without HT) Multi Core superscalars CPUs (without HT) Execution Unit instructions use Time Time

84 CPU 84 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Un processeur supportant lhyper-threading peut exécuter jusquà 2 threads et est alors vu comme si il sagissait de 2 CPUs distinct, nous parlons alors de CPU logique. Par exemple, pour un Corei7 famille Sandy Bridge 4 cores, le système dexploitation voit 8 cœurs : : Thread A : Thread B Superscalar CPU (with HT) Execution Unit instructions use Time

85 CPU 85 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Observons les principales évolutions apportées avec la famille Haswell (4ieme génération Core) parue Juin 2013 : Cache : Cache : L1D et L1I 64Ko 8-way associative, L2 1Mo 8-way associative, L3 jusquà 32Mo 16-way associative Extensions jeu dinstructions : Extensions jeu dinstructions : AVX2 et FMA3 (Fused Multiple-Add) extension DSP au jeu dinstructions (Digital Signal Processing) Meilleure gestion dénergie Accélérateur Graphique : Accélérateur Graphique : support DirectX 11.1, OpenGL 4.0 et OpenCL 1.2

86 CPU 86 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Evolutions du pipeline matériel sur famille Haswell :

87 CPU 87 – copyleft Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Front End Out-of Order Engine Out-of Order Engine Execution Core Execution Core Evolutions du pipeline matériel sur famille Haswell :

88 Merci de votre attention !


Télécharger ppt "CENTRAL PROCESSING UNIT Hugo Descoubes - Juin 2013 Architecture et Technologie des Ordinateurs."

Présentations similaires


Annonces Google