central processing unit n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
CENTRAL PROCESSING UNIT PowerPoint Presentation
Download Presentation
CENTRAL PROCESSING UNIT

Loading in 2 Seconds...

play fullscreen
1 / 88

CENTRAL PROCESSING UNIT - PowerPoint PPT Presentation


  • 96 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'CENTRAL PROCESSING UNIT' - tamarr


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
central processing unit
CENTRAL PROCESSING UNIT

Architecture et Technologie des Ordinateurs

Hugo Descoubes- Juin 2013

slide2

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

CPU

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

slide3

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.

110000100111001

1110001101110100

0011000111000101

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

PC

Fetch

Decode

Execute

Writeback

0000110 111 011 111

1 level Hardware Pipeline

slide4

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.

110000100111001

1000111000111000

1100001110001011

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

PC

Fetch

1100001001110001

Opcode

Manipulation

Decode

0011000111000101

Sources Operands

Manipulation

Execute

1110001 101 110 100

Dest.Operand

Manipulation

Writeback

0000110 111 011 111

4 levels Hardware Pipeline

slide5

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

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

http://www.intel.com

slide6

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

CPU

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

slide7

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

CPU

Implémentation assembleur du langage C ci-dessous :

Programme en C

Programme assembleur

  • Program AddressMnemonicoperandsBinary
  • char value=3, saveValue;
  • void main (void) {
  • while (1) {
  • value += 2;
  • saveValue = value;
  • }
  • }
  • 0x0 main : LOAD &value, R2 01000010
  • 0x1 MOVK 2, R1 10001000
  • 0x2 ADD R1, R2, R1 00001000
  • 0x3 STR R1, &value 10100000
  • 0x4 LOAD &value, R2 01000010
  • 0x5 STR R2, &saveValue 10110010
  • 0x6 JMP main 00100000
  • 0x7 undefineduuuuuuuu
  • 0x8 undefineduuuuuuuu
  • … … …
  • 0xF undefineduuuuuuuu
  • Glossary :
  • R1=0
  • R2=1
  • &value=0x0
  • &saveValue=0x1
slide8

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x0

Fetch stage

AddressBinary

Decode stage

Data

Address

Bus

  • 0x0 00000011
  • 0x1 uuuuuuuu
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

Data Memory

3

MUX

Data

Bus

8

R1

R2

slide9

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

CPU

Démarrage application

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x1

Fetch stage

01000010

AddressBinary

Decode stage

Data

Address

Bus

  • 0x0 00000011
  • 0x1 uuuuuuuu
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

Data Memory

3

MUX

Data

Bus

8

R1

R2

slide10

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x2

Fetch stage

10001000

AddressBinary

Decode stage

01000010

Data

Address

Bus

  • 0x0 00000011
  • 0x1 uuuuuuuu
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

Data Memory

3

MUX

Data

Bus

8

R1

R2

slide11

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x3

Fetch stage

00001000

AddressBinary

Decode stage

10001000

Data

Address

Bus

  • 0x0 00000011
  • 0x1 uuuuuuuu
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

01000010

Execution Unit

Data Memory

3

MUX

Data

Bus

8

R1

R2

00000011

slide12

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x4

Fetch stage

10100000

AddressBinary

Decode stage

00001000

Data

Address

Bus

  • 0x0 00000011
  • 0x1 uuuuuuuu
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

10001000

Execution Unit

Data Memory

3

MUX

Data

Bus

8

00000010

R1

R2

00000011

slide13

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x5

Fetch stage

01000010

AddressBinary

Decode stage

10100000

Data

Address

Bus

  • 0x0 00000011
  • 0x1 uuuuuuuu
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

00001000

Data Memory

3

MUX

Data

Bus

8

00000101

R1

R2

00000011

slide14

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x6

Fetch stage

10110010

AddressBinary

Decode stage

01000010

Data

Address

Bus

  • 0x0 00000101
  • 0x1 uuuuuuuu
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

10100000

Data Memory

3

MUX

Data

Bus

8

00000101

R1

R2

00000011

slide15

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

00100000

PC = 0x7

Fetch stage

AddressBinary

Decode stage

10110010

Data

Address

Bus

  • 0x0 00000101
  • 0x1 uuuuuuuu
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

01000010

Data Memory

3

MUX

Data

Bus

8

00000101

R1

R2

00000101

slide16

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x8

Fetch stage

uuuuuuuu

AddressBinary

Decode stage

00100000

Data

Address

Bus

  • 0x0 00000101
  • 0x1 00000101
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

10110010

Execution Unit

Data Memory

3

MUX

Data

Bus

8

00000101

R1

R2

00000101

slide17

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x0

Fetch stage

uuuuuuuu

AddressBinary

Decode stage

uuuuuuuu

Data

Address

Bus

  • 0x0 00000101
  • 0x1 00000101
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

00100000

Data Memory

3

MUX

Data

Bus

8

00000101

R1

R2

00000101

slide18

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x1

Fetch stage

01000010

AddressBinary

Decode stage

uuuuuuuu

Data

Address

Bus

  • 0x0 00000101
  • 0x1 00000101
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

uuuuuuuu

Data Memory

3

MUX

Data

Bus

8

00000101

R1

R2

00000101

slide19

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

10001000

PC = 0x2

Fetch stage

AddressBinary

Decode stage

01000010

Data

Address

Bus

  • 0x0 00000101
  • 0x1 00000101
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

uuuuuuuu

Data Memory

3

MUX

Data

Bus

8

00000101

R1

R2

00000101

slide20

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

CPU

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

AddressBinary

  • 0x0 01000010
  • 0x1 10001000
  • 0x2 00001000
  • 0x3 10100000
  • 0x4 01000010
  • 0x5 10110010
  • 0x6 00100000
  • 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

8

Instruction Bus

CPU

PC = 0x3

Fetch stage

00001000

AddressBinary

Decode stage

10001000

Data

Address

Bus

  • 0x0 00000101
  • 0x1 00000101
  • 0x2 uuuuuuuu
  • 0x3 uuuuuuuu
  • 0x4 uuuuuuuu
  • 0x5 uuuuuuuu
  • 0x6 uuuuuuuu
  • 0x7 uuuuuuuu

Execution Unit

01000010

Data Memory

3

MUX

Data

Bus

8

00000101

R1

R2

00000101

slide21

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

CPU

Etc …

slide22

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

slide23

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

slide24

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

slide25

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 (CPUou data memory) suivi du writeback (CPU ou data memory).

Observons quelques inconvénients de ce type d’architecture :

Mappingmé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 …

slide26

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 …

Von Neumann

Harvard

L1P

Controller

Cache L1P

Separated

Main Memory

Unified

or

L3 Cache

Unified

(shared)

Instruction

Bus

Cache

L2

Unified

L2

Controller

CPU

Data Bus

L1D

Controller

Cache L1D

Separated

slide27

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 :

slide28

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.

slide29

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

slide30

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

slide31

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

slide32

Introduction –CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle

 jeu d’instruction

CPU

General PurposeRegisters : 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

slide33

Introduction –CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle

 jeu d’instruction

CPU

ArithmeticLogical 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

slide34

Introduction –CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle

 jeu d’instruction

CPU

Original 8086 Instruction set

slide35

Introduction –CPU élémentaire – Architectures CPU – Intel 8086 – Evolutions  Architecture matérielle

 jeu d’instruction

CPU

Original 8086 Instruction set

slide36

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

slide37

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.

slide38

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

slide39

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

0xFFFF

64Ko

mov(0x000F), %bl

Data Memory

0x000F

0x0000

0

slide40

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

0xFFFF

64Ko

mov$0x000F, %bx

mov(%bx), %al

Data Memory

0x000F

0x0000

0

movb%bl, %al ;déplacement 1o

movw%bx, %ax;déplacement 2o

movl%ebx, %eax ;déplacement 4o

;(non supporté sur 8086)

slide41

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.

slide42

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

slide43

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

slide44

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)

mov0,%bl ; bl=0x00 (4cy)

cmp%bl,%al ; (3cy), flag Z=1

jzif1; IP = addresseif1

; (16cy jump, 4cy no jump)

else1: ; user code else

;…

;…

;…

jmp endif1 ; IP = addresseendif1 (15cy)

if1: ; user code if

;…

;…

;…

endif1: jmpmain ; IP = addresse main (15cy)

slide45

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

voidfctTest (void);

void main (void) {

while (1) {

fctTest();

}

}

voidfctTest(void) {

// user code

}

main: call fctTest ; IP = adresse fctTest (19cy relatif)

jmpmain ; IP = adresse main (15cy)

;other code

;…

;…

fctTest: ; user code

;…

;…

;…

ret ; IP = adresse jmp dans le main

; (16-20cy)

slide46

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

slide47

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

slide48

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

Dr J. Y. Haggège

slide49

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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 PurposeRegisters (i = A, B, C, D)

Depuis Intel 64 architecture (64bits mode-only)

Depuis 80386 architecture (E = Extended)

Depuis 8086 architecture

General PurposeRegisters for Floating Point Unit : x87 and MMX extensions (i = 0 to 7)

Depuis 80486 architecture (x87 extension)

Depuis Pentium MMX architecture

slide50

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

Depuis Intel 64 architecture (64bits mode-only)

General PurposeRegisters for SIMD ExecutionUnits (SSE extensions)

(i = 0 à 7 with Pentium III SSE )

(i = 0 à 15 with Intel 64)

Depuis Sandy Bridge architecture (AVX extension)

Depuis Pentium III architecture (SSE extension)

slide51

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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 :

slide52

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

Pointer Registers (i = S and B)

Segment Registers

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

Depuis 8086 architecture

(64bits mode-only)

Index Registers (i = S and D)

Depuis 8086 architecture

(64bits mode-only)

slide53

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

Instruction Pointer Register

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), taskregister (TR), control registers CR0-CR8 64bits mode-only …

slide54

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

http://www.intel.com

slide55

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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.

slide56

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

Front End

Out-of OrderEngine

ExecutionCore

Cache Hierarchy

http://www.intel.com

slide57

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

slide58

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

BranchPrediction

Unit

LegacyDecode Pipeline (Nehalem)

slide59

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

BranchPrediction

Unit

16o aligned/Cy

128bits

Instruction PreDecoder

16o

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

LegacyDecode Pipeline (Nehalem)

slide60

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

BranchPrediction

Unit

16o aligned/Cy

128bits

Instruction PreDecoder

16o

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

Instruction Queue

18++ Instructions (macro-fusion)

LegacyDecode Pipeline (Nehalem)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Instruction Queue

slide61

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

BranchPrediction

Unit

16o aligned/Cy

128bits

Instruction PreDecoder

16o

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

Instruction Queue

18++ Instructions (macro-fusion)

LegacyDecode Pipeline (Nehalem)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Macro-fused

Instruction Queue

slide62

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

BranchPrediction

Unit

16o aligned/Cy

128bits

Instruction PreDecoder

16o

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

Instruction Queue

18++ Instructions (macro-fusion)

LegacyDecode Pipeline (Nehalem)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Instruction Decoder

Complex

Decode

Simple

Decode

Simple

Decode

Simple

Decode

4uops

1uop

1uop

1uop

slide63

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

Les instructions CISC complexe sont routées vers un décodeur dédié (ComplexDecode). 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

BranchPrediction

Unit

16o aligned/Cy

128bits

Instruction PreDecoder

16o

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

Instruction Queue

18++ Instructions (macro-fusion)

LegacyDecode Pipeline (Nehalem)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Instruction Decoder

MSROM

Microcode

Sequencer

Complex

Decode

Simple

Decode

Simple

Decode

Simple

Decode

4uops

1uop

1uop

1uop

4uops/Cy

slide64

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

BranchPrediction

Unit

16o aligned/Cy

128bits

Instruction PreDecoder

16o

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

Instruction Queue

18++ Instructions (macro-fusion)

LegacyDecode Pipeline (Nehalem)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Instruction Decoder

MSROM

Microcode

Sequencer

Complex

Decode

Simple

Decode

Simple

Decode

Simple

Decode

4uops

1uop

1uop

1uop

4uops/Cy

Instruction

DecoderQueue

(micro-fusion)

~4uops guarantee

slide65

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

BranchPrediction

Unit

16o aligned/Cy

128bits

Instruction PreDecoder

16o

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

Instruction Queue

18++ Instructions (macro-fusion)

LegacyDecode Pipeline (Nehalem)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Instruction Decoder

MSROM

Microcode

Sequencer

Complex

Decode

Simple

Decode

Simple

Decode

Simple

Decode

4uops

1uop

1uop

1uop

4uops/Cy

Instruction

DecoderQueue

(micro-fusion)

LoopStream Detector up to 28uops

~4uops guarantee

slide66

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

L1 ICache

32Ko

8ways set associative

ITLB

4Ko page 128 entry

2-4Mo page 8 entry

Instruction

Fetch Unit

BranchPrediction

Unit

16o aligned/Cy

128bits

Instruction PreDecoder

16o

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

Instruction Queue

18++ Instructions (macro-fusion)

LegacyDecode Pipeline (Nehalem)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Instruction Decoder

MSROM

Microcode

Sequencer

Complex

Decode

Simple

Decode

Simple

Decode

Simple

Decode

4uops

1uop

1uop

1uop

4uops/Cy

Instruction

DecoderQueue

(micro-fusion)

LoopStream Detector up to 28uops

~4uops guarantee

slide67

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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 :

slide68

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

BranchPrediction

Unit

16o aligned/Cy

128bits

advertised

Instruction PreDecoder

16o

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

DecodedIcache

1,5K uops

8ways set Direct Mapped

32sets

8ways/set

up to 6uops/way

Instruction Queue

18++ Instructions (macro-fusion)

DecodedICache(Sandy Bridge)

LegacyDecode Pipeline (Nehalem)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Instruction Decoder

MSROM

Microcode

Sequencer

Complex

Decode

Simple

Decode

Simple

Decode

Simple

Decode

4uops

1uop

1uop

1uop

4uops/Cy

4uops/Cy

Instruction

DecoderQueue

(micro-fusion)

LoopStream Detector up to 28uops

uops cache build

~4uops guarantee

Out-of Order

slide69

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

BranchPrediction

Unit

16o aligned/Cy

128bits

advertised

Instruction PreDecoder

16o

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

DecodedIcache

1,5K uops

8ways set Direct Mapped

32sets

8ways/set

up to 6uops/way

Instruction Queue

18++ Instructions (macro-fusion)

DecodedICache(Sandy Bridge)

1 Inst.

up to 4 Inst./Cy

1 Inst.

1 Inst.

1 Inst.

Instruction Decoder

MSROM

Microcode

Sequencer

Complex

Decode

Simple

Decode

Simple

Decode

Simple

Decode

4uops

1uop

1uop

1uop

4uops/Cy

4uops/Cy

Instruction

DecoderQueue

(micro-fusion)

LoopStream Detector up to 28uops

uops cache build

~4uops guarantee

slide70

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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-orderen mémoireet donc plus facile à lire et à debugger pour le développeur.

slide71

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

; voidfunction ( 16, 1 ); ;function call 10cy

MOVKL 16, A4 ;delayslot 0cy, parameter n°1

MOVKL 1, B4 ;delayslot0cy,parametern°2

MOVKL retAdd, B3 ;delayslot0cy, save return address

MOVKHretAdd, B3 ;delayslot0cy, save return address

B function ;delayslot5cy, call function

NOP 5

; jump to functionand return hereafter!

; voidfunction ( 16, 1 ); ;function call 6cy

B function ;delayslot5cy, 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 hereafter!

slide72

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

Etudions l’étage d’exécution dans le désordre de micro-opérations (out-of orderengine) :

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 DecoderQueue

~4 uopsguarantee/Cy (out-of order)

Allocate and Rename

Register Allocation Table

Large set of

renameregisters

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

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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 PurposeRegisters

for SIMD ExecutionUnits

dpps 0xF1, %xmm2,%xmm1

0

128

96

64

32

XMM1

0

128

96

64

32

XMM2

0

128

96

64

32

Temp1

0

32

Temp2

0

32

Temp3

0

32

Temp4

slide74

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

L’étage d’allocation et de renommage peut également exécuter puis retirer du pipeline certaines instructions simples ou idiomatiques :

nop

Zeroidioms(subreg,reg, xorreg,reg …)

Instruction DecoderQueue

~4 uopsguarantee/Cy (out-of order)

Allocate and Rename

Register Allocation Table

Large set of

renameregisters

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

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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 DecoderQueue

~4 uopsguarantee/Cy (out-of order)

Allocate and Rename

Register Allocation Table

Large set of

renameregisters

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

Retirement

ReOrder Buffer (ROB)

168 uops entry in-flight

slide76

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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 DecoderQueue

~4 uopsguarantee/Cy (out-of order)

Allocate and Rename

Register Allocation Table

Large set of

renameregisters

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

Retirement

ReOrder Buffer (ROB)

168 uops entry in-flight

Scheduler(54 uopsentry)

port2 port3 port4 port0 port1 port5

up to 6 uops

slide77

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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 DecoderQueue

~4 uopsguarantee/Cy (out-of order)

Allocate and Rename

Register Allocation Table

Large set of

renameregisters

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

Retirement

ReOrder Buffer (ROB)

168 uops entry in-flight

Scheduler(54 uopsentry)

port2 port3 port4 port0 port1 port5

up to 6 uops

0 1 5

0 1 5

4

0 1 5

2 3

MMX

SSE

AVX low

x87

AVX high

AGU

Store

(data)

Integer

AGU

Load

Store

(address)

Result Bus

128bits

128bits

128bits

Memory Order Buffer (MOB)

slide78

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

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

slide79

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

Les unités d’exécutions AGU (AddressGeneration 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 port3 port4 port0 port1 port5

0 1 5

0 1 5

4

0 1 5

2 3

MMX

SSE

AVX low

x87

AVX high

AGU

Store

(data)

Integer

AGU

Load

Store

(address)

Result Bus

128bits

128bits

128bits

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

slide80

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

slide81

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

slide82

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

slide83

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

Multi Coresuperscalar’sCPU’s (without HT)

Superscalar CPU (without HT)

Execution Unit instructions use

Execution Unit instructions use

: Thread A

Time

Time

: Thread B

slide84

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

slide85

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

 Front End

 Out-of OrderEngine

 ExecutionCore

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

slide86

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

Evolutions du pipeline matériel sur famille Haswell :

slide87

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

 Front End

 Out-of OrderEngine

 ExecutionCore

CPU

Evolutions du pipeline matériel sur famille Haswell :