CENTRAL PROCESSING UNIT

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

description

CENTRAL PROCESSING UNIT. Architecture et Technologie des Ordinateurs. Hugo Descoubes - Juin 2013. Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions . CPU. Tout CPU effectue séquentiellement les traitements présentés ci-dessous :. - PowerPoint PPT Presentation

Transcript of CENTRAL PROCESSING UNIT

Page 1: CENTRAL PROCESSING UNIT

CENTRAL PROCESSING UNIT

Hugo Descoubes - Juin 2013

Architecture et Technologie des Ordinateurs

Page 2: CENTRAL PROCESSING UNIT

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

• 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 )

DECODE

EXECUTE

WRITEBACK

Page 3: CENTRAL PROCESSING UNIT

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

FetchDecodeExecute

Writeback

Program Memory

11000010011100111100011011101000011000111000101…

CPU

PC

1 level Hardware Pipeline

0000110 111 011 111

PC

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

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.

Page 4: CENTRAL PROCESSING UNIT

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

Program Memory

11000010011100110001110001110001100001110001011…

1100001001110001

Decode 0011000111000101

CPU

Execute 1110001 101 110 100

Writeback 0000110 111 011 111

PC

PC Program Counter

4 levels Hardware Pipeline

OpcodeManipulation

Sources OperandsManipulation

Dest. OperandManipulation

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

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.

Page 5: CENTRAL PROCESSING UNIT

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 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 20-24 étages. Pipeline matériel de la famille sandy bridge :

5 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

http://www.intel.com

Page 6: CENTRAL PROCESSING UNIT

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 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

Page 7: CENTRAL PROCESSING UNIT

CPU

7 – copyleft

Implémentation assembleur du langage C ci-dessous :

char value=3, saveValue;

void main (void) {while (1) { value += 2; saveValue =

value;}

}

Programme en C

0x0 main : LOAD &value, R2 010000100x1 MOVK 2, R1 100010000x2 ADD R1, R2, R1 000010000x3 STR R1, &value 101000000x4 LOAD &value, R2 010000100x5 STR R2, &saveValue 101100100x6 JMP main 001000000x7 undefineduuuuuuuu0x8 undefineduuuuuuuu… … …0xF undefineduuuuuuuu

Programme assembleurProgram Address Mnemonic operands Binary

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Glossary : R1=0R2=1

&value=0x0

&saveValue=0x1

Page 8: CENTRAL PROCESSING UNIT

CPU

8 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000000110x1 uuuuuuuu0x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

PC = 0x0

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2

Etudions l’évolution de notre programme assembleur ainsi que le travail du CPU

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 9: CENTRAL PROCESSING UNIT

CPU

9 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x1

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2

• Démarrage application

• Cycle n°1 : Fetch instruction adresse 0x0, modification PC (Program Counter)

01000010

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000000110x1 uuuuuuuu0x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 10: CENTRAL PROCESSING UNIT

CPU

10 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x2

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2

• Cycle n°2 : Fetch instruction adresse 0x1, décodage instruction précédemment fetchée, modification PC

10001000

01000010

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000000110x1 uuuuuuuu0x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 11: CENTRAL PROCESSING UNIT

CPU

11 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x3

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2

• Cycle n°3 : Fetch instruction adresse 0x2, modification PC (Program Counter), exécution LOAD

10001000

01000010

00001000

00000011

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000000110x1 uuuuuuuu0x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 12: CENTRAL PROCESSING UNIT

CPU

12 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x4

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2

10001000

00001000

0000001100000010

10100000

• Cycle n°4 : Fetch instruction adresse 0x3, modification PC (Program Counter), exécution MOVK

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000000110x1 uuuuuuuu0x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 13: CENTRAL PROCESSING UNIT

CPU

13 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x5

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2

00001000

0000001100000101

10100000

• Cycle n°5 : Fetch instruction adresse 0x4, modification PC (Program Counter), exécution ADD

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000000110x1 uuuuuuuu0x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

01000010

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 14: CENTRAL PROCESSING UNIT

CPU

14 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x6

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2 0000001100000101

10100000

• Cycle n°6 : Fetch instruction adresse 0x5, modification PC (Program Counter), exécution STR

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000001010x1 uuuuuuuu0x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

01000010

10110010

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 15: CENTRAL PROCESSING UNIT

CPU

15 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x7

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2 0000010100000101

• Cycle n°7 : Fetch instruction adresse 0x6, modification PC (Program Counter), exécution LOAD

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000001010x1 uuuuuuuu0x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

01000010

10110010

00100000

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 16: CENTRAL PROCESSING UNIT

CPU

16 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x8

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2 0000010100000101

• Cycle n°8 : Fetch instruction adresse 0x7, modification PC (Program Counter), exécution STR

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000001010x1 000001010x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

10110010

00100000

uuuuuuuu

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 17: CENTRAL PROCESSING UNIT

CPU

17 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x0

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2 0000010100000101

• Cycle n°9 : Fetch instruction adresse 0x8, modification PC=0x0 (Program Counter), exécution JMP

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000001010x1 000001010x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

00100000

uuuuuuuu

uuuuuuuu

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 18: CENTRAL PROCESSING UNIT

CPU

18 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x1

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2 0000010100000101

• Cycle n°10 : Fetch instruction adresse 0x0, modification PC (Program Counter), aucune instruction exécutée

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000001010x1 000001010x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

uuuuuuuu

01000010

uuuuuuuu

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 19: CENTRAL PROCESSING UNIT

CPU

19 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x2

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2 0000010100000101

• Cycle n°11 : Fetch instruction adresse 0x1, modification PC (Program Counter), aucune instruction exécutée

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000001010x1 000001010x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

01000010

10001000

uuuuuuuu

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 20: CENTRAL PROCESSING UNIT

CPU

20 – copyleft

Fetch stage

Instruction Bus

Decode stage

Execution Unit

PC = 0x3

8 4ProgramAddress Bus

MUX

3

DataAddressBus

8DataBus

CPU

Address Binary

Address Binary

R1 R2 0000010100000101

• Cycle n°12 : Fetch instruction adresse 0x2, modification PC (Program Counter), exécution LOAD

main : LOAD &value, R2MOVK 2, R1ADD R1, R2, R1STR R1, &valueLOAD &value, R2STR R2, &saveValueJMP main

0x0 010000100x1 100010000x2 000010000x3 101000000x4 010000100x5 101100100x6 001000000x7 uuuuuuuu0x8 uuuuuuuu… …

0x0 000001010x1 000001010x2 uuuuuuuu0x3 uuuuuuuu0x4 uuuuuuuu0x5 uuuuuuuu0x6 uuuuuuuu0x7 uuuuuuuu

Prog

ram

Mem

ory

Data

Mem

ory

01000010

10001000

00001000

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 21: CENTRAL PROCESSING UNIT

CPU

21 – copyleft

Etc …

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions

Page 22: CENTRAL PROCESSING UNIT

CPU

22 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Modifié

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.

Instruction DataBus

Program&

DataMemory

Unified

CPU

Page 23: CENTRAL PROCESSING UNIT

CPU

23 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Modifié

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).

Page 24: CENTRAL PROCESSING UNIT

CPU

24 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Modifié

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.

DataBus

Instruction Bus

CPUProgramMemory

DataMemory

Page 25: CENTRAL PROCESSING UNIT

CPU

25 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Modifié

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 …

Page 26: CENTRAL PROCESSING UNIT

CPU

26 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Modifié

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

Data Bus

Instruction Bus

L1DController

CPU

L1PController

CacheL2

Unified

L2Controller

Main Memory

Unifiedor

L3 CacheUnified(shared)

Von Neumann

Cache L1DSeparated

Cache L1PSeparated

Page 27: CENTRAL PROCESSING UNIT

CPU

27 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Modifié

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 :

Page 28: CENTRAL PROCESSING UNIT

CPU

28 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Von Neumann Harvard Harvard Modifié

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.

Page 29: CENTRAL PROCESSING UNIT

CPU

29 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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

Page 30: CENTRAL PROCESSING UNIT

CPU

30 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

Dr J. Y. Haggège

• 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).

Page 31: CENTRAL PROCESSING UNIT

CPU

31 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

Dr J. Y. Haggège

• 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.

Page 32: CENTRAL PROCESSING UNIT

CPU

32 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

Dr J. Y. Haggège

• 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.

Page 33: CENTRAL PROCESSING UNIT

CPU

33 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

Dr J. Y. Haggège

• 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) …

Page 34: CENTRAL PROCESSING UNIT

CPU

34 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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

Orig

inal

808

6 In

stru

ction

set

Page 35: CENTRAL PROCESSING UNIT

CPU

35 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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

Orig

inal

808

6 In

stru

ction

set

Page 36: CENTRAL PROCESSING UNIT

CPU

36 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

Nous allons maintenant découvrir quelques-unes des principales instructions supportées par le 8086 (documentation en ligne, http://zsmith.co/intel.html). 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

Page 37: CENTRAL PROCESSING UNIT

CPU

37 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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.

Page 38: CENTRAL PROCESSING UNIT

CPU

38 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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

Page 39: CENTRAL PROCESSING UNIT

CPU

39 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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.

mov (0x000F), %bl

64Ko

0

0xFFFF

0x0000

1o

0x000F

Data

Mem

ory

Page 40: CENTRAL PROCESSING UNIT

CPU

40 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

• 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).

mov $0x000F, %bxmov (%bx), %al

64Ko

0

0xFFFF

0x0000

1o

0x000F

Data

Mem

ory

movb %bl, %al ;déplacement 1omovw %bx, %ax ;déplacement 2omovl %ebx, %eax ;déplacement 4o

;(non supporté sur 8086)

Page 41: CENTRAL PROCESSING UNIT

CPU

41 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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.

Page 42: CENTRAL PROCESSING UNIT

CPU

42 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

• 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

Page 43: CENTRAL PROCESSING UNIT

CPU

43 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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

Page 44: CENTRAL PROCESSING UNIT

CPU

44 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

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=1jz 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)

Page 45: CENTRAL PROCESSING UNIT

CPU

45 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Architecture matérielle jeu d’instruction

• 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)

Page 46: CENTRAL PROCESSING UNIT

CPU

46 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Observons les principales évolutions des architectures x86-64 du 8086 jusqu’à l’architecture Sandy Bridge :

CPUArchitecture

Année Espace d’adressageLinéaire/physique

Principales évolutions

8086 197816bits (logical)/20bits (phys.)

Jeu d’instruction x86 original, segmentation mémoire

801861982

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 IIPentium III

1997 Cache L3 intégré, extension SSE (instructions SIMD)

Extension SSE2 , Hyper-Threading, pipeline profond, uop cache (Trace Cache)Pentium 4 2000

Page 47: CENTRAL PROCESSING UNIT

CPU

47 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Observons les principales évolutions des architectures x86-64 du 8086 jusqu’à l’architecture Sandy Bridge :

CPUArchitecture

Année Espace d’adressageLinéaire/physique

Principales évolutions

Pentium 4Prescott

2004Cf. CPUID

Jeu d’instruction x64 (Intel 64), extension SSE3

Core 2 2006 Multi-cœurs, extension SSE4 (Penryn), faible consommation

Atom 2008 Cf. CPUIDSur 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)

Corei7Nehalem

2008 3 niveaux de cache intégrés, bus QPI (remplaçant FSB vers chipet), extension pour cryptage AES

Sandy BridgeIvy Bridge

2011 Extension SSE5 et AVX, GPU, advanced uop cache

Page 48: CENTRAL PROCESSING UNIT

CPU

48 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Rappelons les registres rencontrés sur architecture 8086 de Intel :

Dr J. Y. Haggège

Page 49: CENTRAL PROCESSING UNIT

CPU

49 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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) :

64bits 32 16 8RiX

EiXiX

iH iL

General Purpose Registers (i = A, B, C, D)

Depuis 8086 architecture

Depuis 80386 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 80486 architecture (x87 extension)

80bits 64bits

STi

MMXi Depuis Pentium MMX architecture

Page 50: CENTRAL PROCESSING UNIT

CPU

50 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

256bits 128bitsYMMi

XMMi

General Purpose Registers for SIMD Execution Units (SSE extensions) (i = 0 à 7 with Pentium III SSE )

(i = 0 à 15 with Intel 64)

Depuis Pentium III architecture (SSE extension)

Depuis Sandy Bridge architecture (AVX extension)

64bits 32 16 8

Ri

RiD

RiX

RiB

64bits mode-only General Purpose Registers (i = 8 to 15)

Depuis Intel 64 architecture (64bits mode-only)

Page 51: CENTRAL PROCESSING UNIT

CPU

51 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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 :

Page 52: CENTRAL PROCESSING UNIT

CPU

52 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

64bits 32 16 8RiP

EiPiP

iPL

Pointer Registers (i = S and B)

Registres pour la manipulation de pointeurs (SP, BP, SI, DI et xS) :

16bits

iS

Segment Registers (i = C, D, S, E, F and G)

(64bits mode-only)

64bits 32 16 8

RiI

EiI

iI

iIL

Index Registers (i = S and D)

(64bits mode-only)

Depuis 8086 architecture

Depuis 8086 architecture

Page 53: CENTRAL PROCESSING UNIT

CPU

53 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

64bits 32 16 8RIP

EIPIP

Instruction Pointer Register

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 …

Depuis 8086 architecture

Page 54: CENTRAL PROCESSING UNIT

CPU

54 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Environnements d’exécution en modes 32bits et 64bits :

http://www.intel.com

Page 55: CENTRAL PROCESSING UNIT

CPU

55 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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.

Page 56: CENTRAL PROCESSING UNIT

CPU

56 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Vu d’ensemble du pipeline matériel de la microarchitecture Sandy Bridge de Intel :

http://www.intel.com

Front End

Out-of Order Engine

Execution Core

Cache Hierarchy

Page 57: CENTRAL PROCESSING UNIT

CPU

57 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB 4Ko page 128 entry2-4Mo page 8 entry

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).

Page 58: CENTRAL PROCESSING UNIT

CPU

58 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

Branch PredictionUnit

• 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).

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Page 59: CENTRAL PROCESSING UNIT

CPU

59 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• 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).

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

Page 60: CENTRAL PROCESSING UNIT

CPU

60 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• 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.

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

1 Inst.

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy

Inst. bubble Inst. Inst. Inst. bubble

Inst. bubble Inst. Inst. Inst. Inst.

Inst. Inst. bubble bubble bubble bubble

Inst

ructi

on Q

ueue

Page 61: CENTRAL PROCESSING UNIT

CPU

61 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• 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

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

1 Inst.

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy

Inst. bubble Inst. Inst. Inst. bubble

Inst. bubble Inst. Inst. Inst. Inst.

Inst. Inst. bubble bubble bubble bubble

Macro-fusedIn

stru

ction

Que

ue

Page 62: CENTRAL PROCESSING UNIT

CPU

62 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• 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.

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

1 Inst.

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy

Instruction DecoderComplexDecode

SimpleDecode

SimpleDecode

SimpleDecode

1uop 1uop 1uop 4uops

Page 63: CENTRAL PROCESSING UNIT

CPU

63 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• 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.

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

1 Inst.

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy

Instruction DecoderComplexDecode

SimpleDecode

SimpleDecode

SimpleDecode

1uop 1uop 1uop 4uops

MSROMMicrocodeSequencer

4uops/Cy

Page 64: CENTRAL PROCESSING UNIT

CPU

64 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• 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.

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

1 Inst.

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy

Instruction DecoderComplexDecode

SimpleDecode

SimpleDecode

SimpleDecode

1uop 1uop 1uop 4uops

MSROMMicrocodeSequencer

4uops/Cy

~4uops guarantee

Instruction Decoder Queue

(micro-fusion)

Page 65: CENTRAL PROCESSING UNIT

CPU

65 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• 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).

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

1 Inst.

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy

Instruction DecoderComplexDecode

SimpleDecode

SimpleDecode

SimpleDecode

1uop 1uop 1uop 4uops

MSROMMicrocodeSequencer

4uops/Cy

~4uops guarantee

Instruction Decoder Queue

(micro-fusion)

Loop Stream Detector up to 28uops

Page 66: CENTRAL PROCESSING UNIT

CPU

66 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• 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

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

1 Inst.

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy

Instruction DecoderComplexDecode

SimpleDecode

SimpleDecode

SimpleDecode

1uop 1uop 1uop 4uops

MSROMMicrocodeSequencer

4uops/Cy

~4uops guarantee

Instruction Decoder Queue

(micro-fusion)

Loop Stream Detector up to 28uops

Page 67: CENTRAL PROCESSING UNIT

CPU

67 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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 uopsfused

unfused uops Latency ReciprocalThroughput

Comments

p0 p1 p5 p23 p4

dppsxmm, xmm, imm8 4

SSE4.1xmm, m128, imm8 6

Page 68: CENTRAL PROCESSING UNIT

CPU

68 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

L1 ICache32Ko

8ways set associative

ITLB4Ko page 128 entry2-4Mo page 8 entry

16o aligned/Cy128bits

InstructionFetch Unit

Branch PredictionUnit

• Le Decoded Icache est l’une des évolutions majeure amenée avec l’arrivée de la micro-architecture Sandy Bridge.

Lega

cy D

ecod

e Pi

pelin

e (N

ehal

em)

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

1 Inst.

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. 1 Inst. 1 Inst. up to 4 Inst./Cy

Instruction DecoderComplexDecode

SimpleDecode

SimpleDecode

SimpleDecode

1uop 1uop 1uop 4uops

MSROMMicrocodeSequencer

4uops/Cy

~4uops guaranteeOut-of Order

Instruction Decoder Queue

(micro-fusion)

Loop Stream Detector up to 28uops

Decoded Icache1,5K uops

8ways set Direct Mapped

32sets8ways/set

up to 6uops/way

Deco

ded

ICac

he (S

andy

Brid

ge)

4uops/Cy

uops cache build

advertised

Page 69: CENTRAL PROCESSING UNIT

CPU

69 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

ITLB4Ko page 128 entry2-4Mo page 8 entry

InstructionFetch Unit

Branch PredictionUnit

• 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.

Instruction PreDecoder16o

up to 6 inst./Cy (typical ~4inst.)

Instruction Queue18++ Instructions (macro-fusion)

1 Inst. up to 4 Inst./Cy

Instruction DecoderComplexDecode

4uops

MSROMMicrocodeSequencer

4uops/Cy

~4uops guarantee

Instruction Decoder Queue

(micro-fusion)

Decoded Icache1,5K uops

8ways set Direct Mapped

32sets8ways/set

up to 6uops/way

Deco

ded

ICac

he (S

andy

Brid

ge)

4uops/Cy

uops cache build

advertised

Page 70: CENTRAL PROCESSING UNIT

CPU

70 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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.

Page 71: CENTRAL PROCESSING UNIT

CPU

71 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine 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) :

; void function ( 16, 1 ); ;function call 10cyMOVKL 16, A4 ;delayslot 0cy, parameter n°1MOVKL 1, B4 ;delayslot 0cy, parameter n°2MOVKL retAdd, B3 ;delayslot 0cy, save return addressMOVKH retAdd, B3 ;delayslot 0cy, save return addressB function ;delayslot 5cy, call functionNOP 5; jump to function and return here after!

Memory program in order

; void function ( 16, 1 ); ;function call 6cyB function ;delayslot 5cy, call functionMOVKL 16, A4 ;delayslot 0cy, parameter n°1MOVKL 1, B4 ;delayslot 0cy, parameter n°2MOVKL retAdd, B3 ;delayslot 0cy, save return addressMOVKH retAdd, B3 ;delayslot 0cy, save return addressNOP 1; jump to function and return here after!

Memory program out-of order

Page 72: CENTRAL PROCESSING UNIT

CPU

72 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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

Page 73: CENTRAL PROCESSING UNIT

CPU

73 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Rappelons l’exécution et le découpage en micro traitements de l’instruction dpps précédemment rencontrée :

a3 a2 a1 a0

XMMi (i = 0 à 15 with Intel 64)128bits General Purpose Registers

for SIMD Execution Units0326496128

XMM1

x3 x2 x1 x00326496128

XMM2

dpps 0xF1, %xmm2,%xmm1

0326496128

Temp1 a0.x0a1.x1a2.x2a3.x3

032

Temp2 a0.x0 + a1.x1

032

Temp3 a2.x2 + a3.x4

032

Temp4a0.x0 + a1.x1

+a2.x2 + a3.x4

Page 74: CENTRAL PROCESSING UNIT

CPU

74 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

• 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

Page 75: CENTRAL PROCESSING UNIT

CPU

75 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

• 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

RetirementReOrder Buffer (ROB)168 uops entry in-flight

Large set of rename registers

up to 4 uops/Cy • unfused• micro-fused• macro-fused

Page 76: CENTRAL PROCESSING UNIT

CPU

76 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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

RetirementReOrder Buffer (ROB)168 uops entry in-flight

Large set of rename registers

up to 4 uops/Cy • unfused• micro-fused• macro-fused

Scheduler (54 uops entry)port2 port3 port4 port0 port1 port5

up to 6 uops

Page 77: CENTRAL PROCESSING UNIT

CPU

77 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

• 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

RetirementReOrder Buffer (ROB)168 uops entry in-flight

Large set of rename registers

up to 4 uops/Cy • unfused• micro-fused• macro-fused

Scheduler (54 uops entry)port2 port3 port4 port0 port1 port5

AGULoadStore

(address)

AGUStore(data)

2 3 4

Integer0 1 5

MMXSSE

AVX low

0 1 5

x87AVX high

0 1 5

Result Bus128bits128bits 128bits

up to 6 uops

Memory Order Buffer (MOB)

Page 78: CENTRAL PROCESSING UNIT

CPU

78 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Poursuivons l’étude de l’instruction dpps et de son passage dans le pipeline matériel d’une architecture Sandy Bridge :

Instruction Operands uopsfused

unfused uops Latency ReciprocalThroughput

Comments

p0 p1 p5 p23 p4

dppsxmm, xmm, imm8 4 1 2 1 - - 12 2

SSE4.1xmm, m128, imm8 6

Page 79: CENTRAL PROCESSING UNIT

CPU

79 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

• 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).

Schedulerport2 port3 port4 port0 port1 port5

AGULoadStore

(address)

AGUStore(data)

2 3 4

Integer0 1 5

MMXSSE

AVX low

0 1 5

x87AVX high

0 1 5

Memory Order Buffer (MOB)

Result Bus128bits

L1 Data Cache32Ko

8ways set associative

DTLB4Ko page 64 entry2-4Mo page 32 entry1Go page 4 entry

128bits128bits128bits

128bits 128bits

Page 80: CENTRAL PROCESSING UNIT

CPU

80 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine 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 d’alignement, d’exceptions matérielles et de l’hyperthreading (partage des unités d’exécution) :

Instruction Operands uopsfused

unfused uops Latency ReciprocalThroughput

Comments

p0 p1 p5 p23 p4

dppsxmm, xmm, imm8 4 1 2 1 - - 12 2

SSE4.1xmm, m128, imm8 6 5 1 - 12 4

Page 81: CENTRAL PROCESSING UNIT

CPU

81 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine 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 :

Page 82: CENTRAL PROCESSING UNIT

CPU

82 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine 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 :

Sand

y Br

idge

Pip

elin

e

Page 83: CENTRAL PROCESSING UNIT

CPU

83 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine 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 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% :

: Thread A

: Thread B

Superscalar CPU (without HT) Multi Core superscalar’s CPU’s (without HT)Execution Unit instructions use

Tim

e

Tim

eExecution Unit instructions use

Page 84: CENTRAL PROCESSING UNIT

CPU

84 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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 :

: Thread A

: Thread B

Superscalar CPU (with HT)Execution Unit instructions use

Tim

e

Page 85: CENTRAL PROCESSING UNIT

CPU

85 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

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

Page 86: CENTRAL PROCESSING UNIT

CPU

86 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Evolutions du pipeline matériel sur famille Haswell :

Page 87: CENTRAL PROCESSING UNIT

CPU

87 – copyleft

Introduction – CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions Registers Front End Out-of Order Engine Execution Core

Evolutions du pipeline matériel sur famille Haswell :

Page 88: CENTRAL PROCESSING UNIT

Merci de votre attention !