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

Présentations similaires


Présentation au sujet: "CENTRAL PROCESSING UNIT"— Transcription de la présentation:

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

2 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Tout CPU effectue séquentiellement les traitements présentés ci-dessous : FETCH : Aller chercher le code binaire d’une instruction en mémoire programme. Beaucoup de CPU récents sont capables d’aller chercher plusieurs instructions durant la phase de fetch. DECODE : décodage du ou des opcodes des instructions précédemment fetchées. EXECUTION : Exécution de ou des instructions précédemment décodées. Cette opération est réalisée par les EU’s (Execution Unit). WRITEBACK : Ecriture du résultat en mémoire ou dans un registre (typiquement dans le CPU ) FETCH DECODE EXECUTE WRITEBACK

3 1 level Hardware Pipeline
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions 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. Program Memory Prenons un exemple et supposons que chaque étape prend un cycle CPU (fetch, decode, execute et writeback). Il faudrait donc 4cy pour exécuter chaque instruction. PC CPU Fetch Decode Execute Writeback PC 1 level Hardware Pipeline

4 4 levels Hardware Pipeline
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions 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. Program Memory PC Program Counter Prenons un exemple et supposons que chaque étape prend un cycle CPU (fetch, decode, execute et writeback). Il faudrait donc 4cy pour la première instruction et 1cy (théoriquement) pour les suivantes. CPU Fetch PC Opcode Manipulation Decode Sources Operands Manipulation Execute Dest. Operand Manipulation Writeback 4 levels Hardware Pipeline

5 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
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 d’accélérer l’architecture (mécanismes d’accélération). A titre d’exemple, les architectures Penryn’s de Intel possèdent un pipeline Hardware de 14 niveaux et Nehalem étages. Pipeline matériel de la famille sandy bridge :

6 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 d’instruction très très réduit associé : Mnemonic Syntax Description Example Binary (bits) ADD ADD regSrc, regSrc, regDst Addition contenu de 2 registres ADD R1, R2, R1 000 r r r uu JMP JMP label Saut en mémoire programme JMP addInst 001 aaaa u LOAD LOAD address, regDst Chargement d’une donnée depuis la mémoire vers le CPU LOAD addData, R2 010 aaa r u MOV MOV regSrc, regDst Copie le contenu d’un registre vers un autre registre MOV R2, R1 011 r r uuu MOVK MOVK constant, regDst Charge une constante dans un registre MOVK cst3bits, R1 100 kkk r u STR STR regSrc, address Sauvegarde une donnée contenu dans un regsitre vers la mémoire STR R1, addData 101 r aaa u Glossary : r=registre a=address u=unused k=constant R1=register R2=register addInst=Program memory address addData=Data memory address

7 Implémentation assembleur du langage C ci-dessous :
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions CPU Implémentation assembleur du langage C ci-dessous : Programme en C Programme assembleur Program Address Mnemonic operands Binary char value=3, saveValue; void main (void) { while (1) { value += 2; saveValue = value; } 0x0 main : LOAD &value, R 0x1 MOVK 2, R 0x2 ADD R1, R2, R 0x3 STR R1, &value 0x4 LOAD &value, R 0x5 STR R2, &saveValue 0x6 JMP main 0x7 undefined uuuuuuuu 0x8 undefined uuuuuuuu … … … 0xF undefined uuuuuuuu Glossary : R1=0 R2=1 &value=0x0 &saveValue=0x1

8 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Etudions l’évolution de notre programme assembleur ainsi que le travail du CPU Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x0 Address Binary Decode stage Data Address Bus 0x 0x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

9 Démarrage application
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions CPU Démarrage application Cycle n°1 : Fetch instruction adresse 0x0, modification PC (Program Counter) Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x1 Address Binary Decode stage Data Address Bus 0x 0x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

10 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°2 : Fetch instruction adresse 0x1, décodage instruction précédemment fetchée, modification PC Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x2 Address Binary Decode stage Data Address Bus 0x 0x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

11 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°3 : Fetch instruction adresse 0x2, modification PC (Program Counter), exécution LOAD Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x3 Address Binary Decode stage Data Address Bus 0x 0x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

12 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°4 : Fetch instruction adresse 0x3, modification PC (Program Counter), exécution MOVK Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x4 Address Binary Decode stage Data Address Bus 0x 0x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

13 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°5 : Fetch instruction adresse 0x4, modification PC (Program Counter), exécution ADD Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x5 Address Binary Decode stage Data Address Bus 0x 0x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

14 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°6 : Fetch instruction adresse 0x5, modification PC (Program Counter), exécution STR Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x6 Address Binary Decode stage Data Address Bus 0x 0x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

15 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°7 : Fetch instruction adresse 0x6, modification PC (Program Counter), exécution LOAD Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x7 Address Binary Decode stage Data Address Bus 0x 0x1 uuuuuuuu 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

16 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°8 : Fetch instruction adresse 0x7, modification PC (Program Counter), exécution STR Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage uuuuuuuu PC = 0x8 Address Binary Decode stage Data Address Bus 0x 0x 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

17 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°9 : Fetch instruction adresse 0x8, modification PC=0x0 (Program Counter), exécution JMP Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage uuuuuuuu PC = 0x0 Address Binary Decode stage uuuuuuuu Data Address Bus 0x 0x 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

18 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°10 : Fetch instruction adresse 0x0, modification PC (Program Counter), aucune instruction exécutée Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x1 Address Binary Decode stage uuuuuuuu Data Address Bus 0x 0x 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit uuuuuuuu 3 Data Memory MUX Data Bus R1 R2 8

19 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°11 : Fetch instruction adresse 0x1, modification PC (Program Counter), aucune instruction exécutée Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x2 Address Binary Decode stage Data Address Bus 0x 0x 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit uuuuuuuu 3 Data Memory MUX Data Bus R1 R2 8

20 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions
Cycle n°12 : Fetch instruction adresse 0x2, modification PC (Program Counter), exécution LOAD Address Binary 0x 0x 0x 0x 0x 0x 0x 0x7 uuuuuuuu 0x8 uuuuuuuu … … Program Memory main : LOAD &value, R2 MOVK 2, R1 ADD R1, R2, R1 STR R1, &value LOAD &value, R2 STR R2, &saveValue JMP main Program Address Bus 4 Instruction Bus 8 CPU Fetch stage PC = 0x3 Address Binary Decode stage Data Address Bus 0x 0x 0x2 uuuuuuuu 0x3 uuuuuuuu 0x4 uuuuuuuu 0x5 uuuuuuuu 0x6 uuuuuuuu 0x7 uuuuuuuu Execution Unit 3 Data Memory MUX Data Bus R1 R2 8

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

22 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Von Neumann
 Harvard  Harvard Modifié CPU Un CPU peut posséder différents modèles d’interconnexion avec les mémoires (program et data). Chaque modèle amène son lot d’avantages et d’inconvénients. Historiquement, l’une 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. Program & Data Memory Unified CPU Instruction Data Bus

23 Observons quelques avantages et inconvénients de cette architecture :
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Von Neumann  Harvard  Harvard Modifié CPU En 2012, certains CPU’s actuels utilisent encore ce type de fonctionnement dans certains cas. Il s’agit d’architectures 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 (data et program) Polyvalent si mémoire unifiée. Applications code large et peu de données et vice versa. Mais, pipeline matériel impossible/difficile (fetch, decode, execute, writeback en parallèle).

24 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Von Neumann
 Harvard  Harvard Modifié CPU En 2012, l’architecture 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. Instruction Bus Data Bus Program Memory Data Memory CPU

25 Observons quelques avantages de ce type d’architecture :
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Von Neumann  Harvard  Harvard Modifié CPU Observons quelques avantages de ce type d’architecture : 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 d’architecture : Mapping mémoires distincts (adresse mémoire donnée différente adresse mémoire programme). Moins flexible pour le développeur. Peu polyvalent. Certaines applications exigent une large empreinte en mémoire donnée (traitement image et son, bases de données…) pour d’autres ce sera le code …

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

27 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Von Neumann
 Harvard  Harvard Modifié CPU En informatique, une mémoire cache est chargée d’enregistrer et de partager temporairement des copies d’informations (données ou code) venant d’une autre source, contrairement à une mémoire tampon qui ne réalise pas de copie. L’utilisation de mémoire cache est un mécanisme d’optimisation 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 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Von Neumann
 Harvard  Harvard Modifié CPU Ce type d’architecture allie les avantages et comble les inconvénients associés aux architectures de Harvard et de Von Neumann via l’utilisation de mémoire cache (mémoire temporaire). Néanmoins, pour un développeur bas niveau adepte de l’optimisation ou du développement de drivers, une manipulation optimale de la mémoire cache exige une grande rigueur de codage. L’un 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 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Découvrons plus en détail le 8086 anciennement proposé par Intel. Rappelons que ce CPU est à la base des architectures x86 : : bus d’adresse de donnée : bus de contrôle : Interruptions : Direct Memory Access

30 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Execution Unit : décode puis exécute les instructions présentes dans la file d’attente 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). Dr J. Y. Haggège

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

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

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

34 Original 8086 Instruction set
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU AAA ASCII adjust AL after addition AAD ASCII adjust AX before division AAM ASCII adjust AX after multiplication AAS ASCII adjust AL after subtraction ADC Add with carry ADD Add AND Logical AND CALL Call procedure CBW Convert byte to word CLC Clear carry flag CLD Clear direction flag CLI Clear interrupt flag CMC Complement carry flag CMP Compare operands CMPSB Compare bytes in memory CMPSW Compare words CWD Convert word to doubleword DAA Decimal adjust AL after addition DAS Decimal adjust AL after subtraction DEC Decrement by 1 DIV Unsigned divide ESC Used with floating-point unit HLT Enter halt state IDIV Signed divide IMUL Signed multiply IN Input from port INC Increment by 1 INT Call to interrupt INTO Call to interrupt if overflow IRET Return from interrupt Jcc Jump if condition JMP Jump LAHF Load flags into AH register LDS Load pointer using DS LEA Load Effective Address LES Load ES with pointer LOCK Assert BUS LOCK# signal LODSB Load string byte LODSW Load string word LOOP/LOOPx Loop control MOV Move MOVSB Move byte from string to string MOVSW Move word from string to string MUL Unsigned multiply Original 8086 Instruction set

35 Original 8086 Instruction set
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU NEG Two's complement negation NOP No operation NOT Negate the operand, logical NOT OR Logical OR OUT Output to port POP Pop data from stack POPF Pop data from flags register PUSH Push data onto stack PUSHF Push flags onto stack RCL Rotate left (with carry) RCR Rotate right (with carry) REPxx Repeat MOVS/STOS/CMPS/LODS/SCAS RET Return from procedure RETN Return from near procedure RETF Return from far procedure ROL Rotate left ROR Rotate right SAHF Store AH into flags SAL Shift Arithmetically left (signed shift left) SAR Shift Arithmetically right (signed shift right) SBB Subtraction with borrow SCASB Compare byte string SCASW Compare word string SHL Shift left (unsigned shift left) SHR Shift right (unsigned shift right) STC Set carry flag STD Set direction flag STI Set interrupt flag STOSB Store byte in string STOSW Store word in string SUB Subtraction TEST Logical compare (AND) WAIT Wait until not busy XCHG Exchange data XLAT Table look-up translation XOR Exclusive OR Original 8086 Instruction set

36 Instructions de management de données
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Nous allons maintenant découvrir quelques-unes des principales instructions supportées par le 8086 (documentation en ligne, Il ne s’agira pas d’une é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 : Instructions de management de données Instructions arithmétiques et logiques Instructions de saut

37 registre (CPU) vers mémoire registre (CPU) vers registre (CPU)
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Comme tout CPU, le 8086 est capable de déplacer des données dans l’architecture du processeur : registre (CPU) vers mémoire registre (CPU) vers registre (CPU) mémoire vers registre (CPU) Un déplacement mémoire vers mémoire en passant par le CPU n’est pas implémenté et aurait peu d’inté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 s’en charger. Si votre processeur en possède.

38 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Commençons par l’instruction MOV. Vous constaterez que cette instruction supporte un grand nombre de modes d’adressages. Ceci est typique d’un CPU CISC. En général, les CPU RISC implémentent moins de modes d’adressage avec des instructions dédiées à chaque mode. Adressage registre : déplacement de données dans le CPU. Registre vers registre. Adressage immédiat : affectation d’une constante dans un registre. Le déplacement d’une constante vers la mémoire est également possible. mov %ax, %bx mov $0x1A2F, %bx

39 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Les modes d’adressage suivants manipulent tous la mémoire. Nous partirons pour le moment d’une 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 : déplacement de données du CPU vers la mémoire ou vice versa. L’adresse de la case mémoire à manipuler est directement passée avec l’opcode de l’instruction. 1o 64Ko 0xFFFF mov (0x000F), %bl Data Memory 0x000F 0x0000

40 Adressage indexé : non vu en cours. Registres d’index SI et DI.
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Adressage indirect : déplacement de données du CPU vers la mémoire ou vice versa. L’adresse de la case mémoire à manipuler est passée indirectement par un registre. Adressage indexé : non vu en cours. Registres d’index SI et DI. Suffixes d’instruction : permet de fixer le nombre d’octets à récupérer ou sauver en mémoire (uniquement en syntax AT&T). 1o 64Ko 0xFFFF mov $0x000F, %bx mov (%bx), %al Data Memory 0x000F 0x0000 movb %bl, %al ;déplacement 1o movw %bx, %ax ;déplacement 2o movl %ebx, %eax ;déplacement 4o ;(non supporté sur 8086)

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

42 Instructions logique : manipulation bit à bit de données :
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Instructions arithmétique : attention, les modes d’adressage supportés diffèrent d’une instruction à une autre. Etudions quelques instructions arithmétique en mode d’adressage registre : Instructions logique : manipulation bit à bit de données : movb $14,%al ; al=0x0E (4cy) movb $2,%bl ; bl=0x02 (4cy) add %bl,%al ; al=0x10 (3cy) mul %bl ; ax=0x0020 (70-77cy) div %bl ; al=0x10 (quotient) ; bl=0x00 (reste) ; (80-90cy) sub %bl,%al ; al=0x10 (3cy) movb $15,%al ; al=0x0F (4cy) movb $0x01,%bl ; bl=0x01 (4cy) and $0xFE,%al ; al=0x0E (4cy) or %bl,%al ; al=0x0F (3cy) not %al ; al=0xF0 (3cy) ; Complément à 1 shl $1,%al ; al=0xE0 (2cy) ; flag carry C=1

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

44 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU Prenons un exemple de programme C et étudions une implémentation assembleur possible. La solution n’est bien sûr pas unique : unsigned char varTest = 0; void main (void) { while (1) { if ( varTest == 0 ) { // user code if } else { // user code else main: mov (addressVarTest),%al ; al=0x00 (+8cy) mov 0,%bl ; bl=0x00 (4cy) cmp %bl,%al ; (3cy), flag Z=1 jz if1 ; IP = addresse if1 ; (16cy jump, 4cy no jump) else1: ; user code else ;… jmp endif1 ; IP = addresse endif1 (15cy) if1: ; user code if endif1: jmp main ; IP = addresse main (15cy)

45 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle  jeu d’instruction CPU 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). void fctTest (void); void main (void) { while (1) { fctTest(); } void fctTest (void) { // user code main: call fctTest ; IP = adresse fctTest (19cy relatif) jmp main ; IP = adresse main (15cy) ;other code ;… fctTest: ; user code ret ; IP = adresse jmp dans le main ; (16-20cy)

46 Principales évolutions
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU Observons les principales évolutions des architectures x86-64 du 8086 jusqu’à l’architecture Sandy Bridge : CPU Architecture Année Espace d’adressage Linéaire/physique Principales évolutions 8086 1978 16bits (logical)/20bits (phys.) Jeu d’instruction x86 original, segmentation mémoire 80186 1982 Accélération matérielle (calcul d’adresses, multiplication ,division …) 80286 16bits (logical)/30bits (linear)/24bits (phys.) MMU (Memory Managment Unit) avec segmented mode, tables GDT (Global et Local Descriptor Table) et LDT, modes protégés avec privilèges 80386 1985 32bits (logical)/46bits (linear)/32bits (phys.) Jeu d’instruction 32bits (IA-32), MMU avec unité de Pagination 80486 1989 Pipeline RISC-like, mémoire cache intégrée et FPU (Floating Point Unit) Pentium 1993 Processeur superscalaire (exécution plusieurs instructions par cycle CPU via plusieurs unités d’exécution), extension MMX Pentium pro (P6) 1995 32bits (logical)/46bits (linear)/36bits (phys.) via PAE Cache L2 intégré, PAE 4bits (Physical Address Extension), translation micro-instructions (uop), exécution out-of order, exécution spéculative (register renaming) Pentium II Pentium III 1997 Cache L3 intégré, extension SSE (instructions SIMD) Extension SSE2 , Hyper-Threading, pipeline profond, uop cache (Trace Cache) Pentium 4 2000

47 Principales évolutions
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU Observons les principales évolutions des architectures x86-64 du 8086 jusqu’à l’architecture Sandy Bridge : CPU Architecture Année Espace d’adressage Linéaire/physique Principales évolutions Pentium 4 Prescott 2004 Cf. CPUID Jeu d’instruction x64 (Intel 64), extension SSE3 Core 2 2006 Multi-cœurs, extension SSE4 (Penryn), faible consommation Atom 2008 Sur ma machine Intel 64 famille Sandy Bridge sous Linux 48bits (linear-virtual)/36bits (phys.) Très faible consommation, exécution in-order (marchés laptop et mobile) Corei7 Nehalem 3 niveaux de cache intégrés, bus QPI (remplaçant FSB vers chipet), extension pour cryptage AES Sandy Bridge Ivy Bridge 2011 Extension SSE5 et AVX, GPU, advanced uop cache

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

49 General Purpose Registers (i = A, B, C, D)
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU En même temps que les architectures des CPU’s é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) 64bits 32 16 8 RiX EiX iX iH iL Depuis Intel 64 architecture (64bits mode-only) Depuis architecture (E = Extended) Depuis 8086 architecture General Purpose Registers for Floating Point Unit : x87 and MMX extensions (i = 0 to 7) 80bits 64bits STi MMXi Depuis architecture (x87 extension) Depuis Pentium MMX architecture

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

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

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

53 Instruction Pointer Register
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU Instruction Pointer Register 64bits 32 16 8 RIP EIP IP Depuis 8086 architecture D’autres 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 …

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

55 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers
 Front End  Out-of Order Engine  Execution Core CPU Analysons maintenant les principaux mécanismes d’accélération matérielle apportés sur architecture Sandy Bridge de Intel. Une bonne partie de ces mécanismes d’optimisation n’ont pas forcément à être connus des développeurs, même pour un développeur bas niveaux. Contrairement à d’autres architectures (par exemple, CPU DSP C6xxx de TI), les CPU’s compatibles x86-64 exécutent un flot d’instruction présent in-order (dans l’ordre) en mémoire et appliquent des mécanismes d’accélération matérielle d’exé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 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers
 Front End  Out-of Order Engine  Execution Core CPU Vu d’ensemble du pipeline matériel de la microarchitecture Sandy Bridge de Intel : Front End Out-of Order Engine Execution Core Cache Hierarchy

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

58 Legacy Decode Pipeline (Nehalem)
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU L’unité de prédiction aux branchements est chargée d’anticiper 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). L1 ICache 32Ko 8ways set associative ITLB 4Ko page 128 entry 2-4Mo page 8 entry Branch Prediction Unit Legacy Decode Pipeline (Nehalem)

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

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

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

62 Instruction PreDecoder Legacy Decode Pipeline (Nehalem)
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU L’unité de décodage d’instruction 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 l’extension SSE2 avec le Pentium4, chaque instruction sur 128bits était découpée en 2 uops de 64bits. L1 ICache 32Ko 8ways set associative ITLB 4Ko page 128 entry 2-4Mo page 8 entry Instruction Fetch Unit Branch Prediction Unit 16o aligned/Cy 128bits Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) Instruction Queue 18++ Instructions (macro-fusion) Legacy Decode Pipeline (Nehalem) 1 Inst. 1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy Instruction Decoder Simple Decode Simple Decode Simple Decode Complex Decode 1uop 1uop 1uop 4uops

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

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

65 Instruction PreDecoder Legacy Decode Pipeline (Nehalem)
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU 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 l’unité de prédiction dès qu’une prédiction manquée est détectée (miss-prediction). L1 ICache 32Ko 8ways set associative ITLB 4Ko page 128 entry 2-4Mo page 8 entry Instruction Fetch Unit Branch Prediction Unit 16o aligned/Cy 128bits Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) Instruction Queue 18++ Instructions (macro-fusion) Legacy Decode Pipeline (Nehalem) 1 Inst. 1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy Instruction Decoder MSROM Microcode Sequencer Simple Decode Simple Decode Simple Decode Complex Decode 1uop 1uop 1uop 4uops 4uops/Cy Instruction Decoder Queue (micro-fusion) Loop Stream Detector up to 28uops ~4uops guarantee

66 uop + uop = micro-fused complex uop
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU 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 L1 ICache 32Ko 8ways set associative ITLB 4Ko page 128 entry 2-4Mo page 8 entry Instruction Fetch Unit Branch Prediction Unit 16o aligned/Cy 128bits Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) Instruction Queue 18++ Instructions (macro-fusion) Legacy Decode Pipeline (Nehalem) 1 Inst. 1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy Instruction Decoder MSROM Microcode Sequencer Simple Decode Simple Decode Simple Decode Complex Decode 1uop 1uop 1uop 4uops 4uops/Cy Instruction Decoder Queue (micro-fusion) Loop Stream Detector up to 28uops ~4uops guarantee

67 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers
 Front End  Out-of Order Engine  Execution Core CPU Observons l’instruction 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 d’exécution out-of order du CPU : Instruction Operands uops fused unfused uops Latency Reciprocal Throughput Comments p0 p1 p5 p23 p4 dpps xmm, xmm, imm8 4 SSE4.1 xmm, m128, imm8 6

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

69 Instruction PreDecoder Decoded ICache (Sandy Bridge)
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU 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 d’instruction. Cette mémoire cache est enfouie dans l’architecture du cœur. Il s’agit d’une technologie proche du Trace Cache du Pentium 4. Il faut savoir que sur un flow typique d’instructions, ~80% des uops sont issues de ce cache, ~15% du pipeline hérité et ~5% du MSROM. L1 ICache 32Ko 8ways set associative ITLB 4Ko page 128 entry 2-4Mo page 8 entry Instruction Fetch Unit Branch Prediction Unit 16o aligned/Cy 128bits advertised Instruction PreDecoder 16o up to 6 inst./Cy (typical ~4inst.) Decoded Icache 1,5K uops 8ways set Direct Mapped 32sets 8ways/set up to 6uops/way Instruction Queue 18++ Instructions (macro-fusion) Decoded ICache (Sandy Bridge) 1 Inst. 1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy Instruction Decoder MSROM Microcode Sequencer Simple Decode Simple Decode Simple Decode Complex Decode 1uop 1uop 1uop 4uops 4uops/Cy 4uops/Cy Instruction Decoder Queue (micro-fusion) Loop Stream Detector up to 28uops uops cache build ~4uops guarantee

70 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers
 Front End  Out-of Order Engine  Execution Core CPU Il existe plusieurs familles d’architectures capables d’exécuter un flot d’instructions 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 d’accélération dans le CPU au niveau de l’étage d’exécution (après décodage). D’autres architectures comme les CPU DSP C6000 de Texas Instruments effectuent ces mécanismes à la compilation. L’avantages étant d’avoir 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 Memory program in order Memory program out-of order
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU 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 ; void function ( 16, 1 ); ;function call 10cy MOVKL 16, A4 ;delayslot 0cy, parameter n°1 MOVKL 1, B4 ;delayslot 0cy, parameter n°2 MOVKL retAdd, B3 ;delayslot 0cy, save return address MOVKH retAdd, B3 ;delayslot 0cy, save return address B function ;delayslot 5cy, call function NOP 5 ; jump to function and return here after! ; void function ( 16, 1 ); ;function call 6cy B function ;delayslot 5cy, call function MOVKL 16, A4 ;delayslot 0cy, parameter n°1 MOVKL 1, B4 ;delayslot 0cy, parameter n°2 MOVKL retAdd, B3 ;delayslot 0cy, save return address MOVKH retAdd, B3 ;delayslot 0cy, save return address NOP 1 ; jump to function and return here after!

72 Instruction Decoder Queue
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU Etudions l’étage d’exécution dans le désordre de micro-opérations (out-of order engine) : L’étage d’allocation et de renommage est chargé d’allouer 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 l’architecture 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 up to 4 uops/Cy unfused micro-fused macro-fused

73 128bits General Purpose Registers for SIMD Execution Units
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU Rappelons l’exécution et le découpage en micro traitements de l’instruction dpps précédemment rencontrée : XMMi (i = 0 à 15 with Intel 64) 128bits General Purpose Registers for SIMD Execution Units dpps 0xF1, %xmm2,%xmm1 128 96 64 32 XMM1 a3 a2 a1 a0 128 96 64 32 XMM2 x3 x2 x1 x0 128 96 64 32 Temp1 a3.x3 a2.x2 a1.x1 a0.x0 32 Temp2 a0.x0 + a1.x1 32 Temp3 a2.x2 + a3.x4 32 a0.x0 + a1.x1 + a2.x2 + a3.x4 Temp4

74 Instruction Decoder Queue
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU L’étage d’allocation et de renommage peut également exécuter puis retirer du pipeline certaines instructions simples ou idiomatiques : nop 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 up to 4 uops/Cy unfused micro-fused macro-fused

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

76 Instruction Decoder Queue
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU Etudions l’étage d’exécution : Le scheduler ou ordonnanceur charge dans une fille d’attente (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 d’exécution correspondantes (jusqu’à 6uops/cycle). Instruction Decoder Queue ~4 uops guarantee/Cy (out-of order) Allocate and Rename Register Allocation Table Large set of rename registers up to 4 uops/Cy unfused micro-fused macro-fused Retirement ReOrder Buffer (ROB) 168 uops entry in-flight Scheduler (54 uops entry) port2 port port port0 port1 port5 up to 6 uops

77 Instruction Decoder Queue Memory Order Buffer (MOB)
Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers  Front End  Out-of Order Engine  Execution Core CPU L’étage d’exécutions possède une architecture dîtes superscalaire. Exécution de plusieurs instructions sur un même cycle CPU via plusieurs unités d’exé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 Large set of rename registers up to 4 uops/Cy unfused micro-fused macro-fused Retirement ReOrder Buffer (ROB) 168 uops entry in-flight Scheduler (54 uops entry) port2 port port port0 port1 port5 up to 6 uops 4 AGU Load Store (address) AGU Store (data) Integer MMX SSE AVX low x87 AVX high 128bits 128bits 128bits Result Bus Memory Order Buffer (MOB)

78 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers
 Front End  Out-of Order Engine  Execution Core CPU Poursuivons l’étude de l’instruction dpps et de son passage dans le pipeline matériel d’une architecture Sandy Bridge : Instruction Operands uops fused unfused uops Latency Reciprocal Throughput Comments p0 p1 p5 p23 p4 dpps xmm, xmm, imm8 4 1 2 - 12 SSE4.1 xmm, m128, imm8 6

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

80 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers
 Front End  Out-of Order Engine  Execution Core CPU 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 d’alignement, d’exceptions matérielles et de l’hyperthreading (partage des unités d’exécution) : Instruction Operands uops fused unfused uops Latency Reciprocal Throughput Comments p0 p1 p5 p23 p4 dpps xmm, xmm, imm8 4 1 2 - 12 SSE4.1 xmm, m128, imm8 6 5

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

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

83 Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Registers
 Front End  Out-of Order Engine  Execution Core CPU 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 l’Hyper-Threading ou HT. Observons le principe de cette technologie n’exigeant que 5% de silicium supplémentaire mais pouvant dans certains cas améliorer les performances de 30% : Superscalar CPU (without HT) Multi Core superscalar’s CPU’s (without HT) Execution Unit instructions use Execution Unit instructions use : Thread A Time Time : Thread B

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

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

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

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

88 Merci de votre attention !


Télécharger ppt "CENTRAL PROCESSING UNIT"

Présentations similaires


Annonces Google