Vous êtes sur la page 1sur 150

1

Introduction larchitecture
des microprocesseurs

But du cours
Avoir une ide du fonctionnement des microprocesseurs
modernes
Comprendre les ides importantes
Pipeline, caches, prdicteurs de branchements, etc

Comprendre do vient la performance

Microprocesseur ?
Processeur = processor = calculateur
(lectronique)

Micro = petite taille


Exemple: Intel Core 2 Duo 144 mm2

Processeur
Donnes
dentre

processeur

Sortie = fonction
des entres

En gnral, processeur = processeur programmable


La fonction ralise par le processeur peut tre redfinie

Le terme calcul doit tre compris dans un sens large


Un processeur (numrique) prend en entre des nombres entiers et rend en
sortie des nombres entiers
Tout ce qui peut tre mis en correspondance avec les nombres entiers peut
tre trait par un processeur
Grandeurs physiques discrtises (longueur, temps,) , textes, sons, images,
programmes, etc

(Pr)histoire
Calcul arithmtique utilis depuis des millnaires
Msopotamie, gypte ancienne, etc
Administration, commerce,

On a trouv des recettes (algorithmes)

Addition de 2 nombres, multiplication, division, etc


Algorithme dEuclide pour le calcul de PGCD
Crible dEratosthene pour identifier les nombres premiers
Etc

On a invent des outils pour aider au calcul


Abaque (boulier)

La pascaline (Blaise Pascal, 1642) premire vraie machine


calculer mcanique (additions,soustractions)

Processeurs lectroniques
20me sicle
Processeurs analogiques
Exemple: certaines quations diffrentielles peuvent tre rsolues
en dfinissant un circuit lectrique dont lune des grandeurs
(tension, courant) obit la mme quation diffrentielle
Pas flexible, pas pratique
On ne peut pas tout rsoudre par cette mthode
Chaque nouveau problme ncessite de construire un nouveau circuit

Prcision limite
Exemple: erreurs de mesure

Processeurs numriques programmables


Traite des nombres cods en binaire
La fonction ralise est dcrite dans un programme, on peut
changer le programme sans changer la machine

Quelques jalons
1946: ENIAC
30 tonnes !

1947: invention du transistor


1965: IBM S/360
Utilise dj la plupart des techniques utilises dans les machines
actuelles

1971: 1er microprocesseur


Intel 4004

1978: microprocesseur Intel 8086


Jeu dinstruction x86

Loi de Moore
Le nombre de transistors sur une puce de silicium
double environ tous les 2 ans
1965, Gordon Moore (co-fondateur dIntel)

Laire dun transistor


est divise par 2
environ tous les 2 ans

Quelques rappels

10

Reprsentation binaire
n

A =' an an 1 L a2 a1a0 ' = k =0 ak 2 k


ak {0,1}

6 ='0110'
3 ='0011'

Exemples:

6 + 3 ='1001'

Entiers signs,
exemple sur 4 bits

6 ='0110'

1 ='1111'

'1001'
+1

'0000'
+1

6 ='1010'

1 ='0001'

'110'
'11'
'110'
+'1100'
18 ='10010'

bit a3 est le bit de


signe sur 4 bits

11

Nombres en virgule flottante


1 bit
IEEE double prcision

11 bits

52 bits

Signe Exposant Mantisse

X = (1) S 1.M 2 E 1023


Exemple:

S =0
E ='10000000001' = 1025
1.M ='1.101'
X ='110.1' = 6.5

Addition
Mettre au mme exposant, additionner les mantisses, normaliser

Multiplication
Additionner les exposants, multiplier les mantisses, normaliser

12

Attention: flottants rels


Les nombres en virgule flottante (nombres flottants ) ne sont pas
les nombres rels des mathmatiques

Nombres rels

x + ( y + z) = ( x + y) + z
x ( y z) = ( x y) z
x ( y + z) = x y + x z

x+y
x+y arrondi au nombre
flottant le plus proche, ici y

Nombres flottants

x + ( y + z) ( x + y) + z
x ( y z) ( x y) z
x ( y + z) x y + x z

13

Flottants: exemple
double x = 0;
for (i=0; i<n; i++)

n=65536 exact

x = x + 1./n ;

n=6 approximatif

If (x==1) printf(exact);
else printf(approximatif);

1
= 2 16
65536
1
6

Reprsentation exacte en format IEEE


Arrondi au flottant le plus proche

14

Processeur numrique
On veut faire travailler les lectrons pour nous
Numrique = bits
Tension haute ~ Vdd bit 1
Tension basse ~ 0 bit 0

On assemble des circuits qui prennent des bits en entre


et donnent des bits en sortie
Quand on veut communiquer avec le monde extrieur, on
utilise des convertisseurs analogique numrique

Connatre la vitesse de la souris


Lire le disque dur
Afficher un pixel sur lcran
Entendre un MP3 sur le haut-parleur
Etc

15

Exemple: exp(x)
x 2 x3 x 4
e = 1+ x + + + +L
2! 3! 4!
x

y 1
z 1
Pour n de 1 20
x
n
y y+z

z z

Rsultat dans y

Pour rsoudre cet exemple, on doit

disposer de cases mmoires pour x,y,z et n


pouvoir crire ou lire une valeur dans ces cases
pouvoir effectuer des oprations
pouvoir tester la valeur de n pour arrter lorsque n=20

16

Technologie CMOS
Il faut un rservoir dlectrons cristal de silicium dop
silicium = semi-conducteur
On sait contrler les lectrons

lment de base: le transistor


On lutilise la manire dun interrupteur
Technologie CMOS (Complementary Metal-Oxide Semi-conductor)
2 types de transistors
Transistor de type N
Transistor de type P

17

Transistors MOSFET
Vdd 1 V

Type N

Vgs = 0

Vgs = Vdd

d
s
d
s

s
s

Vgs = 0

Vgs = -Vdd

Type P

s
d

18

Porte NOT
1 (Vdd )

S=E

19

Porte NAND
1 (Vdd )

E1

S
E2

E1

E2

E1
E2

Si on force une des entres 1, on obtient un NOT

20

Portes AND,OR,XOR,
AND

a
b

OR

a
b

XOR

ab
ab

a b = ( a b) ( a b)
(vaut 0 si a = b)

21

Multiplexeur (MUX)
E0
C

S = E0 si C=0
E1 si C=1

E1

E0

E0

E1

E1

22

Additionner 2 nombres entiers


a b
Additionneur
1 bit

s = abc
c

r = (a b) (a c) (b c)

s
Additionneur
4 bits

a3 b3 a2 b2 a1 b1 a0 b0
s4

s3

s2

s1

s0

23

Temps de rponse
a dpend de ce quon met en sortie de la porte
Vdd
V
Vdd

R
0

V
C

T RC

Si on connecte la porte un grand nombre dautres portes, la


capacit C est grande, et le temps de rponse lev
La miniaturisation des circuits diminue C circuits plus rapide

24

On peut parfois aller plus vite en utilisant


plus de transistors
a3 b3 a2 b2 a1 b1 a0 b0

s3

s2

s1

s0

a3 b3 a2 b2

Temps de rponse pour S3


= 4 additionneurs 1 bit

Temps pour S3 = 2
additionneurs 1 bit et 1 MUX

a3 b3 a2 b2
1

a1 b1 a0 b0

+
s3

s2

s1

+
s0

25

Mmoire dynamique (DRAM)


Une capacit charge, lorsquelle est isole, conserve
sa charge mmorise 1 bit

Lit / crit

0
Les courants de fuite dchargent la capacit progressivement il faut
rafrachir le bit priodiquement
La lecture dtruit le bit Il faut rcrire le bit aprs chaque lecture

26

Mmoire grand nombre de bits


Slectionne ligne
(wordline)

0
0
1
0
0
0
0
0

Slectionne colonne
(bitline)
Chaque case a un numro distinct = adresse
Ladresse dtermine la ligne et la colonne slectionnes

27

Mmoire statique (SRAM)


Portes NOT tte-bche mmorisent 1 bit

wordline

X
bitline

bitline

criture: activer la wordline, mettre la valeur du bit sur une bitline, son
complment sur lautre bitline, dsactiver la wordline
Lecture: prcharger les 2 bitlines Vdd , activer la wordline, attendre pendant un
temps suffisant pour que lamplificateur diffrentiel dtecte une diffrence entre
les 2 bitlines, dsactiver la wordline

28

Verrou ( latch )
E

H =1

S=E

H=0

S fig la valeur quil avait juste


avant que H passe de 1 0
La sortie est maintenant isole de lentre

Le verrou est passant

29

Comment faire un compteur ?


S= 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,etc
1

Problme: les bits de poids faible arrivent


avant ceux de poids fort

++++
S

1
H

0
H = signal dhorloge

H=0: plus long que le temps de


rponse pour S3

verrous

1
H=1: plus court que le temps de
rponse pour S0

++++
S

30

Flip-flop = 2 verrous
E

V1
H1

V2

S
S prend la valeur de E lorsque H
passe de 0 1 (= front montant)

H2

flip-flop

1
Le temps entre 2 fronts montant
conscutifs doit tre plus long que
le temps de rponse pour S3

++++
S

31

Registre dcalage
Exemple: registre dcalage 4 bits

H
Bit

Pour insrer un nouveau bit, envoyer un front montant sur H


Le registre mmorise les 4 derniers bits insrs

32

Exp(x)
On pourrait faire un processeur spcialis

+1
X
N
<21 ?
FDIV
Z
FMUL
Y
FADD

Ce processeur ne
sait faire rien dautre
que calculer exp(x)

Processeur programmable

33

Processeur programmable peut effectuer toutes sortes de tches


On cre un jeux dinstructions = langage cod en binaire
On crit un programme (= suite dinstructions dcrivant la tche
effectuer) quon stocke en mmoire
On fabrique un processeur permettant dexcuter les programmes crits
dans ce jeux dinstructions
On excute le programme sur le processeur
Si on veut effectuer une autre tche, on crit un autre programme quon
excute sur le mme processeur

34

Architecture / microarchitecture
Larchitecture est la machine abstraite telle quelle est perue par le
programmeur
En gros, architecture = jeux dinstruction

La microarchitecture est la machine physique, cest une mise en uvre


particulire dune architecture donne
Il peut exister plusieurs microarchitectures possibles pour une mme
architecture
Le programmeur ne voit pas la diffrence, sauf ventuellement dans la vitesse
dexcution des programmes

Exemple:
Intel x86 = jeu dinstructions = architecture
Intel Core = microarchitecture
Le terme architecture est parfois utilis pour architecture+microarchitecture

35

volution, compatibilit binaire


Les jeux dinstructions voluent peu dans le temps, ou lentement
Mais ils voluent quand mme
Intel x86 en 2009 diffrent dIntel x86 en 1978

La microarchitecture volue plus rapidement


Compatibilit binaire
Les programmes (= codes ) crits dans danciennes versions du jeu
dinstructions sont valides dans la nouvelle version
Les modifications du jeu dinstructions se font par ajouts, pas par retraits

Cela signifie quun programme qui sexcutait sur une ancienne


microarchitecture sexcute sur la nouvelle

Ne pas assurer la compatibilit binaire serait commercialement


suicidaire pour un fabricant de processeurs

36

Architecture / Jeux dinstructions


En anglais: Instruction-set Architecture (ISA)

37

Registres architecturaux
Registres = petite mmoire
Registres architecturaux dfinis par le jeu dinstructions
Registres vus par le programmeur

En gnral, petit nombre de registres


Exemple: 32 registres entiers , 32 registres flottants (virgule
flottante), + registres spciaux (compteur de programme, pointeur de pile,
etc)

Mise en uvre microarchitecturale


En gnrale, petite mmoire SRAM lintrieur du microprocesseur
Registres spciaux peuvent tre faits avec des flip-flops

38

Mmoire virtuelle
Cest la mmoire vue par le programmeur

architecture 64 bits = adresses virtuelles sur 64 bits


La taille mmoire vue par le programmeur vaut 264 octets
On verra plus loin dans le cours comment on transforme les adresses
virtuelles en adresses physiques
En gnral, dans une architecture 64 bits, un registre entier contient
64 bits de donne

39

Compteur de programme
Registre spcial appel compteur
de programme (program counter,
PC)
Initialiser PC=@I1
Lit et excute instruction I1
range ladresse PC
PC PC+taille[I1]
Lit et excute instruction I2
range ladresse PC
PC PC+taille[I2]
Lit et excute I3
Etc

processeur
PC

Adresse virtuelle
de linstruction

Instruction
excuter
Mmoire
virtuelle
I1,I2,I3,

programme

40

Jeux dinstructions RISC / CISC


RISC (Reduced Instruction-Set Computer)
Exemple: MIPS, Alpha, PowerPC, Sparc
Taille dinstruction fixe
Exemple: 4 octets par instruction (PC PC+4)

Oprations simples : lit 2 registres maxi, crit 1 registre maxi


Modes dadressage mmoire simples

CISC (Complex Instruction-Set Computer)


Exemple: IBM 360, VAX, Intel X86
Taille dinstruction variable
Oprations complexes autorises
Exemple: instructions x86 de manipulation de chanes

Modes dadressage mmoire complexes autoriss

41

Exemples dinstructions
r1 CONST
crit CONST dans registre r1
CONST = constante code dans linstruction

r3 r1 OP r2
Lit registres r1 et r2, excute opration OP, crit rsultat dans r3
Oprations sur les entiers: add,sub,mul,div,and,or,xor,shift, etc
Oprations sur les flottants: fadd,fsub,fmul,fdiv,sqrt,

r2 LOAD r1
Utilise la valeur contenue dans registre r1 comme adresse mmoire
Lit la valeur stocke en mmoire cette adresse
Copie la valeur dans registre r2

STORE r1,r2
Valeur dans r1 copie dans la case mmoire dont ladresse est dans r2

42

Instructions de contrle
Savoir faire des oprations nest pas suffisant

x
1
y y+z
x
z z
2
y y+z
z z

Exp(x)

Et si on veut itrer un milliard fois ?


le programme prend une
place norme en mmoire

x
20
y y+z

z z

On veut pouvoir manipuler le compteur de programme pour faire des


tests, des boucles, des procdures

43

Exemples dinstructions de contrle


BNZ r1,DEP
Branchement conditionnel
Saute ladresse PC+DEP si la valeur dans r1 est non nulle
DEP est une constante code dans linstruction
peut tre ngative (saut vers larrire)

JUMP r1
Saute ladresse contenue dans r1

r2 CALL r1
Saute ladresse contenue dans r1 et crit PC+4 dans r2
Utilis pour connatre le point dappel lorsquon fait un retour de
procdure
on peut aussi utiliser un registre spcialis implicite au lieu de r2

44

Modes dadressage
r2 LOAD r1+DEP

Adresse = r1+DEP
DEP = constante code dans linstruction
Appel adressage bas
Pratique pour accder aux champs dune structure

r3 LOAD r1+r2
Adresse = r1+r2
Appel adressage index
Pratique pour accder un tableau

r2 LOAD (r1)

2 lectures mmoire (CISC)


Lit la valeur 64 bits stocke en mmoire ladresse contenue dans r1
Utilise cette valeur comme adresse finale
Appel adressage indirect
Pratique quand on programme avec des pointeurs
RISC: on doit utiliser 2 LOAD

45

Exp(x)
x dans r33
y dans r34

r 33 x

z dans r35

r 34 1

n dans r1

r 35 1
r1 1
r 36 r 33 FDIV r1

Boucle:

r 34 r 34 FMUL r 36

r 35 r 35 FADD r 34
r1 r1 ADD 1
r 2 r1 SUB 21

BNZ r 2,5

46

Codage RISC: exemple


instructions sur 32 bits
32 registres entiers
32 registres flottants

Format I

Format R

16

op

rs

rt

const

11

op

rs

rt

rd

fonc

load / store (bas)


rt = rs op const
branchement
saut registre

rd = rs op rt
load / store (index)

47

Codage CISC
En-tte

Instruction CISC de longueur variable


Le dcodage de linstruction se fait squentiellement, par morceaux
Dcoder premier morceaux (= en-tte)
Selon la valeur du premier morceaux, dcoder deuxime morceau
Etc

48

CISC plus compact que RISC


Une instruction complexe quivaut plusieurs instructions simples

Exemple:

BEQ r1,r2,DEP

quivalent RISC:

r3 r1 SUB r2
BZ r3,DEP

Saute PC+DEP si r1=r2

Met r1-r2 dans r3


Saute PC+DEP si r3=0

r3 et SUB sont de linformation non essentielle


On aurait pu mettre r4 et XOR la place

49

RISC ou CISC ?
CISC
Code plus compact, prend moins de place en mmoire
Jeu dinstructions plus facile faire voluer
Exemple x86: 163264 bits, MMXSSESSE2SSE3etc

RISC
Microarchitecture plus simple

50

CISC et micro-oprations RISC


CISC
Les microarchitectures x86
dcomposent les instructions x86 en
micro-oprations RISC

dcode
RISC
cur
RISC

Certaines oprations CISC complexes sont mules avec un


nombre lev (variable) de micro-oprations
Fonctions transcendantes
cos, sin, exp, log, etc

Fonctions de manipulation de chanes


Etc

51

Excuter une instruction RISC: tapes


PC stock dans un flip-flop
Lire linstruction stocke en mmoire ladresse PC
Dcoder linstruction
Extraire du code de linstruction les diffrentes informations (type
dopration , registres accds)

Lire les registres


Excuter lopration
crire le rsultat dans les registres
Envoyer un coup dhorloge pour passer au PC suivant

52

La technique du pipeline

53

Excuter une instruction RISC: tapes


PC stock dans un flip-flop
Lire linstruction stocke en mmoire ladresse PC
Dcoder linstruction
Extraire du code de linstruction les diffrentes informations (type
dopration , registres accds)

Lire les registres


Excuter lopration
crire le rsultat dans les registres
Envoyer un coup dhorloge pour passer au PC suivant

54

On veut une excution performante


Technique du pipeline: pour acclrer lexcution, on nattend pas
quune instruction soit termine pour commencer excuter
linstruction suivante
travail la chane
un instant donn, plusieurs instructions sont en cours dexcution

Permet de cadencer lexcution avec une frquence dhorloge plus


leve

55

La technique du pipeline: principe


Exemple: additionneur 64-bit constitu de 2 additionneurs 32-bit
on veut calculer A+B, puis A+B puis A+B, etc
T = temps de rponse dun
additionneur 32 bits

AH BH AL BL
r

+
SH

SH

Pour effectuer 10 additions 64 bits 20 T


avec le mme additionneur

SL

AH BH

Dure dune addition 64 bits = 2T

Additionneur 32 bits inutilis 50% du temps

AL BL
r

+
S L

Pendant quon calcule les bits de poids


forts de A+B, on calcule les bits de
poids faible de A+B, ainsi de suite
Temps pour effectuer les 10 11 T
additions

56

Dbit / latence

La latence dune tche est le temps entre le dbut et la fin de la tche


Exemples: Latence dune instruction, latence dune addition, latence dun accs
mmoire, etc

Le dbit est le nombre de tches excutes pendant un temps fixe


Exemples: dbit de 1 milliard dinstructions par seconde, dbit de 1 accs mmoire
par cycle dhorloge, etc

La technique du pipeline permet daugmenter le dbit


Elle augmente un peu la latence temps de traverse des flip-flops

57

Le pipeline dinstructions
PC

+4

Lit instruction

Dcode

Lit registres

chaque cycle (= coup ) dhorloge,


une nouvelle instruction peut rentrer
dans le pipeline

Excute

crit registre

58

Une instruction par cycle (en thorie)

Lit instruction
Dcode
Lit registres
Excute
crit registre

cycle N

cycle N+1

cycle N+2

I5
I4
I3

I6
I5
I4

I7
I6
I5

I2
I1

I3
I2

I4
I3

Mais en pratique, il y a des complications

59

Registres: besoins de plusieurs ports


Lit instruction
Dcode
Lit registres

Lit 2 registres

Excute
crit registre

crit 1 registre

2 lectures et 1 criture en mme temps dans la


mmoire de registre ( banc de registres)
On a besoin dune SRAM avec 2 ports de lecture et
un port dcriture

60

SRAM multi-port
Exemple: SRAM double port

2 wordlines
4 bitlines

Attention, on ne peut pas


crire simultanment dans la
mme case (pas de problme
si un seul port dcriture)

La surface de la SRAM augmente approximativement comme le carr


du nombre de ports

61

Types dadressage / nombre de ports

Adressage bas
r2 LOAD r1+DEP 1 port lecture, 1 port criture
STORE r2,r1+DEP 2 ports lecture

Adressage index (Sparc, PowerPC)


r3 LOAD r1+r2 2 ports lecture, 1 port criture
STORE r3,r1+r2 3 ports lecture

62

Ala structurel
= conflit de ressource
Registres pas dala structurel si nombre de ports suffisant
Mmoire: lecture instruction potentiellement en conflit avec LOAD/STORE
Solution 1: mmoire multi port
Solution 2: donner priorit aux LOAD/STORE et bloquer le pipeline pendant la
dure dun accs baisse de performance
En fait, aucune de ces 2 solutions nest satisfaisante, on verra plus loin dans
le cours comment ce problme est rsolu en ralit

63

Alas de contrle: le problme des sauts


Cycle N
Lit instruction

I4

N+1
I35

Dcode

I3

bulle

I35

I36

I37

Lit registres

I2

bulle

bulle

I35

I36

Excute

I1: jump @I35

bulle

bulle

bulle

I35

I1

bulle

bulle

bulle

crit registre

N+2
I36

N+3
I37

N+4
I38

Cycle N: le saut est excut I2,I3,I4 sont effaces du


pipeline et remplaces par des bulles 3 cycles perdus
Problme: si 1 saut toutes les 10 instructions 10+3 cycles pour
10 instructions dbit = 10 / 13 = 0.77 instructions par cycle

64

Alas de contrle: solutions


Branchement diffr (MIPS, Sparc )
le saut ne se fait pas tout de suite, mais avec un dlai
exemple: le programme excute I1, puis I2, puis I5
Cest comme si I2 tait place avant I1 dans le programme

permet dviter la bulle quand I2 est une instruction utile


(si on ne trouve pas dinstruction utile, I2 = NOP = bulle)
Plus vraiment dactualit

Prdiction de branchement
solution utilise dans les processeurs modernes
cf. plus loin dans le cours

I1: jump @I5


I2:
I3:
I4:
I5:

Prdicteur de branchements

65

Prdicteur de
branchement

PC
Lit instruction

La plupart des programmes ont un comportement


rptitif

On stocke dans une mmoire microarchitecturale


(dans le processeur) des informations sur les
instructions de contrle et leur comportement
pass prdicteur de branchements

On utilise ces informations pour effectuer les


sauts spculativement

En cas de mauvaise prdiction, on vide le pipeline


et on corrige le PC ala de contrle

Dcode

Lit registres

Excute

crit registre

66

Dpendances entre instructions


Lit instruction
Dcode
Lit registres
Excute

I2 : r 2 r1 SUB 21
I1 : r1 r1 ADD 1

crit registre

Linstruction I2 utilise la valeur produite par linstruction I1


Problme: quand I2 lit le registre r1, I1 na pas encore crit dedans !

67

3 types de dpendance
dpendance Read After Write (RAW)
le rsultat de I1 est utilis par I2
aussi appele dpendance vraie

dpendance Write After Read (WAR)


I2 crit dans un registre lu par I1
aussi appele anti-dpendance

dpendance Write After Write (WAW)


I2 crit dans le mme registre que I1
aussi appel dpendance de sortie

I1: r1 r1 ADD 1
I2: r2 LOAD r1+DEP

I1: r2 LOAD r1+DEP


I2: r1 r1 ADD 1
I1: r2 LOAD r1+DEP
BZ r5, -10
I2: r2 LOAD r3+DEP

68

Alas de dpendance
Pour respecter les dpendances entre instructions, on introduit des
bulles dans le pipeline
Alas de dpendance
RAW
WAW: pas de problme si les instructions passent par ltage dcriture
dans lordre du programme
WAR : pas de problme si on lit les registres dans lordre du programme
et toujours au mme tage du pipeline

Les alas de dpendance, comme les alas structurels et les alas


de contrle, diminuent la performance

69

Ala read after write


Cycle N

N+1

N+2

I2

I2

N+3

Lit instruction
Dcode
Lit registres

I2: r1 r1 ADD 1

Excute

I1: r1 r2 ADD r3

bulle

I1

crit registre

Pipeline
bloqu

bulle

I2

bulle

bulle

Pipeline Pipeline
bloqu redmarre

On attend 2 cycles avant de lancer I2 2 cycles perdus

Exemple: exp(x)
r 33 x
r 34 1

r 35 1
r1 1
Boucle:

r 36 r 33 FDIV r1

r 34 r 34 FMUL r 36

r 35 r 35 FADD r 34

Lit instruction
Dcode
Lit registres
Excute
crit registre

r1 r1 ADD 1
r 2 r1 SUB 21
BNZ r 2,5

Supposons un prdicteur de branchements


parfait.
Les dpendances RAW spares par plus
de 2 instructions ne cotent rien ici

Temps dexcution = 5 bulles (1re instruction traverse pipeline) + 4 instructions + 2


bulles (RAW r1) + 20 x [6 instructions + 4 x 2 bulles (RAW r36,r34,r1,r2)] = 11 + 20 x 14
= 291 cycles dbit rel = 124 / 291 = 0.43 instructions par cycle

70

71

Changer lordre des instructions


r 33 x
En changeant lordre des instructions, on
peut enlever des bulles

r1 1
r 34 1

Ici, il ny a plus que 2 bulles par itration au


lieu de 8

r 35 1
Boucle:

r 36 r 33 FDIV r1

r1 r1 ADD 1
r 34 r 34 FMUL r 36

r 2 r1 SUB 21

t
t+1
t+3

Temps dexcution = 5 bulles + 4


instructions + 20 x [6 instructions + 2 bulles]
= 169 cycles

t+4

r 35 r 35 FADD r 34

t+6

BNZ r 2,5

t+7

Acclration = 291 / 169 = 1.72


72% de gain en performance

Mcanisme de bypass
registres

Permet dutiliser le rsultat dune


instruction sans attendre quil soit
crit dans les registres
Deux instructions avec une
dpendance RAW peuvent sexcuter
dans des cycles conscutifs

oprateurs

Les MUX sont commands par des


comparaisons sur les numros
de registre

72

73

Instructions de dures diffrentes (1)


Certaines instructions sont plus longues excuter que
dautres
load / store
Temps daccs la mmoire ?

division et multiplication entire


Plus complexe quune addition

oprations virgule flottante


Normalisation des exposants

Instructions de dures diffrentes (2)


PC

Prdicteur de
branchement

Lit instruction

Dcode

Cest loprateur le plus lent qui


dicte la frquence dhorloge ?

Lit registres
Solution: pipeliner les oprateurs
Excute
Mais attention
crit registre

74

75

Pipeliner les oprateurs: exemple


I3

Lit registres
oprations
longues

oprations
courtes
I2

Excute

Excute 1

I1

Instruction longue I1 suivie de 2


instructions courtes I2 et I3
Cycle N: criture I2
Cycle N+1: criture I1 et I3

I1 et I3 crivent en mme temps !


Ala structurel si 1 seul port
dcriture

Excute 2
Excute 3

I2 crit avant I1
(Et si une interruption se produit ?)

Si I1 et I2 crivent le mme registre


ala WAW !

crit registre

76

Solution 1: attendre
I3

I2

Lit registres

Excute

Attendre 2 cycles avant dexcuter I2

les instructions se terminent dans


lordre du programme (ordre
squentiel )

Excute 1
Excute 2
Excute 3

crit registre

I1

Pas de conflit dcriture


Pas dala WAW

On perd 2 cycles chaque fois


quune instruction courte suit une
instruction longue

77

Solution 2: port dcriture en plus


Lit registres

Si I1 et I2 ncrivent pas dans le mme


registre, autoriser I2 crire avant I1
Sinon, attendre

I3

Excute

Excute 1

I3 et I1 crivent en mme temps

Les interruptions sont imprcises

Excute 2
Excute 3

I2

I1

crit registre

78

Interruptions / exceptions
Parfois, on veut interrompre lexcution et pouvoir la relancer
ultrieurement partir du point dinterruption
Excution en temps partag
Exemple: toutes les 10 millisecondes, le timer envoie un signal dinterruption
pour redonner le processeur au systme dexploitation, qui peut dcider de
donner momentanment le processeur une autre tche
Ltat architectural (contexte) de la tche interrompue (dont les valeurs des
registres architecturaux) est sauvegard en mmoire ou sur disque
Ce contexte sera utilis pour relancer la tche interrompue

mulation en logiciel de certaines instructions


Par exemple pour la compatibilit binaire

Debugging
Gestion de la mmoire
Quand la mmoire physique est trop petite par rapport aux besoins en
mmoire virtuelle, on simule une plus grande mmoire en utilisant le
disque
Voir plus loin dans le cours

79

Interruptions prcises

Une interruption est dite prcise si ltat des registres et de la mmoire au


moment de linterruption est un tat architectural tat rsultant dune
excution strictement squentielle
Exemple: instruction peut
tre mule en logiciel

I1: r1 COS r2
I2: r3 r3 ADD 1

Si, au moment o on sauvegarde ltat des registres, I2 a dj crit son rsultat,


linterruption est imprcise
Lorsquon reprendra lexcution, la valeur dans r3 ne sera pas la bonne
Solution: mmoriser dans le contexte le fait que I2 est dj excute, et ne pas reexcuter I2 la reprise

Les interruptions prcises sont prfrables

80

Solution 3: tages vides


Lit registres

Excute

tage vide = flip-flop


Transmet linstruction et son rsultat

Excute 1

Excute 3

I2

I1

crit registre

Les critures se font dans lordre


Interruptions prcises

Excute 2

I3

Rajouter des tages vides aux


oprations courtes pour retarder
lcriture

Mcanisme de bypass plus complexe

81

Exemple: exp(x)
r 33 x

Boucle:

r 34 1

Lit instruction

r 35 1
r1 1

Dcode
Lit registres

r 36 r 33 FDIV r1

Excute 1

r 34 r 34 FMUL r 36

(Excute 2)

r 35 r 35 FADD r 34

crit registre

r1 r1 ADD 1

r 2 r1 SUB 21
BNZ r 2,5

r , ADD,SUB,BNZ
FDIV,FMUL,FADD

Prdicteur de branchements parfait


Mcanisme de bypass
On attend 1 cycle (bulle) lorsquon a
besoin du rsultat dune instruction
longue

Temps dexcution = 6 bulles (1re instruction traverse pipeline) + 4 instructions + 20 x


[6 instructions + 2 bulles] = 10 + 20 x 8 = 170 cycles dbit rel = 124 / 170 = 0.73
instructions par cycle

82

Accs mmoire
En 2008:
Latence dun additionneur entier 64 bits ~ 0.5 nanosecondes
= 1 cycle dhorloge
Dicte la frquence dhorloge

F=

1
= 2 109 herz
0.5 10 9

Latence daccs dune mmoire DRAM de 1 Go ~ 100 ns = 200 cycles !


(Latence exact dpend de plusieurs facteurs, dont la taille mmoire)

Problme !
Si on doit bloquer lexcution pendant 200 cycles chaque accs mmoire,
la performance est trs faible

83

Do vient la latence ?
Pour les connexions longues de plusieurs centimtres, vitesse
de la lumire un impact. Sur une puce (processeur ou
mmoire), effets capacitifs essentiellement.

Vdd

Rt
0

Vdd

Rc

C
T ( Rt + Rc ) C

La capacit lectrique C et la rsistance Rc dune connexion sont


proportionnelles sa longueur RcC augmente comme le carr de la longueur
solution: insrer des portes NOT intervalles rguliers
dlai proportionnel la longueur

R C

T = n Rt + c
n n

Rt C

84

Latence dune lecture mmoire


DRAM
bus dadresse
processeur
bus de donne

1.
2.
3.

Ladresse sort de la puce processeur par le brochage et est envoye sur le bus dadresse
On active la wordline et on slectionne les bitlines correspondant la donne demande
La donne est envoye au processeur par le bus de donne

Une grande mmoire a des wordlines et bit lines longues grand temps daccs
Sil y a plusieurs bancs DRAM, il faut des bus plus longs et il faut slectionner le banc
correspondant la donne demande latence supplmentaire

85

Rduire la latence mmoire ?


Prendre une DRAM de plus petite capacit (en octets) ?
Pas vraiment ce quon souhaite
Il faudrait rduire la taille mmoire considrablement pour diminuer la
latence DRAM ne manire significative
Latence DRAM augmente avec taille, mais pas linairement

La DRAM nest pas la seule contribuer la latence mmoire

Mettre la mmoire directement sur la puce ?


La Loi de Moore semble le permettre, mais les besoins en mmoire
augmentent paralllement la loi de Moore
en 2008, la mmoire principale est encore trop grande pour tenir sur la
puce processeur
Circuits 3D ? Recherches prometteuses mais technologie pas encore mature

86

Le principe du cache

Principe de localit temporelle


La plupart des programmes ont tendance raccder des instructions et des donnes
quils ont accdes rcemment
Exemple: une boucle

Cache = petite mmoire situe sur la puce processeur


Exemple: 64 ko

On met dans le cache les donnes et instructions accdes rcemment


Si la donne/instruction demande est absente du cache (dfaut de cache, ou miss),
elle est lue en mmoire principale et stocke automatiquement dans le cache
Technique microarchitectural transparente pour le programmeur et le compilateur

processeur
cache

Mmoire
principale

87

Cache dinstructions, cache de donnes

On peut mettre les instructions et les donnes dans des caches spars

Avantage: pas besoin davoir 2 ports sur le cache, pas de conflit daccs

Cache
dinstructions

Lit instruction
Dcode
Lit registres

Load/store

Excute

Cache de
donnes

crit registre

En cas de miss, bloquer le signal dhorloge jusqu la rsolution du miss

88

Plusieurs niveaux de cache

La latence dun cache augmente avec sa taille

Plusieurs niveaux de cache ( hirarchie mmoire )


Niveau 1 (L1): caches petits et rapide daccs
Exemple: 32 Ko, latence 2 cycles

Niveau 2 (L2): cache plus gros et plus lent


Exemple: 1 Mo, latence 10 cycles

Etc

Lit instruction

I-cache L1

Dcode

Cache

Lit registres

L2

Excute
crit registre

D-cache L1

mmoire
principale
ou cache L3

89

Excution des load/store


r2 LOAD r1+DEP
STORE r2,r1+DEP

Lit instruction
Dcode
Lit registres
Excute
(accs cache)

Calcule r1+DEP
Accs D-cache L1 (1 cycle)

crit registre

90

Pnalit load-use
Lit instruction

Sur cet exemple, I2 ne peut sexcuter


que lorsque I1 a fini laccs cache

Dcode

1 bulle (pnalit load-use = 1 cycle)

Lit registres
Excute
(accs cache)
crit registre

I2: r2 r2 ADD 1
bulle
I1: r2 LOAD r1+7

Si le temps daccs cache tait de 2 cycles, il faudrait


insrer 2 bulles (pnalit load-use = 2 cycles), etc

91

Exemple (1)
int a[100];
x = 0;
for (i=0; i<100; i++)
x = x + a[i];

Prdicteur de branchements parfait


Programme dans le cache dinstructions
Mcanisme de bypass
Pnalit load-use = 2 cycles
Donnes dj dans le cache L1

r1 100
r2 a
r3 0
r4 LOAD r2
r2 r2 ADD 4
r1 r1 SUB 1
r3 r3 ADD r4

2 instructions indpendantes du load suffisent pour


masquer la latence load-use, pas de pnalit
Temps dexcution: 7 + 3 + 100 x 5 = 510 cycles

BNZ r1,-4

92

Exemple (2)
int a[100];
x = 0;
for (i=0; i<100; i+=2)
x = x + a[i] + a[i+1];

r1 100
r2 a
r3 0
r4 LOAD r2
r5 LOAD r2+4

Prdicteur de branchements parfait


Programme dans le cache dinstructions
Mcanisme de bypass
Pnalit load-use = 3 cycles
Donnes dj dans le cache L1

r2 r2 ADD 8
r1 r1 SUB 2
r3 r3 ADD r4
r3 r3 ADD r5
BNZ r1,-6

Temps dexcution = 8 + 3 + 50 x 7 = 361 cycles


Les compilateurs optimiss font cela automatiquement sans laide du
programmeur (remarque: on a utilis la loi dassociativit pour laddition sur les
entiers. Sur des flottants, cela changerait la smantique du programme)

93

Dpendances mmoire
Exemple: latence cache = 2 cycles

Lit instruction
Dcode
Lit registres
I2: r2 LOAD r3+4

Excute

Pas de chance ! Aprs calcul de


r3+4, on trouve que r3+4 = r1+7

bulle

(accs cache)
(accs cache)

I1: STORE r2, r1+7

crit registre

94

Oprateurs flottants

Lexcution des oprations en virgule flottante prend plusieurs cycles

Exemple: Intel Core


FADD: 6 cycles, compltement pipelin (1 FADD/cycle possible)
FMUL: 8 cycles, compltement pipelin
FDIV: 40 cycles, non pipelin (1 FDIV tous les 40 cycles)

Quand on crit des programmes performants, on essaie dviter les divisions si


possible

1+
z=

1
x

1 addition, 2 divisions

z=

x +1
x y

On a remplac une division


par une multiplication

95

Problme

Si on veut pipeliner laddition et la multiplication flottante tout en maintenant lordre


squentiel des critures registre, il faut rajouter beaucoup dtages vides pour les
oprations courtes, ce qui rend le mcanisme de bypass complexe
Revenons un peu en arrire

Lit instruction
Dcode
Lit registres
Excute

Excute flottant

(accs cache)

Excute flottant

Interruptions imprcises

Besoin de 2 ports dcriture

Ala WAW peut se produire si


LOAD dans registre FP attente

Excute flottant
crit registre

96

Pipeline entier, pipeline flottant

Deux SRAMs au lieu dune: une SRAM pour les registres entiers (INT=integer), une
pour les registres flottants (FP=floating-point)

Lit instruction
Dcode
Lit registres INT

Lit registres FP

Excute

Excute FP

(accs cache)

Excute FP

SRAMs avec 1 seul port dcriture

Rappel: complexit dune SRAM multiport augmente comme le carr du


nombre de ports
Exemple: 32 INT, 32 FP

2 32 (2 + 1) 2 9
=
64 (2 + 2) 2
16

crit registre INT


Excute FP
crit registre FP

moins complexe quune SRAM 2


ports dcriture

97

Load/store flottant

Problme:
Load/store flottant accde la fois aux registres INT (calcul dadresse) et aux
registres FP (valeur lue ou crite)

Lit instruction
Dcode
Lit registres INT

Lit registres FP

Excute

Excute FP

(accs cache)

Excute FP

Envoyer copies de linstruction dans les


2 pipelines simultanment

f1 LOAD i2+10
Quand laccs cache est termin,
envoyer valeur au pipeline FP
En gnral, augmente la pnalit loaduse FP de 1 cycle (voire plus)

STORE f1,i2+10
Quand lecture FP termine, envoyer
valeur FP au pipeline INT

crit registre INT


(Excute FP)

crit registre FP

Pas dala WAW, mais interruptions


imprcises

98

Excution dans le dsordre

Exemple: I2 dpend de I1, mais I3,I4 ne dpendent ni de I1 ni de I2


I2 doit attendre que I1 se termine (RAW), mais pourquoi I3,I4 devraient elles attendre ?
On pourrait mettre I2 dans une mmoire tampon et continuer le lancement dinstructions

Lit instruction
I5

Dcode
I2

I4

Lit registres INT

Lit registres FP

I3

Excute

Excute FP

(accs cache)

Excute FP

crit registre INT

(Excute FP)
(Excute FP)
crit registre FP

tampon

Load/store flottant doit


rester bloqu au dcode
tant que tampon FP pas
vide

I1
Le calcul entier prend de
lavance sur le calcul
flottant tant que le
tampon nest pas plein

double y[100] ;
double x = 0 ;
for (i=0; i<100; i++)
x = x + y[i] ;

f2 LOAD i1
f1 f1 FADD f2
i1 i1 ADD 8
i2 i2 SUB 1
BNZ i2,-4

On suppose ici 1 tage


daccs cache et FADD
pipelin sur 4 tages

99

cycle
dcode

cycle
lecture
reg

cycle
rsultat

f2 LOAD i1

f1 f1 FADD f2

i1 i1 ADD 8

i2 i2 SUB 1

BNZ i2,-4

f2 LOAD i1

f1 f1 FADD f2

13

i1 i1 ADD 8

10

i2 i2 SUB 1

10

11

BNZ i2,-4

10

11

f2 LOAD i1

11

12

14

f1 f1 FADD f2

12

14

18

i1 i1 ADD 8

13

14

15

i2 i2 SUB 1

14

15

16

BNZ i2,-4

15

16

Dpendances registre

WAW,WAR
pas de problme
load/store flottant bloqu au dcode tant que tampon FP non vide

RAW:
SRAM spciale o sont stocks 1 bit de prsence pour chaque registre
Quand une instruction I1 est lance dans ltage de lecture registre, met le bit du
registre destination 0
Une instruction I2 utilisant le rsultat de I1 doit attendre tant que le bit de
prsence est nul.
Ds que le rsultat de I1 est connu et accessible via le bypass, met le bit 1, ce
qui autorise I2 rentrer dans ltage de lecture registre

100

Dpendances mmoire

101

File de STORE = petite mmoire associative


Mmoire associative (content addressable memory, CAM) mmoire contenant
des comparateurs

Mettre le STORE (adresse calcule et valeur) dans la file pendant la dure


de lcriture cache

Quand criture cache termine, retirer le STORE de la file


Quand adresse LOAD calcule, comparer ladresse avec toutes les adresses
dans la file

Si il existe un STORE la mme adresse (hit), le LOAD prend la valeur


directement dans la file au lieu daccder au cache (mcanisme de bypass
mmoire)
Si plusieurs STORE la mme adresse, prendre le plus rcent

Nombre dentres de la file augmente avec la latence du cache

Comparaisons faites en parallle

102

Exemple: file de STORE 4 entres


Adresse
store

Adresse
load

=?
Hit?

Valeur
store

Valeur
load si hit

=?

=?

=?

Si plusieurs hits, slectionne le plus gauche

103

Petite parenthse
a b c

a b

cd

ef

g h

Mieux !

Lopration OR (comme AND et XOR) est


une opration associative

(a b) c = a (b c)

104

fin de la parenthse

Quand la sortie dun circuit peut tre exprime sous la forme a*b*c*d*
etc., o * est une opration associative, alors il y a de bonnes chances
quil existe une mise en uvre matrielle efficace de ce circuit

Exemples:

Dtection de hit utilise des OR


Comparateur dadresses utilise des XOR et des OR
Dtection du hit le plus gauche OR ( y a-t-il un hit plus gauche ? )
Retenue dun additionneur voir ci-dessous

ro

b
+

ri

ro g , p
2
2
ro

g, p

ro = g ( p ri )

g1 , p1 ri

ri

g = ab
p = ab

gnre retenue
propage retenue

g g 2 g1 g 2 ( g1 p2 )

= =
p2 p1
p p2 p1
Lopration

est associative

105

Les caches

106

Rappel: localit temporelle


La plupart des programmes ont tendance accder des instructions et
des donnes quils ont accdes rcemment
n

Exemple: produit de matrice

cij = aik bkj


k =0

for (i=0; i<n; i++)

c[i][j] += a[i][k] * b[k][j] ;


}

Localit des instructions


Intrieur boucle for i n fois
Intrieur boucle for j n2 fois
Intrieur boucle for k n3 fois

for (j=0; j<n; j++) {


c[i][j] = 0 ;
for (k=0; k<n; k++)

Localit des donnes


Chaque a[i][j] et b[i][j] est utilis n fois

107

Rappel: hirarchie mmoire


I-cache L1

Lit instruction
Dcode

Cache

Lit registres

L2

mmoire
principale
ou cache L3

D-cache L1

Excute
crit registre

Ordres de grandeur:

Frquence processeur 2 GHz cycle dhorloge = 0.5 ns


Cache L1 de 64 Ko latence = 2 cycles (2 tages daccs cache)
Cache L2 de 2 Mo latence = 10-20 cycles
Mmoire 2 Go 100-200 cycles

108

Cache direct-mapped

Cest la structure de cache la plus simple


Slectionner lentre avec les bits de poids faible de ladresse
Comparer les bits de poids fort avec le tag stock dans lentre

adresse
tags

donnes /
instructions

n bits

2n entres

=?

hit ou miss ?

109

Lignes de cache
Principe de localit spatiale
La plupart des programmes ont tendance accder dans des temps
rapprochs des donnes ou instructions situes des adresses
proches

Au lieu de stocker dans une entre du cache une seule donne ou


une seule instruction, on stocke une ligne
Ligne = nombre fixe doctets conscutifs en mmoire
Taille typique: 64 octets

Exemple:

1 int 4 octets

int x[N];

1 ligne de 64 octets 16 int

for (i=0; i<N; i++)


s += x[i] ;

1 miss toutes les 16 itrations

110

Exemple: ligne de 64 octets


Les 6 bits de poids faible de ladresse slectionnent la donne (ou
linstruction) lintrieur de la ligne (utilise MUX)

adresse octet
adresse ligne
tags
n

index

tag

6
offset ligne

lignes

2n lignes

=?

111

taille dun cache

Taille dun cache ?


Surface de silicium (mm2) ?
Capacit SRAM (octets) ?
Nombre dinstructions/donnes ?

Exercice
Soit une architecture 32 bits
Soit un cache direct-mapped juste assez grand pour contenir un tableau de 1024
flottants double prcision. Les lignes font 64 octets.
Quelle est la capacit (octets) de la SRAM o sont stockes les lignes ?
Quelle est la capacit (octets) de la SRAM o sont stocks les tags ?

112

Rponse

19

Architecture 32 bits adresses 32 bits


1 flottant DP 8 octets
1 ligne 64 octets 8 flottants DP
1024 flottants DP 128 lignes
7

6
19 bits

64 octets

128=27 lignes

=?

128 x 64 = 8 Ko de SRAM pour les lignes


128 x 19 / 8 = 304 octets de SRAM pour les tags

On dit que le
cache fait 8 Ko

113

Cache write-through
(cache criture transmise)

Plusieurs types de caches selon la manire dont sont traites les critures

Cache write-through
On envoie systmatiquement lordre dcriture (adresse et valeur) au niveau
suivant de la hirarchie mmoire (cache L2, cache L3, ou mmoire)
Si ladresse dcriture est prsente dans le cache (hit en criture), on met jour
la donne dans le cache
Sur un miss en lecture, on va chercher la ligne manquante dans le niveau
suivant (L2,L3,mmoire) et on crit la ligne et son tag dans le cache
Lancienne ligne cette entre peut tre crase car il existe une copie jour dans le
niveau suivant

Sur un miss en criture, 2 mthodes possibles


Allocation sur criture on va chercher la ligne manquante, on la met dans le cache,
et on fait comme pour un hit en criture
Pas dallocation sur criture le cache est inchang, on se contente de transmettre l
criture au niveau suivant

114

Cache write-back
(cache criture diffre)

On rajoute un bit dirty dans chaque entre du cache


Lorsquil vaut 1, ce bit signifie que la ligne a t modifie
Sur un hit en criture, on met jour la donne dans le cache et on
positionne le bit dirty de la ligne 1
Sur un miss en lecture, on va chercher la ligne manquante dans le niveau
suivant et pendant ce temps on regarde si le bit dirty de la ligne quon va
vincer vaut 1
Si le bit dirty est 0, cela signifie que la ligne na pas t modifie et donc que la
ligne est jour dans le niveau suivant on peut craser la ligne
Si le bit dirty est 1, il faut sauvegarde la ligne modifie dans le niveau suivant
avant de pouvoir la remplacer par la ligne manquante

Sur un miss en criture, on va chercher la ligne manquante, on la met dans


le cache, puis on fait comme pour un hit en criture

115

Classification des miss

Pour avoir une bonne performance, on cherche minimiser le nombre de


miss

3 types de miss
Miss de dmarrage premire fois quon accde une donne ou une
instruction
On peut diminuer le nombre de miss de dmarrage en prenant des lignes de cache
plus longues

Miss de capacit le cache nest pas assez grand pour contenir le programme
et/ou les donnes de ce programme
On peut diminuer le nombre de miss de capacit en augmentant la taille du cache

Miss de conflit le cache est assez grand, mais certaines lignes veulent
aller dans la mme entre du cache

116

Miss de conflit
2 lignes sont en conflit si elles ont le mme index cache

index

2n lignes

B
Sur un cache direct-mapped, les lignes en conflit sont les lignes dont les adresses
sont distantes dun nombre entier de fois le nombre de lignes de cache

A B (mod 2 n )

117

Exemple
Soit un cache direct-mapped de 64 Ko dont les lignes font 64 octets
Question:
les adresses doctet 87436 et 218500 sont elles en conflit dans le cache ?

Rponse:
Le cache contient 1024 lignes
Dabord on calcule les adresses de ligne
87436 = 1366 x 64 + 12
218500 = 3414 x 64 + 4

Puis on calcule la diffrence entre les adresses de ligne


3414 - 1366 = 2048

Cest un multiple de 1024 ces 2 octets sont en conflit dans le cache

118

Exemple

Cache direct-mapped de 32 Ko, lignes de 64 octets

On suppose des matrices de 20 x 20 flottants


double prcision chacune

512 lignes

20 x 20 x 8 = 3200 octets par matrice, soit 50 ou


51 lignes de cache
A priori, il y a assez de place dans le cache pour les
3 matrices

for (i=0; i<20; i++)


for (j=0; j<20; j++) {
C[i][j] = 0 ;
for (k=0; k<20; k++)
C[i][j] += A[i][k] * B[k][j] ;
}

On suppose que les adresses des matrices sont


A = 70432 = 1100 x 64 + 32
B = 76448 = 1194 x 64 + 32
C = 106240 = 1660 x 64

Entres du cache utilises

1100 76 (mod 512) matrice A utilise les entres 76 126 (51 entres)
1194 170 (mod 512) matrice B utilise les entres 170 220 (51 entres)
1660 124 (mod 512) matrice C utilise les entres 124 173 (50 entres)
la matrice C est partiellement en conflit avec les matrices A et B

119

Comment liminer les conflit ?


Au niveau du programmeur
Proprit du cache direct-mapped: si les donnes (ou instructions) dun
programme sont situe lintrieur dune zone mmoire dont la taille
nexcde pas la taille du cache, il ny a pas de conflit dans le cache
direct-mapped
(en fait, pas toujours vrai lorsque index physique, cf. plus loin)

essayer de placer les donnes qui sont accdes ensemble des


adresses mmoire proches

Au niveau du matriel cache set-associatif


En anglais, set-associative associatif par ensembles
Au lieu davoir 1 seule entre possible dans le cache, chaque ligne en a
plusieurs
Cache N-way set-associatif (cache N voies) N entres possibles
Cache full-associatif N = nombre dentres du cache (toutes les
entres sont possibles)

Exemple: cache 2-way set-associatif


cache 2-way SA de 32 Ko, lignes de 64 octets, adresses 32 bits
les 2 parties du cache sont accds en parallle, la comparaison des
tags dtermine dans quelle voie se trouve la ligne demande
18 bits

set

way 0

way 1

256 256
tags lignes
18 de 64
bits octets

256 256
tags lignes
18 de 64
bits octets

=?

=?

hit/miss ?

120

121

Exemple

Cache 2-way SA de 32 Ko, lignes de 64 octets


512 lignes total, 256 lignes par way (= 256 sets)

A,B,C matrices 20 x 20 x 8 octets


Adresses matrices
A = 70432 = 1100 x 64 + 32
B = 76448 = 1194 x 64 + 32
C = 106240 = 1660 x 64

for (i=0; i<20; i++)


for (j=0; j<20; j++) {
C[i][j] = 0 ;
for (k=0; k<20; k++)
C[i][j] += A[i][k] * B[k][j] ;
}

Entres du cache utilises

1100 76 (mod 256) matrice A utilise les sets 76 126


1194 170 (mod 256) matrice B utilise les sets 170 220
1660 124 (mod 256) matrice C utilise les sets 124 173
il ny a pas de conflit car chaque set contient 2 entres

122

Politique de remplacement
Comme il y a plusieurs entres possibles dans un cache setassociative, il faut en choisir une politique de remplacement

Exemples de politiques de remplacement


RANDOM vince une ligne au hasard dans le set
LRU (Least-Recently Used) vince la ligne qui na pas t utilise
depuis le temps le plus long

123

Politique LRU

Politique assez efficace la plupart du temps


Si une ligne na pas t utilise depuis longtemps, il est probable quelle ne sera
pas rutilise avant longtemps
Peut-tre mme quelle est morte

Politique LRU facile mettre en uvre sur un cache 2-way SA


1 bit MRU par set (MRU = most recently used)
Lorsquune ligne est accde, mettre le bit 0 si la ligne est dans le way 0, 1 si
la ligne est dans le way 1
Quand on doit choisir une ligne vincer dun set, on choisit le way 0 si le bit
MRU vaut 1 et le way 1 si le bit MRU vaut 0

Quand lassociativit est leve, la mise en uvre de LRU est complexe


il existe des approximations de LRU qui sont plus simples implmenter

124

Quelle degr dassociativit ?

La complexit matrielle dun cache N-way set-associatif augmente avec N

La latence du cache augmente avec N

Le nombre de conflits de cache dcrot (en gnral) quand N augmente

Exemple
Cache L1 32 Ko, 4-way set-associatif
On veut que la latence ne dpasse pas quelques cycles donc, en gnral, faible degr
dassociativit

Cache L2 2 Mo, 8-way set-associatif

En gnral, les caches de niveau 2 et 3 ont une associativit leve (8 32


ways)
Un miss qui ncessite daccder la mmoire principale peut coter
plusieurs centaines de cycles de latence

125

Pour les caches L2 et L3 dassociativit leve, on prfre en gnral accder le cache en


2 temps: dabord les tags, puis les lignes

Exemple: N way, 2n entres par way

Cela augmente la latence mais simplifie le matriel (et diminue la consommation lectrique)

n
n
tags

tags

tags

way

way

way

N-1

=?

=?

=?

n + log 2 ( N )
lignes

active si hit

hit/miss?

126

LRU: exemple
Cache 4-way set-associatif LRU
Supposons que les lignes A,B,C,D,E aient le mme index cache (= mme set)
Ligne
accde
A
B
C
D
E
A
E
B

Set
avant
DBCA
DBCA
DBCA
DBCA
DBCA
DBCE
DACE
DACE

Hit /
miss ?
hit
hit
hit
hit
miss
miss
hit
miss

Ligne
vince

A
B
C

Set
aprs
DBCA
DBCA
DBCA
DBCA
DBCE
DACE
DACE
DABE

127

LRU et distance de rutilisation

Soit une liste ordonne comportant toutes les lignes qui ont le mme index cache
Quand on accde une ligne, on lenlve de la liste et on la remet en tte de liste

Distance de rutilisation dune ligne = position de la ligne dans la liste

Les lignes proches de la tte de liste sont celles qui ont t accdes rcemment
Tte de liste distance = 1
distance de rutilisation = nombre de lignes distinctes ayant t accdes depuis la dernire
utilisation de la ligne courante

Quand la distance est plus grande que lassociativit du set, cest un miss, sinon cest un
hit
Lignes accdes

A B C D E A E B A D

Distance de rutilisation
Set 4 way LRU

5 2 5 3 4
M H M H H

Attention, cas pathologique: accs circulaire sur un nombre de lignes suprieur


lassociativit 100% de miss
ABCDE ABCDE ABCDE ABCDE ABCDE 100 % de miss sur 1 set 4 way

128

Mise en uvre de LRU (N-way)

LRU exact: plusieurs mthodes


Implmenter la liste
ligne LRU est celle en dernire position
Ncessite log2(N) bits pour chaque entre du cache

Matrice de bits

Bit M(i,j) vaut 1 si entre i du set utilise plus rcemment quentre j


Accs entre i met tous les M(i,j) 1 et tous les M(j,i) 0
LRU = entre dont la ligne est remplie de 1 et la colonne remplie de 0
Ncessite N x (N-1) / 2 bits par set

LRU approximatif
NMRU (Not the Most Recently Used)
vince une ligne au hasard sauf celle qui a t accde le plus rcemment
Log2(N) bits par set

LRU en arbre
1 bit MRU par paire dentres dans le set, 1 bit MRU pour chaque paire de paires, 1 bit
MRU pour chaque paire de paires de paires, etc
N-1 bits par set

129

Analyser la localit: exemple


for (i=0; i<N; i++)

Remarque: en C, A[i][j] et A[i][j+1] sont


adjacents en mmoire

for (j=0; j<N; j++)


for (k=0; k<N; k++)
C[i][j] += A[i][k] * B[k][j] ;

j
k

En fait, on peut utiliser un registre pour c[i][j]

ligne

Matrice A bonne localit


ligne rutilise dans plusieurs itrations
conscutives de k

Matrice C trs bonne localit

Matrice B mauvaise localit


N lignes diffrentes de B sont accdes pour
chaque itration j

ligne

130

On peut parfois amliorer la localit


for (i=0; i<N; i++)

On a permut les boucles for k et for j

for (k=0; k<N; k++)


for (j=0; j<N; j++)
C[i][j] += A[i][k] * B[k][j] ;

Matrice A trs bonne localit


On peut utiliser un registre pour A[i][k]

k
ligne

Lignes rutilises dans plusieurs itrations


conscutives de j

k
i

ligne

Matrice B et C bonne localit

On a amlior la localit !
Exprience sur un Pentium 4 avec N=1000
Premier programme 11.7 secondes
Nouveau programme 3.1 secondes

131

Bande passante

Bande passante = nombre moyen doctets par unit de temps que peut dlivrer
une mmoire, un cache, ou un bus

Important pour la performance. Exemple:

Bus mmoire de 64 bits de largeur, cycle bus = 8 cycles processeur


bande passante = 1 octet par cycle processeur
Ligne de cache 64 octets 64 cycles processeur
Exemple: latence mmoire de 100 cycles 100 cycles pour le premier octet + 3 cycles
pour obtenir une donne complte de 4 octets, + 60 cycles pour le reste de la ligne
Thoriquement, le pipeline dinstructions pourrait redmarrer sans attendre que le reste
de la ligne soit stock dans le cache miss non bloquant
Mais si un 2me miss de cache se produit moins de 60 cycles aprs le redmarrage du
pipeline, il faudra attendre de toute manire

La bande passante doit tre suffisante pour supporter des rafales de miss de
cache

Bande passante: exemple

Hypothses:
Cache write-back
On suppose que les donnes ne sont pas dans le cache
On suppose miss bloquant le pipeline est bloqu tant que la
ligne entire nest pas dans le cache
Sur un miss, on suppose quil faut 100 cycles pour que le
premier octet arrive

Boucle: STORE f1,i2


i2 i2 ADD 8
i3 i3 SUB 1
BNZ i3, Boucle

Quelle est la performance en fonction de la bande passante


X (octets/cycle) ?
Ligne de 64 octets contient 8 flottants DP 1 miss toutes les 8
itrations
on perd 99+64/X cycles toutes les 8 itrations (32 inst)

Lit instruction
Dcode
Lit registres

Cycles par instruction

CPI =

Excute
Accs cache
crit registre

132

X=1 octet/cycle CPI = 6


X=2 octets/cycle CPI = 5
X=4 octets/cycle CPI = 4.5
X=64 octets/cycle CPI ~ 4

64
X 4+ 2
32
X

32 + 99 +

La performance
augmente

133

Miss non bloquant

On aimerait pouvoir redmarrer le pipeline sans attendre que la ligne soit compltement
crite dans le cache.

Commencer par charger la donne demande par le LOAD/STORE


Puis charger le reste de la ligne au rythme autoris par la bande passante
Exemple: LOAD demande octets 12 15 dans une ligne de 64 octets. On commence par charger
les octets 12 15, puis on charge les octets 16 63, puis les octets 0 11

On a un registre de miss dans lequel on crit ladresse de la ligne en cours de


chargement, ainsi que des bits de prsence associs chaque octet de la ligne
Ligne 64 octets 64 bits de prsence
On pourrait aussi associer 1 bit un groupes de plusieurs octets

Au dbut du miss, mettre tous les bits 0. Quand octet arrive, met bit correspondant 1

Si un LOAD/STORE essaie daccder la ligne en cours de chargement (hit on miss),


regarder les bits de prsence pour savoir si le chargement de la donne est termin

Quand tous les bits de prsence sont 1, la ligne est valide et on peut librer le registre
de miss

134

Miss non bloquant: exemple

Boucle: STORE f1,i2


i2 i2 ADD 8
i3 i3 SUB 1
BNZ i3, Boucle

Lit instruction
Dcode
Lit registres

Hypothses:
Cache write-back
On suppose que les donnes ne sont pas dans le cache
Miss non bloquant
Sur un miss, on suppose quil faut 100 cycles pour que le
premier octet arrive, les octets suivants arrivent par adresse
croissante dabord

Bande passante X (octets/cycle)


Cycle T: miss premier octet de la ligne pipeline bloqu
Cycle T+99+8/X pipeline redmarre
Cycle T+99+8/X+4 STORE hit ou hit on miss
Cycle T+99+16/X flottant suivant charg

Si X 2 octets/cycle, 16/X (8/X+4)

Excute
CPI =

Accs cache

32 + (99 +

8
8
) + 7 ( 4)
2
X
X
3.2 +
32
X

crit registre

X=1 octet/cycle CPI = 5.2


X=2 octets/cycle CPI = 4.2

135

Quelle taille de ligne ?

Petites lignes
on ne met sur le bus et dans le cache que des donnes utiles la plupart du temps
la place occupe par les tags augmente
Pour une taille de cache donne, diviser par 2 la taille de ligne multiplie par 2 le nombre de
lignes dans le cache et donc le nombre de tags

Grandes lignes
Si bonne localit spatiale, effet de prchargement bnfique
Si localit spatiale insuffisante, espace du cache mal utilis ( trous dans les
lignes, augmentation des conflits) et bande passante gaspille

On choisit une taille de ligne ni trop grande ni trop petite


64 octets est un choix frquent
Caches L1 parfois petites lignes (exemple 32 octets)
Caches L2 et L3 parfois grandes lignes (exemple 256 octets)

136

Taille de ligne: exemple 1


Boucle: STORE f1,i2

i2 i2 ADD 8
i3 i3 SUB 1
BNZ i3, Boucle

Lit registres

crit registre

Quel est le dbit dinstruction en fonction de la


taille de ligne L ?

L
4 + 99 + L
198
CPI = 8
= 3+
L
L
4
8

Dcode

Accs cache

Cache write back


Donnes pas dans le cache
Miss bloquant
Latence miss: 100 cycles pour premier octet
Bande passante 1 octet/cycle

miss toutes les L/8 itration pipeline bloqu


pendant 99 + L cycles

Lit instruction

Excute

Hypothses:

L = 128 CPI = 4.5


L = 64 CPI = 6
L = 32 CPI = 9

La performance
diminue

137

Taille de ligne: exemple 2


i0 8000

Boucle: STORE f1,i2


i2 i2 ADD i0
i3 i3 SUB 1
BNZ i3, Boucle

Hypothses:

Quel est la performance en fonction de la taille


de ligne L ?
miss chaque itration pipeline bloqu
pendant 99 + L cycles

Lit instruction
Dcode

CPI =

Lit registres
Excute
Accs cache

Cache write back


Donnes pas dans le cache
Miss bloquant
Latence miss: 100 cycles pour premier octet
Bande passante 1 octet/cycle

4 + 99 + L
26 + L
4

L = 64 CPI = 90
L= 32 CPI = 58
L=16 CPI = 42

La performance
augmente

crit registre

138

Cache write-back et bande passante

Cache write-back permet de rduire le dbit dcriture vers le cache L2


quand on crit plusieurs fois de suite dans la mme donne
Exemple: C[i][j] += A[i][k] * B[k][j]

Les critures se font lviction dune ligne on utilise pleinement la


largeur des bus
Exemple: quand une donne de 64 bits passe sur un bus 128 bits, la moiti du
bus est inutilise

cache write-back intressant quand la bande passante est limite

Les caches L2 et L3 sont gnralement write-back

139

Latence des critures ?

La latence dune criture, est-ce important ?

Du point de vue de la performance, il y a une diffrence fondamentale entre


les LOAD et les STORE: on a en gnral besoin que le LOAD soit termin
pour pouvoir continuer travailler on veut que la latence du LOAD soit la
plus faible possible
Pour un STORE, on nest pas oblig de faire lcriture immdiatement
Sur un hit en criture dans un cache L1 write-back, le pipeline ne se bloque
pas

Et pourtant, lcriture nest pas compltement termine puisque lorsque la ligne


de cache sera vince du cache L1, on consommera ce moment l de la
bande passante cause de cette criture

Question: doit-on bloquer le pipeline lorsquon crit dans un cache L1 writethrough ?


ce nest pas souhaitable

140

Tampon dcritures

Lorsquon crit dans un cache L1 write-through, quil y ait un hit ou un miss en


criture dans le L1, le pipeline dinstructions ne se bloque pas lcriture vers le
cache L2 est faite par un mcanisme indpendant du pipeline dinstructions
Les caches write-through sont gnralement associs un tampon dcritures = minicache write-back entre les caches L1 et L2
Contient seulement quelques entres (exemple: 4 STORE) suffisamment petit pour tre
full-associatif
on peut grouper les STORE des adresses adjacentes pour exploiter la largeur du bus

Un STORE crit simultanment dans le cache L1 (sil y a un hit) et dans le tampon


dcritures
Sil ny a pas de hit dans le tampon dcritures, on cre une entre pour cette criture
Lorsque le tampon est plein, on fait des critures dans le cache L2 pour faire de la place
dans le tampon

Lorsquun LOAD accde le cache L1 et quil y a un miss, on doit regarder dans le


tampon dcritures en cas de hit dans le tampon, la ligne manquante doit tre mise
jour avant son chargement dans le L1

Les caches write-back sont en gnral galement associs un tampon dcritures


Une ligne dirty vince du cache est mise dans le tampon
La ligne est crite dans le niveau de cache suivant lorsque le tampon est plein

141

Hirarchie mmoire
tampon

IL1

tampon

tampon

L2

Mmoire
principale
L3

DL1

Arbitrage bande passante:


lectures donnes ont priorit sur lectures instructions
Lectures on priorit sur critures sauf si tampon dcritures plein
Lorsque pas de miss lecture en cours, utiliser bande passante disponible pour
vider les tampons dcritures

142

Mmoire virtuelle mmoire physique

Les adresses manipules par le programmeur sont des adresses virtuelles

La mmoire physique (DRAM) est beaucoup plus petite que la mmoire virtuelle
Une partie du contenu de la mmoire virtuelle est stocke sur disque
Il faut un mcanisme permettant, partir dune adresse virtuelle, de savoir si
ladresse est mappe en DRAM ou bien sur disque

Exemple: adresses virtuelles sur 64 bits

Si elle est mappe en DRAM, if faut un mcanisme de transformation de ladresse


virtuelle en adresse physique
Si elle est sur disque, il faut aller ly chercher
disque

Mmoire virtuelle

Mcanisme
de gestion
mmoire

DRAM

143

Pagination

Lespace mmoire est divis en pages


Exemple: page de 4 Ko
DRAM
Mmoire
virtuelle
processus B

Mmoire
virtuelle
processus A

Il faut traduire le numro de page virtuelle en numro de page physique table des
pages stocke en mmoire
Si la page demande nest pas en mmoire physique, il faut rcuprer la page sur
disque et mettre jour la table des pages dfaut de page
Pnalit dfaut de page trs grande !
Latence dun accs disque (alatoire) se mesure en millisecondes (dpend de la vitesse de
rotation du disque. Exemple: 5 ms)
Processeur 2 Ghz cycle dhorloge 0.5 ns latence disque = plusieurs millions de cycles !

144

Table des pages

La table des pages est stocke en mmoire et gre par le systme


dexploitation (OS)

Plusieurs organisations possibles pour la table des pages


Table inverse: une entre par page physique table de hachage
Une entre par page virtuelle utilise

DRAM de 2 Go, page de 4 Ko 512k pages

Table potentiellement trs grande (252 pages virtuelles de 4k) mais en pratique une
grande partie de la mmoire virtuelle nest pas utilise

plusieurs niveaux de tables


Partie A de ladresse virtuelle dsigne entre dans table premier niveau, laquelle
donne pointeur vers table second niveau
Partie B de ladresse virtuelle dsigne entre dans table second niveau, laquelle
donne pointeur vers table troisime niveau
Partie C de ladresse virtuelle dsigne entre dans table troisime niveau, laquelle
donne numro de page physique
(ou 4me niveau, etc)

La table des pages peut tre elle-mme soumise la pagination

145

TLB

Comme la table des pages se trouve en mmoire, chaque accs mmoire du


programme ncessite plusieurs accs mmoire
Cest--dire plusieurs accs cache si la partie de la table des pages dont on a besoin se
trouve dans le cache

TLB (Translation Lookaside Buffer) petite SRAM sur la puce contenant les
correspondances page virtuelle/page physique pour les pages accdes rcemment
= cache de traduction dadresse
Tag = numro page virtuelle, entre donne numro page physique (+ infos supplmentaires)

Miss TLB
Un miss TLB dclenche une exception (do lintrt des interruptions prcises)
LOS (ou le microcode) accde la table des pages plusieurs cycles de pnalit
LOS (ou le microcode) met la traduction manquante dans le TLB et relance le programme
interrompu

Exemple: Pentium 4, pages 4 Ko


TLB dinstructions 128 pages, 4-way set-associatif
TLB de donnes 64 pages, full-associatif

Il peut y avoir plusieurs niveaux de TLB


Petit TLB L1, gros TLB L2

146

TLB: exemple

Pages de 4 Ko 12 bits doffset page


Adresses virtuelles sur 64 bits
Adresses physique sur 32 bits

52 bits

12 bits

Adresse virtuelle

12 bits

Adresse physique

No page virtuelle

TLB
No page physique
20 bits

147

Mmoire virtuelle et caches

Accde-t-on aux caches avec ladresse virtuelle ou ladresse physique ?

Cache adresses virtuelles


Avantage: on naccde au TLB que sur un miss
Inconvnients:
Problme des synonymes : pages logiques distinctes mappes sur la mme
page physique (exemple: process fork) si jcris dans une ligne de cache, je dois
mettre jour ou invalider les lignes synonymes
Gros tags

Cache adresses physiques


Avantage: pas de problme de synonymes
Inconvnient: il faut accder au TLB avant daccder au cache

Cache L1 instructions adresse virtuelle ou index virtuel/tag physique


Cache L1 donnes index virtuel / tag physique
Caches L2,L3 index et tag physiques

148

Index virtuel / tag physique

Principe:
Les tags stocks dans le cache correspondent aux adresse physiques
La structure du cache est telle que les bits utiliss pour dbuter laccs au cache ne
sont pas changs par la traduction dadresse
On commence donc accder ( indexer ) le cache avec les bits dadresse virtuelle
En parallle, on lit le TLB et on obtient ladresse physique
Une fois quon a le tag et ladresse physique, on peut faire la comparaison et savoir si
on a un hit ou un miss

Cest strictement quivalent un cache adresse physique, mais avec la rapidit


daccs dun cache adresse virtuelle trs intressant pour cache L1

Attention: ce nest possible que si certaines conditions sur la taille de page, la


taille du cache et son associativit sont vrifies
Voir exemple transparent suivant

Exemple

149

Soit un cache de 64 Ko 2-way set-associatif avec des lignes de 64 octets


Les pages mmoire font 4 Ko
Question 1: ce cache peut-il tre index virtuellement et tagg physiquement ?
Dabord, on identifie les bits dadresse utiliss pour indexer le cache
Le cache comporte 64 Ko / 64 = 1024 lignes. Comme le cache est 2-way SA, il y a 1024/2 =
512 sets (= 512 lignes par way). Il faut donc log2(512) = 9 bits pour indexer le cache
Comme les bits 0 5 de ladresse correspondent loffset lintrieur de la ligne, les 9 bits
utiliss pour lindexage sont les 9 bits suivants, cest--dire les bit 6 14

On regarde si ces bits dindex sont altrs par la traduction dadresse


Page de 4 Ko les 12 bits de poids faible sont inchangs par la traduction dadresse
les bits 12 14 de ladresse virtuelle sont a priori diffrents de ceux de ladresse physique

Le cache ne peut pas tre index virtuellement / tagg physiquement

Question 2: comment modifier le cache pour que ce soit possible ?


Solution 1: augmenter lassociativit 16-way (64 sets, 6 bits dindex) ou plus
Solution 2: diminuer la taille du cache 8 Ko (64 sets, 6 bits dindex) ou moins
Solution 3: combiner solutions 1 et 2

Question 3: peut-on rsoudre le problme sans changer le cache ?


oui, en augmentant la taille des pages (ici, pages de 32 Ko ou plus)

150

La prdiction de branchement

Prdicteur de branchement: rappel


PC

151

Prdicteur de
branchement

Lit instruction

La plupart des programmes ont un comportement


rptitif

On stocke dans une mmoire microarchitecturale


(dans le processeur) des informations sur les
instructions de contrle et leur comportement
pass prdicteur de branchements

On utilise ces informations pour effectuer les


sauts spculativement

En cas de mauvaise prdiction, on vide le pipeline


et on corrige le PC

Dcode

Lit registres

Excute

crit registre

152

Classification des branchements


Conditionnel / inconditionnel
Branchement conditionnel
Le saut se fait seulement si la condition est vraie (on dit que le branchement est
pris )
Si la condition est fausse, le branchement est non pris (pc pc+4)
Lvaluation de la condition est gnralement faite ltage dexcution

Branchement inconditionnel (ou saut)


On saute systmatiquement (pc adresse cible du saut)

Immdiat / indirect
Branchement immdiat
Adresse cible connue la compilation, peut tre calcule au dcodage
Exemple: branchement relatif adresse cible = PC + CONST

Branchement indirect
Adresse cible lue dans un registre connue seulement ltage dexcution

153

Utilisation des branchements en C

Branchement conditionnel immdiat


Boucles for et while
If else
Switch case

Branchement inconditionnel (saut) immdiat

Branchement inconditionnel (saut) indirect

Boucles
if else (sortie)
Break, continue
Appel de fonction

Retour de fonction
Pointeur de fonction
Switch case
Saut longue distance

Branchement conditionnel indirect


Nexiste pas dans tous les jeux dinstructions

154

Exemple
Calcul de valeur min sur des valeurs alatoires x[i]
int minx = x[0];

Branchement conditionnel de boucle

for (n=1; n<1000; n++)


If (x[n] < minx)
minx = x[n];

Branchement conditionnel de test

Branchement de boucle: non pris la dernire itration seulement


Branchement de test: une chance sur N pour que la Nme valeur soit le min des
N premires valeurs

1re itration: une chance sur 2 dtre non pris


2me itration: une chance sur 3
3eme itration: une chance sur 4

999me itration: une chance sur 1000

1 1 1
1
+ + +L+
6.5
2 3 4
1000

155

Autres exemples
adresse = (int *) malloc(sizeof(int)) ;"

Branchement
toujours pris
(normalement !)

Branchement
toujours non pris
lorsque b=256

if (adresse == NULL) "


erreur("mmoire pleine") ;"

int modulo(int a,int b) {"


if ((b & (b -1))==0) "
return(a & (b -1)); "
return(a % b);"
}"
#include "ma_librairie.h""
#define HASH_INDEX(v) modulo(v,256)"

156

Branchements et pipeline

Lit instruction
Dcode

Adresse cible des branchements immdiats

Lit registres
Excute
Accs cache
crit registre

Condition des branchements conditionnels


Adresse cible des branchements indirects

157

Pnalit de mauvaise prdiction


Branchement
inconditionnel
immdiat
1 bulle
petite
pnalit

Prdit PC
Lit instruction
Dcode
Lit registres
Excute
Accs cache

Branchement
conditionnel ou
indirect
3 bulles
grande
pnalit

crit registre

Le nombre de bulles sur une mauvaise prdiction dpend de la longueur du pipeline


Exemple: Intel Core 14 cycles de pnalit de mauvaise prdiction sur les
branchements conditionnels

158

Prdiction de branchement: principe

Table de prdiction accde en mme temps que la cache dinstructions

Table de prdiction de branchement permet de


Prdire qu ladresse indique par le compteur de programme se trouve une
instruction de branchement
Identifier le type de branchement
branchement conditionnel ou inconditionnel ?
appel de fonction ?
retour de fonction ?

Prdire ladresse de saut


Pour les branchements conditionnels, prdire si le branchement est pris (1) ou non
pris (0)

En cas de mauvaise prdiction, profiter du temps de rparation du pipeline


pour corriger linformation stocke dans la table de prdiction

159

Table de prdiction
Est-ce un branchement ?
Si oui :
info table = (type, 0/1,adresse saut)
PC F (PC, info table)
Si non :
PC PC + 4

PC suivant

Prdit PC

PC courant

Lit instruction
Dcode

corrige si mauvaise
prdiction

Lit registres
Excute
Accs cache
crit registre

Cache de branchements
BTB (Branch Target Buffer)
tags

cibles de saut

PC

=?
adresse de saut
Un branchement est
dtect, il est prdit pris

160

Utilisation du BTB

On stocke dans le BTB les branchements inconditionnels et les branchements


conditionnels pris

La prsence dune entre dans le BTB entrane un saut ladresse indique


par le BTB

En labsence dune entre BTB, on suppose que linstruction nest pas un


branchement ou est un branchement conditionnel non pris

En cas de mauvaise prdiction, corriger le BTB

161

si on a manqu un saut, rajouter lentre manquante


si on a prdit un branchement pris alors quen ralit il est non pris, enlever
lentre du BTB
si on a saut une mauvaise adresse, corriger ladresse de saut dans le BTB

162

BTB: remarques

Parfois appel autrement


BTAC (branch target address cache), next-fetch predictor, etc

Taille: a dpend
Petit sur certains processeurs (exemple: 8 entres)
Gros sur dautres (exemple: 2k entres)

Associativit: a dpend
de 1 (direct-mapped) 4

Prdiction comme la dernire fois ( = on prdit le mme comportement que


la dernire fois)
fonctionne bien pour les branchements inconditionnels immdiats
le comportement est toujours le mme

pas trs performant pour les branchements conditionnels et les retours de fonction

163

Exemple
Prdiction comme la dernire fois

direction
effective
1
1
1
0
1
1
1
0
1

prdiction
1
1
1
0
1
1
1
0

for (i=0;i<1000;i++) {"


for (j=0;j<4;j++) {"
: corps de la boucle"

mal prdit
mal prdit

}"
}"

mal prdit
mal prdit
Branchement mal prdit la premire et
la dernire itration de la boucle j

Petit exercice

On considre un branchement conditionnel ayant une probabilit p dtre pris.

Quelle serait la probabilit de mauvaise prdiction si la prdiction tait toujours


non pris ?
Pmp = p

En prdisant comme la dernire fois , quelle est la probabilit de mauvaise


prdiction ?
Pmp = p (1 p ) + (1 p ) p = 2 p (1 p )
Exemple: p = 0.1 Pmp = 0.18

164

165

Compteur 2 bits
Prdit non pris

Prdit pris

p
n

1
n

p
2

Incrmente lorsque le branchement est pris


Dcrmente lorsque le branchement est non pris
Prdit pris si valeur 2

166

Prdiction avec compteur 2 bits

compteur
direction compteur
avant prdiction effective
aprs

2
3
3
3
2
3
3
3
2

1
1
1
1
1
1
1
1
1

1
1
1
0
1
1
1
0
1

3
3
3
2
3
3
3
2
3

for (i=0;i<1000;i++) {"


for (j=0;j<4;j++) {"
: corps de la boucle"
}"
}"

Ici, on fait 2 fois moins de mauvaises


prdictions quen prdisant comme la
dernire fois

167

Compteur 2 bits : mise en uvre

Premire possibilit : rajouter un compteur 2 bits dans chaque entre du BTB


on bnficie de lassociativit du BTB
si un branchement est prdit pris mais quen ralit il est non pris, on dcrmente le
compteur et on laisse lentre dans le BTB

Deuxime possibilit : stocker les compteurs 2 bits dans une table spcifique,
la BHT (branch history table)

pas de tags, juste 2 bits dans chaque entre


la BHT peut comporter plus dentres que le BTB
Exemple: IBM POWER6 BHT de 16k compteurs 2 bits
quand le compteur passe de ltat 2 ltat 1, lentre dans le BTB nest plus
vraiment ncessaire
BTB set associatif: quand un branchement (pris) a besoin dune entre BTB et que les
entres du set sont toutes dj occupes, on prend de prfrence une entre dont le
compteur 2 bits vaut 0 ou 1

168

BHT
Aussi appel prdicteur bimodal

PC du branchement conditionnel
bits 2 n+1

0 0

n
BHT
Rem: comme il ny a pas de tags, on
ne peut pas avoir dassociativit.

Interfrences entre branchements.


Problme analogue aux conflits
dans un cache direct-mapped

2n compteurs 2
bits

Le bit de poids fort du


compteur donne la prdiction

169

BHT 2 SRAM
bp
bp

00

mp
01

mp

mp
10

mp

11

Le bit de poids fort du compteur ne change


que sur une mauvaise prdiction (mp)

Sur une bonne prdiction (bp), la prdiction


est renforce (tat 0 ou 3)

bp

bp

prdiction 0/1

Prdit PC
Lit instruction

corrige si
mauvaise
prdiction

Dcode
Lit registres
Excute
Accs cache
crit registre

renforce la
prdiction si
elle est bonne

Bit de poids
fort du
compteur 2
bits

Bit de poids
faible du
compteur 2
bits

170

Prdire les retours de fonction

Utiliser une pile dadresses de retour


pour chaque CALL excut, on empile ladresse de retour
pour prdire un retour, au lieu dutiliser ladresse fournie par le BTB, dpiler
ladresse au sommet de la pile et sauter cette adresse

Peut tre utilis aussi pour prdire les retours dinterruptions et dexceptions

Si pile suffisamment profonde, 100 % de bonne prdiction


Taille typique: 8 32 entres
ne pas abuser de la rcursivit

Seule difficult ventuelle identifier les appels et les retours


utiliser le code-op (ex. appel = saut avec lien)
le compilateur peut aider le processeur
exemple: hint (Alpha), jr r31 (MIPS) ...

171

Pile dadresses de retour: exemple


Met adresse retour dans pile et
incrmente pointeur de sommet
I1: r1 CALL @I92

@I2

I92:
I95: r2 CALL @I123

Met adresse retour dans pile et


incrmente pointeur de sommet

@I96
@I2

I123:

I127: JUMP r2

Dcrmente pointeur et saute


ladresse prdite par la pile

@I96
@I2

I96:

I99: JUMP r1

Dcrmente pointeur et saute


ladresse prdite par la pile
@I2

I2:

172

Rsum: BTB / BHT / pile


Prdicteur de branchement
PC suivant
BTB

BHT

Prdit PC
Lit instruction

PC
pile

Dcode
Lit registres
Excute

Si retour de fonction saute ladresse prdite par la pile


Sinon saute ladresse prdite par le BTB

Accs cache
crit registre

Lit en parallle le BTB, la BHT et la pile de retour


Si branchement inconditionnel

Si branchement conditionnel
BHT prdit la direction du branchement
Si prdit pris , saute ladresse prdite par le BTB
Sinon PC PC+4

173

Do viennent les mauvaises prdictions ?

Branchements inconditionnels immdiats ( petite pnalit)


BTB: miss de dmarrage, miss de capacit, miss de conflit

Retours de fonctions
Pile pas assez profonde (exemple: appels rcursifs)
Retour de fonction pas orthodoxe (a peut arriver )

Branchements conditionnels et branchements inconditionnels indirects (sauf


retours de fonctions)
Certains branchements sont intrinsquement difficiles prdire
comportement plus ou moins alatoire
Limitations de lalgorithme de prdiction
Interfrences entre branchements dans la BHT
Miss du BTB pour les indirects

174

Petit exercice

Soit un processeur dont la pnalit de mauvaise prdiction vaut 14 cycles

Soit un programme dont 1 instruction sur 10 excutes est un branchement conditionnel

Combien les mauvaises prdictions cotent-elle en cycles par instruction (CPI) si le


prdicteur de branchement prdit correctement 90% des branchements conditionnels ?
1 branchement conditionnel sur 10 est mal prdit il y a une mauvaise prdiction toutes les 100
instructions on perd 14 cycles toutes les 100 instructions
Les mauvaises prdictions cotent 14/100 = 0.14 en CPI

Et si on prdit correctement 95% des branchements conditionnels ?


On perd 14 cycles toutes les 200 instructions
Les mauvaises prdictions cotent 0.07 en CPI

Passer de 90% de bonne prdiction 95% de bonne prdiction veut dire quon divise par 2
le nombre de mauvaises prdictions

175

Prdiction 2 niveaux dhistorique


Invent au dbut des annes 90 pour les branchements conditionnels
Utilis dans les processeurs actuels
Permet datteindre des taux de bonne prdiction souvent suprieurs
95%, parfois proches de 100%
Principe: exploiter les corrlations entre branchements et les motifs
rptitifs

176

Corrlation: exemple 1
for (i=0; i<10; i++)
for (j=0; j<10; j++)

p 9n
p 9n

x = x + a[i][j];

pppppppppnppppppppppnppp
Le mme motif se rpte

Aprs avoir observ plusieurs fois le mme motif, on peut en dduire quil faut
prdire le branchement de la boucle j non pris aprs quil a t pris 9 fois
conscutivement

177

Corrlation: exemple 2
B1: If (cond1 && cond2) {}

Si le 1er branchement est non pris (cond1 et cond2 vrais),


on est sr que le 2me branchement sera non pris
(cond1 vrai)

B2: If (cond1) {}

cond1 cond2

cond1 &&
cond2

Supposons les 4 cas quiprobables (alatoires)


La probabilit de bien prdire B2 en se basant
uniquement sur son comportement pass est de 50%

Supposons maintenant quon connaisse le rsultat de


B1 au moment de prdire B2
Si B1 est non pris (probabilit 1/4), prdire B2 non pris
100% de bonnes prdictions
Si B1 est pris (probabilit 3/4), prdire B2 pris 2/3 de
bonnes prdictions

La probabilit de bien prdire B2 vaut (1/4)x(1) +


(3/4)x(2/3) = 75%

Petit exercice
cond1 et cond2 alatoires (50% vrai/faux)
Quelle version est la plus intressante du point de vue de la prdiction de branchement ?

B1: If (cond1 && cond2) {}

B2: if (cond1) {}

B2: If (cond1) {}

B1: If (cond1 && cond2) {}

Prdit B1 pris 75 % bien prdit

Prdit B2 pris 50 % bien prdit

Prdit B2 non pris si B1 est non


pris, sinon prdit pris 75 % bien
prdit

Prdit B1 pris 75 % bien prdit

La connaissance de B1 permet
damliorer la prdiction de B2

La connaissance de B2 ne permet pas


damliorer la prdiction de B1

178

179

Prdicteur historique global

Forme la plus rpandue de prdicteur 2 niveaux dhistorique

Premier niveau dhistorique = historique global


Historique global = registre dcalage de h bits qui contient les directions prises
par les h derniers branchements rencontrs

Deuxime niveau dhistorique


chaque branchement utilise plusieurs compteurs 2 bits, stocks dans une PHT
(pattern history table)
utiliser le PC et la valeur dhistorique global pour slectionner le compteur dans la
PHT

Remarque: une PHT, cest comme une BHT sauf que la BHT nest accde
quavec le PC alors que la PHT est aussi accde avec lhistorique global

180

Prdicteur gshare
PC du branchement conditionnel
0 0

gshare prdicteur historique global


parmi les plus simples

Index PHT = XOR entre les bits dadresse et


les h bits dhistorique global

Chaque prdiction est insre dans


lhistorique global pour prdire les
branchements suivants

En cas de mauvaise prdiction, on corrige le


compteur 2 bits dans la PHT et on rpare
lhistorique global

n-h
xor

historique

PHT
2n compteurs 2
bits
Insre prdiction
dans historique

181

Gshare: exemple

B1: If (cond1 && cond2) {}


B2: If (cond1) {}

4 bits du
PC de B2

0111

PHT de 16 entres
Historique global de 1 bit
Direction de B1 = d

d=0
XOR

historique

d=1

100 % B2 0
66 % B2 1

Le nombre dentres utilises par chaque branchement augmente gnralement


avec la longueur dhistorique global

182

Problme des interfrences


La taille de la PHT est limite
Il peut arriver que deux branchements diffrents utilisent une mme
entre de la PHT: cest une interfrence
Problme analogue aux miss dans les caches
Attention au paradoxe de lanniversaire
23 personnes dans une mme pice 50% de chance quil y ait au
moins 2 personnes ftant leur anniversaire le mme jour

183

Petite exprience
PHT de 256 entres
Tirer 20 entres au hasard
Rpter lexprience plusieurs fois :
Conflit en moyenne une fois sur 2

Et pourtant, il y a largement la place !

Longueur dhistorique global ?

Le nombre dinterfrences est lev quand


la taille de la PHT est petite
le programme est gros et comporte beaucoup de branchements conditionnels
lhistorique global est long

Pour un programme donn, il existe gnralement une longueur dhistorique


global optimale
Gros programmes historique pas trop long sinon interfrences
Sur programmes trs gros, simple BHT parfois meilleure que gshare

Certains programmes ont des corrlations entre branchement qui ne peuvent tre
exploites quavec un historique global long

for (i=0; i<10; i++)


for (j=0; J<10; j++)

p 9n
p 9n

pppppppppnppppppppppnppp

x = x + a[i][j];

Prdit non-pris lorsque


historique = pppppppppp

Besoin de 10 bits dhistorique pour prdire boucle j correctement


PHT (au moins) de 1024 compteurs 2 bits

184

185

Interfrences destructives / neutres


Branchements de biais opposs

branchement A

interfrence destructive
PHT

branchement B

branchement A

Gnre des mauvaises prdictions

Branchements de mme biais

interfrence neutre
PHT

branchement B

indolore

186

Prdicteur agree
historique
global

PC

2 branchements A et B
A toujours non pris (0), B toujours pris (1)
Dans les 2 cas, le XOR de la direction avec la prdiction de
la BHT vaut 0
Si A et B utilisent un mme compteur de la PHT, cest une
interfrence neutre

XOR

PHT

XOR

prdiction

BHT

Une BHT + une PHT


Si le XOR de la direction du branchement avec la
prdiction de la BHT vaut 1, incrmenter le compteur
dans la PHT, sinon le dcrmenter
Diminue les interfrences destructives dans la PHT
Exemple

Au lieu dutiliser une BHT, on peut aussi rajouter un bit de


biais dans chaque entre BTB
Allouer une entre BTB pour chaque branchement, y compris
conditionnels non pris
Biais = direction prise la premire fois

Prdicteur agree tait utilis dans les processeurs HP/PA


Bit de biais tait un hint dans le jeu dinstructions

187

Prdicteur bimode
historique
global

PC

Une BHT plus une PHT

La PHT est divise en 2 parties

La prdiction de la BHT slectionne quelle partie


de la PHT donne la prdiction

Permet de rduire les interfrences destructives


dans la PHT

XOR

PHT
1

PHT
0

Les prdictions stockes dans la PHT 0 sont


majoritairement des prdictions non pris , celles
dans la PHT 1 des prdictions majoritairement
pris

BHT

prdiction

A peu prs quivalent prdicteur agree

Utilis dans les processeurs PA6T

188

Prdicteur hybride
historique
global

PC

mp

mp

mp

bp

bp

bp

bp

PHT

XOR

PHT

mp

BHT

mta

PHT

BHT

BHT

bp

bp

bp

bp

mp

mp

mp

mp

Quand les prdictions de la PHT et de la BHT


sont identiques (bonnes ou mauvaises), la
mta-prdiction ne change pas

prdiction

Utilis dans les processeurs Alpha 21264,


IBM POWER, AMD,

189

Prdicteur hybride: avantages

Quand le programme est gros, la BHT subit moins dinterfrences que la PHT
Si un branchement est mal prdit par la PHT cause dinterfrences, le mta-prdicteur dsignera
la BHT comme prdicteur le plus fiable pour ce branchement

Les interfrences dans le mta-prdicteur sont majoritairement neutres


Effet ressemble prdicteur agree

La BHT se rchauffe plus vite que la PHT au dmarrage du programme ou lorsque 2


programmes sexcutent en temps partag

On peut avoir un historique global plus long quavec gshare, agree ou bimode

Variantes:
On peut indexer le mta-prdicteur avec des bits dhistorique global
Si la fonction dindex du mta-prdicteur est diffrente de celle de la PHT et de la BHT, on peut ne
pas corriger un prdicteur (BHT ou PHT) si la prdiction a t fournie par lautre prdicteur et
quelle tait correcte

190

Prdicteur YAGS
historique
global

PC

XOR

minitags

PHT

BHT

Chaque entre de la PHT contient un


compteur 2 bits et un mini-tag

Exemple: mini-tag = 6 bits dadresse

Si hit, la PHT fournit la prdiction


Si miss, la BHT fournit la prdiction

Si miss et que la prdiction de la BHT est


correcte, on nalloue pas dentre dans la
PHT pour ce branchement
Permet de rserver lespace de la PHT pour
les branchements qui en ont vraiment besoin

=?

prdiction

Prdicteur de type YAGS utilis dans les


processeurs Intel Core

191

Prdicteur de branchement indirect

Pour les branchements indirects autres que retours de fonctions

Prdicteur historique global exploite les corrlations

Comme YAGS, sauf que


Au lieu davoir des compteurs 2 bits dans la PHT, on a des adresses cibles
Sur un miss de la PHT, cest le BTB qui fournit la prdiction

Comme YAGS, on nalloue une entre dans la PHT que lorsque le


branchement indirect est mal prdit par le BTB

Utilis dans les processeurs PA6T et Intel Core

192

Prdicteur de boucle

Prdicteur historique global narrive prdire correctement la sortie dune


boucle que lorsque celle-ci fait un petit nombre ditrations

Les processeurs Intel Core comporte un prdicteur spcialis pour les


boucles

Principe: dtecter les motifs du type 1111.11110


Avec un compteur 8 bits, on peut prdire correctement la sortie des boucles
faisant moins de 256 itrations

193

En rsum

Plus le pipeline dinstructions est long, plus le processeur aura intrt


avoir un prdicteur de branchement sophistiqu
Actuellement, les prdicteurs les plus sophistiqus se trouvent dans les
processeurs Intel BTB + pile + YAGS + boucles + indirects

Quand on programme avec un soucis de performance, on a rarement se


proccuper des branchements
La plupart des branchements sont bien prdits
Il peut arriver que les mauvaises prdictions de branchement dgradent la
performance de manire importante, mais il est de toute manire difficile de
savoir ce qui se passe exactement dans le prdicteur

194

Processeurs superscalaires

195

superscalaire

Processeur superscalaire = processeur pouvant dcoder plusieurs


instructions du mme thread par cycle (thread ~ programme)

Les processeurs gnralistes actuels sont tous superscalaires

Cela implique que lIPC (instructions/cycle) peut tre suprieur 1

Lit instruction
I5

Dcode
I2

Sur lexemple ci-contre,


ltage de dcodage traite
au plus une instruction
par cycle ce nest pas
un pipeline superscalaire

I4

Lit registres INT

Lit registres FP

I3

Excute

Excute FP

(accs cache)

Excute FP

crit registre INT

(Excute FP)

tampon

I1

(Excute FP)
crit registre FP

196

Paralllisme dinstructions

Le paralllisme dinstructions est une notion qualitative caractrisant la


proportion dinstructions dun programme pouvoir tre excutes en
parallle
Remarque: la technique du pipeline est une forme dexploitation du paralllisme
dinstruction

Si un programme comporte un nombre relativement important de suites


dinstructions conscutives indpendantes, alors son paralllisme
dinstructions est lev

Si des instructions excutes conscutivement sont dpendantes et


forment une seule longue chane de dpendance, le paralllisme
dinstructions est faible

Un processeur superscalaire nest intressant pour la performance que si


les programmes comportent du paralllisme dinstructions

197

Diffrents types de superscalaires

In-order
Les instructions sont lances lexcution dans lordre squentiel, cest--dire lordre du
programme

Out-of-order
Les instructions peuvent tre lances dans un ordre diffrent de lordre squentiel

Degr 2,3,4,
Un processeur superscalaire de degr 2 peut dcoder 2 instructions par cycle
Un processeur superscalaire de degr 3 peut dcoder 3 instructions par cycle
Etc

La complexit matrielle augmente avec le degr superscalaire


Un superscalaire de degr 4 est plus complexe quun superscalaire de degr 2, qui plus
complexe quun processeur non-superscalaire (degr 1)
Le degr superscalaire des processeurs existants ne dpasse pas 6
Limiteurs principaux: nombre de ports sur les registres et complexit du mcanisme de
bypass

198

Le plus simple: in-order de degr 2


Doubler la largeur du pipeline

Lire 2 instructions par cycle (PC PC+8)


Dcoder 2 instructions par cycle (il faut 2 dcodeurs)
Lecture registres: 4 ports de lecture
Excution: dupliquer les oprateurs
Cache de donnes: 2 ports de lecture/criture
Pareil pour le TLB de donnes

criture registres: 2 ports dcriture

En pratique, on ne double que les ressources qui sont utilises frquemment


Exemple: 1 seul diviseur au lieu de 2
Cache de donnes: 1 seul port de lecture/criture

199

Exemple
Cycle N

Cycle N+1 Cycle N+2

Lit instruction

I3 / I4

I3 / I4

I5 / I6

Dcode

I1 / I2

I2

I3 / I4

Lit registres

I2

I1
I1

Excute
(accs cache)
crit registre

Si au dcodage on trouve que linstruction I2 dpend de linstruction I1, on


retarde le lancement de I2 et on gle le pipeline en amont du dcodage

200

Exercice

Processeur superscalaire in-order de degr 2


On suppose quil y a une probabilit p = quune instruction dpende de linstruction
prcdente
Lorsquon dtecte ce cas au dcodage, on retarde le lancement de la deuxime instruction
de 1 cycle, et on gle le pipeline en amont du dcodage

Question: quel est le dbit maximum du pipeline en instructions par cycle (IPC) ?

Rponse:
En moyenne, 1+p cycles par groupe de 2 instructions
IPC= 2 / (1+p) = 1.33

Le dbit rel dun processeur superscalaire est gnralement infrieur sont degr
superscalaire
Miss de cache, load-use, branchement mal prdit, dpendances RAW, etc

201

Dcaler les groupements ?


Cycle N

Cycle N+1 Cycle N+2

Lit instruction

I3 / I4

I5 / I4

I7 / I6

Dcode

I1 / I2

I3 / I2

I5 / I4

I1

I3 / I2

Lit registres

I1

Excute
(accs cache)
crit registre

Si I2 dpend de I1 et si I3 ne dpend pas de I2, lancer I2 et I3 ensemble


Exemple: probabilit p= quune instruction dpende de linstruction prcdente
la probabilit de lancer 2 instructions simultanment vaut 1-p
IPC = p + 2(1-p) = 1.5

202

Tampon de chargement: exemple


I1 I2 I3 I4 I5 I6 I7 I8 I9 I10

Lit instruction

I3

I4

I5

I6

I7

I4

Dcode
Lit registres
Excute
(accs cache)
crit registre

I1

I2

I3
I1

I2

I8

I9 I10

I6

I7

I8

I5

I4

I5

I6

I7

I8

I3

I2

I4

I5

I6

I1

I3
I1

I4

I2
I3
I1

I2

203

Remarques

Rle du compilateur
viter de mettre 2 instructions dpendantes lune la suite de lautre
viter de mettre lune la suite de lautre 2 instructions utilisant une ressource non
duplique
Exemple: si un seul port sur le cache de donnes, intercaler si possible une
instruction entre des LOAD/STORE conscutifs

Si on agrandit le tampon de chargement, il est possible de charger plus de 2


instructions par cycle permet dabsorber les bulles dues aux miss du BTB
et, dans une certaine mesure, les miss du cache dinstructions

Attention aux dpendances WAW


Cas de 2 instructions excutes en parallle et crivant dans le mme registre

204

Cache de donnes double ports

Souhaitable pour degr superscalaire suprieur 2

On nimplmente que trs rarement de vritables caches double ports


tant donne la taille dun cache compare celle dun banc de registres, limpact dun vritable
2me port est trop coteux en complexit matrielle, surface de silicium, nergie consomme,
latence daccs,

faux double port plusieurs mthodes

Mthode possible: dupliquer le cache


Les 2 copies contiennent exactement les mme donnes
Permet 2 LOAD des adresses arbitraires en parallle, mais un seul STORE (on crit dans les 2
copies simultanment)

Autre mthode: diviser la SRAM du cache en plusieurs bancs


Exemple 2 bancs: banc pour les adresses paires et banc pour les adresses impaires on peut
accder simultanment une adresse paire et une adresse impaire
Ncessite un mcanisme darbitrage en cas de conflit de banc
Conflits ne peuvent tre dtect quaprs le calcul dadresse complique la mise en oeuvre

205

Lecture des instructions

Contrairement au cache de donnes, pas besoin de plusieurs ports sur le cache


dinstructions

On lit chaque cycle un groupe dinstructions adjacentes en mmoire


Taille du groupe peut tre plus grand que degr superscalaire
Exemple: groupe = demi-ligne de cache

Tampon de chargement peut contenir un ou plusieurs groupes


Si pas de place dans le tampon pour mettre le groupe, diffrer de 1 ou plusieurs cycles (pendant
ce temps le pipeline dinstructions continue de travailler)

Quand il y a la place dans le tampon, lire le groupe correspondant au PC courant et


prdire le PC suivant
Le prdicteur de branchement peut tre index avec ladresse du point dentre dans le groupe
Si le groupe ne contient pas de branchement, ou des branchements toujours non pris, cest un
miss BTB: PC PC + taille groupe
En cas de hit BTB, le BTB et les diffrents prdicteurs permettent didentifier les instructions
valides dans le groupe et de prdire le PC suivant

206

Prchargement (prefetch)

Quand la localit spatiale est bonne, les miss de cache sont plus ou moins prvisibles
Exemple: miss la ligne X, puis la ligne X+1, puis X+2, etc

Mcanisme matriel de prchargement (prefetch) des lignes de cache


Met dans le cache les lignes dont le programme a besoin avant quil ne les demande
But: viter les miss de cache

Implment sur la plupart des processeurs gnralistes actuels (in-order et out-oforder)

Cache dinstructions (IL1) laisser le prdicteur de branchement prendre de lavance


sur le pipeline dinstructions
Mettre les PC gnrs par le prdicteur dans une file
Plus efficace si les accs L2 sont pipelins (les miss IL1 sont pipelins)

Ne prcharger que si la ligne nest pas dj dans le cache


Le mcanisme de prchargement doit avoir accs aux tags du cache

207

Prchargement (suite)

Bas sur lobservation des requtes cache rcentes


cache index physique on stoppe gnralement le prefetch ds quon arrive une frontire de
page physique

Exemple: prefetch dans cache L2


Maintenir une petite table de prefetch indexe avec le numro de page
Chaque entre de la table contient les adresses des 2 dernires lignes X et Y de la page
demandes au cache L2 (demandes inities par des LOAD)
Si cache L1 demande une ligne Z telle que (Z-Y)=(Y-X), alors le mcanisme prcharge dans L2
la ligne Z+N*(Y-X)
Plus la latence dun miss L2 est grande, plus N doit tre grand afin que la ligne arrive dans le
cache temps

Les requtes de prefetch consomment de la bande passante


Les vraies requtes ont priorit sur les requtes de prefetch

Superscalaire in-order: exemple

Superscalaire in-order degr 2, toutes ressources dupliques


Mcanisme de chargement parfait (prdicteur de branchement parfait, tampon de
chargement toujours plein)
100 % hit dans cache de donnes
1er tage dexcution
Cycle 1:

double y[1000] ;

I1

Cycle 2:

double x = 0 ;

Cycle 3:

I2

Cycle 4:

I4

Cycle 5:

I5

I1

Cycle 7:

I2

I3

I3: i1 i1 ADD 8

Cycle 8:

I4

I4: i2 i2 SUB 1

Cycle 9:

I5

for (i=0; i<1000; i++)


x = x + y[i] ;

I1: f2 LOAD i1
I2: f1 f1 FADD f2

+1 cycle
+3 cycles

I3

Cycle 6:

I1

I5: BNZ i2,-4


4 cycles par lment

208

209

Changer lordre des instruction ?

1er tage dexcution

I1:

i2 i2 SUB 1

I2:

i1 i1 ADD 8

I3:

f1 f1 FADD f2

I4:

f2 LOAD i1

Cycle 3:

I5:

BNZ i2,-4

Cycle 4:

Cycle 1:

I1

I2

Cycle 2:

I3

I4

I5

I1

+3

I2

Cycle 5:
Cycle 6:

I3

I4

Cycle 7:

I5

I1

Cycle 8:

I2

Cycle 9:

Parfois a marche, mais pas ici: toujours 4 cycles par lment


cest le FADD qui limite la performance

210

Drouler la boucle pour trouver plus de paralllisme ?

1er tage dexcution

I1: f2 LOAD i1
I2: f3 LOAD i1+8
I3: f4 LOAD i1+16
I4: i2 i2 SUB 3
I5: i1 i1 ADD 24
I6: f5 f1 FADD f2
I7: f6 f3 FADD f4

Cycle 1:

I1

I2

Cycle 2:

I3

I4

Cycle 3:

I5

I6

Cycle 4:

I7

Cycle 5:
Cycle 6:
Cycle 7:

I8: f1 f5 FADD f6

Cycle 8:

I8

I9

I9: BNZ i2,-8

Cycle 9:

I1

I2

8 cycles pour 3 lments, soit 2.7 cycles par lment

211

Sur cet exemple, si on veut exploiter les ressources au maximum, il faut


augmenter le paralllisme dinstructions
1er tage dexcution

I1: f2 LOAD i1
I2: f3 LOAD i1+8
I3: f4 LOAD i1+16
I4: i2 i2 SUB 3
I5: i1 i1 ADD 24
I6: f1 f1 FADD f2
I7: f5 f5 FADD f3

Cycle 1:

I1

I2

Cycle 2:

I3

I4

Cycle 3:

I5

I6

Cycle 4:

I7

I8

Cycle 5:

I9

I1

Cycle 6:

I2

I3

Cycle 7:

I4

I5

I8: f6 f6 FADD f4

Cycle 8:

I6

I7

I9: BNZ i2,-8

Cycle 9:

I8

I9

f5 f5 FADD f6
f1 f1 FADD f5

9 cycles pour 6 lments, soit 1.5 cycles par lment

212

In-order de degr suprieur 2

Exemples:
Alpha 21164 (1995) in-order degr 4
IBM POWER6 (2007) in-order degr 5
Intel Itanium in-order degr 6

Degr 4 registres 8 ports de lecture et 4 ports dcriture

Cache de donnes 2 ports de lecture souhaitables

En pratique, seules les ALUs sont compltement rpliques


ALU = unit arithmtique et logique (ADD,SUB,OR,XOR,AND, )

Ncessite un compilateur trs performant capable d exposer le paralllisme


dinstructions

213

Exposer le paralllisme dinstructions

Le compilateur peut amliorer la performance en augmentant le paralllisme


dinstructions exploitable par le processeur

Mais il y a des contraintes


Respecter la smantique du programme tant donnes les options spcifies la
compilation
Le compilateur na pas ncessairement le droit de supposer lassociativit des oprations en
virgule flottante, sauf si ce droit est accord explicitement par une option de compilation
Attention aux instructions susceptibles de dclencher une exception

Ne pas augmenter le nombre dinstructions excutes


Une optimisation qui augmente de manire significative le nombre dinstructions
excutes est une optimisation douteuse

Attention la localit des accs mmoire


Le nombre de registres disponibles est limit
Les branchements limitent les possibilits de bouger les instructions
Certaines dpendances mmoire sont impossibles dtecter la compilation

214

Bloc de base

Bloc de base = instructions conscutives en mmoire avec un seul point dentre et


un seul point de sortie
Chaque instruction du programme appartient un bloc de base et un seul
Un bloc de base ne peut contenir quun seul branchement, la fin du bloc
La destination dun saut ne peut se faire quau dbut dun bloc de base
Certains blocs de base ne se terminent pas sur un branchement mais parce que
linstruction suivante en mmoire est la destination potentielle dun saut

Exemple

boucle: r2 r5 SHL 2
r1 r0 ADD r2

do {

r2 LOAD r1

if (x[n]==0) {
a = a + 1;
}
n = n-1;
} while (n != 0);

Bloc de base 1

BNZ r2, suite


r3 r3 ADD 1
suite:

r5 r5 SUB 1
BNZ r5, boucle

Bloc de base 2
Bloc de base 3

Scheduling dinstructions

Le compilateur peut changer lordre des instructions au sein dun bloc de base
pour essayer daugmenter le paralllisme dinstruction

Contraintes

215

Les branchements ne bougent pas et restent la fin de leurs blocs


Il faut respecter les dpendances RAW
Le nombre de registres disponibles est limit
Il faut respecter lordre des LOAD et STORE
Sauf si on est capable de dterminer la compilation que les adresses sont diffrentes.
Exemple: STORE R1,R2+1 et R1 LOAD R2+3

Trouver un schedule optimal connaissant les dpendances entre instructions et


les caractristiques de la microarchitecture (latences des oprations, nombre de
ressources, ) est NP-difficile dans le cas gnral on utilise des heuristiques

216

Droulage de boucle
Loop unrolling

for (i=0; i<100; i++)

for (i=0; i<100; i+=2) {


a[i] = b[i] + c[i];

a[i] = b[i] + c[i];

a[i+1] = b[i+1] + c[i+1];


}

Permet de former des blocs de base plus grands et ainsi dexposer (en gnral) plus
de paralllisme dinstructions

Le facteur de droulage optimal dpend des latences des instructions


Des instructions de grande latence peuvent ncessiter un grand facteur de droulage pour
obtenir de bonnes performances

217

Pipeline logiciel
register int x = b[0]+c[0];
register int y = b[1];
register int z = c[1];

for (i=0; i<100; i++) {

for (i=0; i<100; i++) {

a[i] = b[i] + c[i];


}

a[i] = x;
x = y + z;
y = b[i+2];
z = c[i+2];
}

On essaye daugmenter le paralllisme dans le bloc de base en pipelinant les


itrations

218

Inlining de fonction
int add (int x, int y) {

int add (int x, int y) {

return x + y ;

return x + y ;

for (i=0; i<100; i++)

for (i=0; i<100; i++)

a[i] = add(b[i],c[i]);

a[i] = b[i] + c[i];

Permet dliminer le cot de lappel de fonction

Permet de former des blocs de base plus grands

219

Sortir les branchements des boucles


(si possible)

for (i=0; i<100; i++) {

if (x==0) {

if (x==0) {

for (i=0; i<100; i++)


a[i] = b[i] + c[i];

a[i] = b[i] + c[i];

} else {

} else {
a[i] = b[i];

for (i=0; i<100; i++)

a[i] = b[i];

Loop unswitching

220

Attention la taille du programme

Les transformations augmentant la taille des blocs de base (droulage,


inlining, ) augmentent gnralement la taille du programme

Pas un problme tant que le programme tient dans le cache dinstructions

Peut devenir un problme si la taille du programme dpasse la taille des


caches
gcc O2 napplique ni inlining ni droulage de boucle

Il vaut mieux nappliquer ces transformations quaux parties du programme


qui contribuent de manire importante au temps dexcution total
Exemple: boucles les plus internes

221

Exploiter les proprits des oprations


(cest gnralement le programmeur qui doit le faire explicitement)

(ax + b)(x 2 ) + (cx + d)

((ax + b)x + c)x + d


a

*
+

*
c

*
+

*
+

Maintenant il y a du paralllisme, le compilateur na


plus qu faire un bon schedule

222

Le compilateur a-t-il le droit de faire cette transformation automatiquement ?

typedef double mat [1000][1000];

typedef double mat [1000][1000];

void mulmat(mat a, mat b, mat c, int n)

void mulmat(mat a, mat b, mat c, int n)

{
int i,j,k;

int i,j,k;

for (i=0; i<n; i++)

for (i=0; i<n; i++) {

for (j=0; j<n; j++) {

for (j=0; j<n; j++) c[i][j] = 0

c[i][j] = 0;

for (k=0; k<n; k++)

for (k=0; k<n; k++)

for (j=0; j<n; j++)

c[i][j] += a[i][k] * b[k][j];


}

c[i][j] += a[i][k] * b[k][j];

}
}

Le comportement de mulmat(a,b,a,100) est-il le mme dans les 2 cas ?

223

Le compilateur a-t-il le droit de faire cette transformation automatiquement ?

void truc(int n) {

void truc(int n) {

int i

int i

for (i=0; i<n; i++) {

if ((100 % n)==0) {
for (i=0; i<n; i++)

if ((100 % n)==0) {

a[i] = 0 ;

a[i] = 0 ;

} else {

} else {

for (i=0; i<n; i++)

a[i] = 1 ;

a[i] = 1;

}
}

que se passe-t-il si n=0 ?

224

Excution conditionnelle
if (x >= 0 ) {
a++;
}

Certains jeux dinstructions offrent le MOV conditionnel


Le jeu dinstructions Intel IA-64 gnralise le principe en
offrant la prdication (= excution conditionnelle)

avec un branchement

MOV conditionnel

BLZ r1,4
r2 LOAD r0
r2 r2 ADD 1
STORE r2, r0

r4 SGE r1
r2 LOAD r0
r3 r2 ADD 1
If r4: r2 MOV r3
STORE r2, r0

prdication

r4 SGE r1
If r4: r2 LOAD r0
If r4: r2 r2 ADD 1
If r4: STORE r2, r0

Si le prdicat est faux, linstruction se comporte comme un NOP

225

If r4: r2 MOV r3

Lit instruction
Dcode
Lit registres
Excute

Lit r3 et r4
Si r4 = 0, transforme linstruction en NOP

Accs cache
crit registre

Soit NOP, soit crit r3 dans r2

Lexcution conditionnelle transforme les dpendances de contrle en dpendances


de donne
Intressant sur processeur superscalaire in-order permet de crer des blocs de
base plus grands
Attention: cela augmente le nombre dinstructions dcodes

226

Superscalaire out-of-order (OoO)

Les instructions sont toujours lues et dcodes dans lordre squentiel, mais elles peuvent
tre lances lexcution dans un ordre diffrent de lordre squentiel

Superscalaire OoO partiel


Diffrentes formes possibles. Exemple: pipeline INT et pipeline FP, lit et dcode 2
instructions par cycle lance 2 instruction simultanment si lune INT et lautre FP
Rle du compilateur important

Superscalaire OoO complet capable de lancer simultanment et dans le


dsordre plusieurs instructions INT et/ou plusieurs instructions FP

Tous les processeurs Intel x86 depuis le Pentium Pro ( P6 , 1995)


Tous les processeurs AMD depuis le K5 (1996)
Processeurs PowerPC et IBM POWER (sauf le rcent POWER6, qui est OoO partiel)
Annes 90: Alpha 21264, MIPS R10000, HP-PA

Mise en uvre matrielle trs complexe

227

Fentre dinstructions
Lit instruction
Dcode
Renomme reg.
Dans lordre squentiel
Fentre
dinstructions /
scheduler
Dans le dsordre

Instructions en attente
dexcution

Mais en respectant les dpendances RAW

Lit registres
Excute
Accs cache
crit registre

228

Renommage de registre

Dans un superscalaire OoO (complet), on saffranchit des dpendances WAR et WAW


grce au renommage de registre

Pourquoi ?
Le nombre de registres offerts par le jeu dinstructions est limit
Quand il a besoin dun registre pour stocker une valeur, le compilateur utilise un registre
contenant une valeur morte cela cre des dpendance WAR et WAW
Si on soblige respecter les dpendances WAR et WAW, cela limite les possibilits
dexcution dans le dsordre

Le renommage de registre est un mcanisme matriel permettant davoir un plus grand


nombre de registres microarchitecturaux (registres physiques) que de registres
architecturaux

un instant donn, chaque instruction dans la fentre dinstructions crit dans un


registre physique distinct

229

Renommage: exemple
I1: p9 LOAD p2+p8
I2: p10 LOAD p3+p8

for (i=0; i<N; i++)


c[i] = a[i] + b[i] ;

I3: p11 ADD p9, p10


I4: STORE p11, p4+p8
I5: p12 p8 SUB 8

I1: r5 LOAD r2+r1


I2: r6 LOAD r3+r1
I3: r5 ADD r5, r6

I6: BGZ p12, @I1

La boucle est droule


lintrieur de la fentre
dinstructions

I1: p13 LOAD p2+p12


I2: p14 LOAD p3+p12

I4: STORE r5, r4+r1


I5: r1 r1 SUB 8
I6: BGZ r1, @I1

I3: p15 ADD p13, p14


I4: STORE p15, p4+p12

Le renommage a supprim
les dpendances WAR et
WAW

I5: p16 p12 SUB 8


I6: BGZ p16, @I1

230

Chemin critique
Chemin critique = chemin le plus long dans
le graphe de dpendance de donnes
Sur lexemple, il y a une seule instruction sur
le chemin critique, linstruction I5

I5
I6

I1

I3

Quand il y a suffisamment de ressources, cest


la dure totale du chemin critique dans la fentre
dinstructions qui dtermine la performance
Exemple: on peut, sil y a suffisamment de
ressources, excuter en parallle linstruction I5
de litration n, I6,I1 et I2 de litration n-1, I3 de
litration n-3 et I4 de litration n-4

I2

I4
I5
I6

I1

condition que la fentre soit suffisamment


grande pour contenir simultanment les
instructions de 5 itrations conscutives

I2

I3
I4
I5

231

Taille de la fentre

Plus la fentre dinstructions est grande, plus le processeur a des chances de trouver
suffisamment de paralllisme dinstructions pour saturer ses ressources dexcution

Mais attention, la fentre dinstructions nest pas juste un tampon

La fentre dinstructions est associe un mcanisme appel scheduler dinstructions


Mcanisme matriel faisant le travail de schedule dinstructions que ferait le compilateur sur un
superscalaire in-order
Mcanisme trs complexe, trs difficile pipeliner, cest un point chaud du processeur

Comme chaque instruction de la fentre crit dans une registre physique distinct, le
nombre de registres physiques doit tre au moins gal la somme du nombre de
registres architecturaux et du nombre dentres de la fentre dinstructions
La SRAM des registres physiques est plus grande quune SRAM de registres architecturaux
difficile davoir beaucoup de ports si il y a un grand nombre de registres physiques

Sur les processeurs actuels, on sait faire des fentres de plusieurs dizaines dinstructions

232

Comme un rcipient perc

Le rcipient, cest la fentre dinstructions

La hauteur deau h, cest le nombre dinstructions


en attente dexcution

Le dbit auquel leau scoule du trou au fond du


rcipient, cest la performance (IPC: nombre
dinstructions excutes par cycle)

Le dbit avec lequel on remplit le rcipient, cest le


degr superscalaire (nombre dinstructions
dcodes par cycle)

Plus il y a dinstructions dans la fentre, plus la


performance est grande. Si on veut avoir le
maximum de performance, il faut que la fentre soit
pleine ncessite un bon prdicteur de
branchements

vitesse = 2 gh

233

Table de renommage de registre

Une fois les registres renomms, on peut excuter les instructions dans le
dsordre
attention aux load/store cependant (cf. plus loin dans le cours)

On utilise une table de renommage, consulte et mise jour au dcodage


maintient la correspondance entre registres architecturaux et registres
physiques
pour les oprandes: on accde la table avec les numros de registres
architecturaux, et elle renvoie les numros de registres physiques correspondant
la table est mise jour sur chaque instruction crivant dans un registre
on affecte un registre physique libre au registre architectural destination de linstruction

en cas de branchement mal prdit ou dexception, on rpare la table de


renommage

Exemple de table de renommage


1 entre par registre architectural, chaque entre contient un numro de registre
physique

234

Mise en uvre OoO


Mcanisme microarchitecturaux pour lexcution OoO

reorder buffer (ROB)


table de renommage
points de reprise (checkpoint)
scoreboard
Scheduler dinstructions

Points prciser
comment rparer ltat du processeur en cas de branchement mal
prdit ou dexception ?
quand un registre physique devient-il libre ?
Comment savoir quand une instruction est prte tre lance ?
comment traiter le cas des load/store ?

Reorder buffer (ROB)

235

Reorder buffer = tampon matrialisant la fentre dinstructions


Mmoire first-in first-out (file circulaire avec pointeur de tte et pointeur de queue)

Le ROB maintient lordre squentiel des instructions offre un support pour les
exceptions/interruptions prcises
Vue de lextrieur, lexcution parait squentielle

Les instructions sont insres dans le ROB au dcodage, dans lordre


squentiel, et sont retires du ROB aprs lexcution, dans lordre squentiel
la fin du pipeline, il y a un (ou plusieurs) tage de retirement pour traiter ce qui doit
tre fait dans lordre et/ou non spculativement
dtection des exceptions
critures mmoire
accs mmoire non-cachables (entres/sorties)

pour pouvoir tre retire, une instruction doit attendre que toutes les instructions plus
anciennes quelle soient excutes et retires

Exemple Intel Core: ROB de 96 entres (96 micro-ops)

236

Renommage: mise en oeuvre

Les processeurs OoO nutilisent pas tous la mme mthode de renommage


de registres

Certains processeurs utilisent le renommage permanent


Exemple: annes 90 MIPS R1000, Alpha 21264

Certains processeurs utilisent le renommage temporaire


Exemple: Intel Pentium Pro (1995), et aussi trs probablement tous les
processeurs x86 rcents (Intel et AMD)

237

Renommage permanent

1 banc de registres physiques (en fait, 2 bancs: 1 entier + 1 flottant)


on affecte un registre physique libre chaque nouvelle instruction crivant dans
un registre

Taille du banc de registres = nombre de registres architecturaux + nombres


dentres du ROB
ex. MIPS R10000: ROB 32 entres, 32 registres architecturaux entiers, 64
registres physiques entiers (pareil pour les flottants)

Un registre physique P associ au registre architectural R est libr


lorsquune nouvelle instruction I crit dans R et que cette instruction est
retire du ROB
lorsque I est renomme, le registre P est mis en attente de libration dans le ROB
lorsque I est retire, on est sr quon naura plus besoin de la valeur, et on peut en
toute scurit librer P, qui pourra tre rutilis par une autre instruction

238

Cycle des registres physiques


Numro de registre actif
En attente de libration

table de renommage
nouveau registre
physique

ancien registre
physique

reorder buffer

Numro de registre libre

file de registres libres

239

Renommage temporaire

1 banc de registres architecturaux + 1 banc de registres temporaires


le nombre de registres temporaires est gal au nombre dentres du ROB
En pratique, registres temporaires et ROB peuvent tre fusionns: 1 registre
temporaire dans chaque entre du ROB

Tant que linstruction est dans le ROB, registre physique = registre temporaire
lexcution, lcriture registre se fait dans le registre temporaire

Une fois linstruction retire du ROB, registre physique = registre architectural


la valeur stocke dans le registre temporaire est recopie dans le banc de registres
architecturaux, et le registre temporaire est libr en mme temps que lentre ROB
correspondante
une criture associative dans le ROB est ncessaire
si la lecture des registres est faite avant lentre dans le ROB, il faut, lexcution, propager
la valeur aux autres instructions dans le ROB
si la lecture des registres est faite au lancement de lexcution, il faut, au retirement, indiquer
aux instructions dans le ROB que la valeur se trouve dsormais dans le banc de registres
architecturaux

240

Excution spculative

Lexcution dans le dsordre conduit excuter certaines instructions


spculativement

Une mauvaise spculation se produit lorsquune instruction Y est excute avant


une instruction X qui prcde Y dans lordre squentiel et que linstruction X est
un branchement potentiellement mal prdit ou est une instruction susceptible de
dclencher une exception (par exemple un LOAD/STORE)

Sur une mauvaise spculation, il faut annuler les instructions qui se sont
excutes spculativement et annuler les modifications faites par ces instructions

Rparation sur exception

Les exceptions sont dclenches au retirement, quand linstruction fautive est la


plus vieille instruction dans le ROB

La table de renommage doit retrouver ltat quelle avait avant que linstruction
fautive soit dcode

Renommage permanent : plusieurs solutions

241

dpiler les registres physique du ROB et les remettre dans la table (MIPS R10000)
prend plusieurs cycles
maintenir une copie non-spculative de la table au retirement
points de reprise (checkpoint) sur chaque instruction (voir plus loin)

Renommage temporaire
ltat non spculatif est contenu dans le banc de registres architecturaux

Effacer les instructions spculatives (en particulier, vider le ROB), librer les
registres physiques spculativement allous, puis passer la main au systme

242

Rparation sur branchement mal prdit

Remettre la table de renommage dans ltat o elle tait avant quon dcode le
branchement et effacer les instructions qui ont t charges dans le processeur
aprs le branchement mal prdit

Solution 1: rparer la mauvaise prdiction au retirement du branchement, comme


pour les exceptions
entre lexcution dun branchement et son retirement, il peut scouler plusieurs cycles,
ce qui rallonge la pnalit de mauvaise prdiction

Solution 2: rparer la mauvaise prdiction ds que le branchement est excut


intressant condition dtre capable de rparer la mauvaise prdiction rapidement
solution: tablir des points de reprise (checkpoint)

Points de reprise (checkpoint)

243

Checkpoint = photographie de ltat du processeur avant de dcoder un


nouveau branchement
en particulier, tat de la table de renommage

Mmoire de checkpoint = mmoire microarchitecturale o on sauvegarde les


checkpoints
Pas ncessairement une mmoire centralise, les informations constituant le checkpoint
peuvent tre physiquement stockes des endroits divers

Si le branchement est mal prdit, le point de reprise associ est utilis pour
restaurer ltat du processeur

Le nombre de branchements dans le ROB est limit par le nombre de points de


reprise disponibles
ex. MIPS R10000: ROB 32 entres, 4 points de reprise
quand il ny a plus de points de reprise disponibles pour un nouveau branchement, on
suspend le dcodage et on attend quun branchement soit retir et libre un point de
reprise

244

Scoreboard

Pour savoir si les oprandes dune instruction sont disponibles, on consulte le


scoreboard

Scoreboard = table de bits de prsence (cf. transparent N 100)

Au lieu davoir un bit de prsence par registre architectural, on a un bit de


prsence par registre physique

Bit 1 indique que la valeur du registre physique est disponible

Quand une instruction est insre dans le ROB, le bit correspondant au registre
physique destination de linstruction est mis 0

Quand linstruction est excute, le bit est mis 1

245

Scheduler dinstructions

Scheduler = tampon + circuits pour slectionner les instructions excuter

En mme temps que linstruction est insre dans le ROB, une version
excutable de linstruction est insre dans le scheduler

Linstruction attend dans le scheduler jusqu ce que ses oprandes et les


ressources dexcution ncessaires soient disponibles
le scheduler rveille les instructions dont les oprandes sont prts et dcide quelles
instructions doivent tre lances sur quelles units
arbitrage entre instructions en cas de conflit de ressource

Une fois excute, linstruction est en gnral retire du scheduler dinstructions


sans attendre son retirement du ROB
Dans ce cas, le tampon du scheduler comporte moins dentres que le ROB

Sur certains processeurs, le ROB et le scheduler dinstructions sont confondus

246

Diffrents types de scheduler

Scheduler unifi

Un seul scheduler dans le processeur


Exemple Intel Core : un seul scheduler de 32 entres (32 micro-ops)
Exemple PA6T: un seul scheduler de 64 entres (confondu avec le ROB)

Scheduler par type dinstructions

Scheduler entier, scheduler flottant, scheduler mmoire

Scheduler par unit dexcution

aussi appel station de rservation


Larbitrage des ressources est simplifi

Exemple: AMD Opteron

1 scheduler flottant de 36 entres (36 micro-ops)

1 scheduler entier de 24 entres divis en 3 stations de 8 entres chacune

247

File de load/store

Les LOAD/STORE sont insrs simultanment dans le ROB et dans une file de
load/store dans lordre squentiel
File de load/store aussi appele Address Reorder Buffer, ou encore Memory Ordering
Buffer (MOB)

Les LOAD/STORE sont retirs de la file dans lordre squentiel


Rle de la file
tamponner les STORE : un store na le droit dcrire dans les caches ou en mmoire
quaprs quil a t retir du ROB les critures mmoire sont non spculatives
bypass mmoire: si un load essaie de lire une donne alors que le store qui crit cette
donne se trouve encore dans le tampon, possibilit dobtenir la valeur directement
sans attendre quelle soit crite dans le cache
La file de load/store assure le respect des dpendances mmoire

Exemples:
AMD Opteron file de load/store de 44 entres
PA6T file de load/store de 32 entres

Dpendances mmoire

Plusieurs solutions possibles pour forcer le respect des dpendances mmoire


Solution simple : ne lancer un LOAD que lorsque les adresses de tous les
STORE prcdant le LOAD (dans lordre squentiel) sont connues
On fait parfois attendre certains LOAD plus que ncessaire
On peut amliorer la performance si on autorise un STORE sexcuter partiellement
afin que ladresse soit calcule mme si la valeur crire nest pas encore disponible

Solution performante : LOAD spculatif avec mcanisme de rparation


Utilis sur Intel Core
Un load peut sexcuter spculativement sans attendre que les adresses de tous les
STORE prcdant le LOAD soient calcules
Lorsque ladresse dun STORE est calcule, on vrifie que ladresse est diffrente de
celles des LOAD excuts spculativement par rapport ce STORE
En cas de mauvaise spculation, on rpare ltat du processeur, comme sur une
mauvaise prdiction de branchement
Prdicteur de dpendance un LOAD qui a t excut trop tt sera excut non
spculativement la prochaine fois, afin dviter la pnalit de mauvaise spculation

248

249

Relance dinstructions (replay)

Pour de bonnes performances, le scheduler dinstructions est capable de lancer


des instructions sans attendre que les instructions dont elles dpendent soient
termines (on exploite le mcanisme de bypass)
schedule
Lit registres

I3: P4 LOAD P3

Exec/adresse

I2: P3 P2 ADD 4

Accs cache
criture reg.

I1: P2 LOAD P1

oups! ctait un miss

Si miss de cache: les instructions I1,I2,I3 devront tre relances (replay)


Elles sont marques non-excutes dans le scheduler
En fait, il nest pas si facile didentifier rapidement les instructions dpendant de I1 de
celles nen dpendant pas il est plus simple de relancer toutes les instructions
lances aprs I1

250

File de requtes de miss

File de miss = liste dadresses de ligne sur lesquelles on a fait un miss


Gnralisation de lide prsente dans le transparent N 133

Quand un LOAD/STORE fait un miss dans DL1, on met ladresse de la ligne


manquante dans la file de miss
Sauf si une entre dans la file a dj t alloue pour cette adresse par un LOAD/
STORE antrieur

La file de miss a son propre scheduler qui organise les accs au cache L2
Par exemple, premier arriv premier servi

Sur les processeurs modernes, les miss sont pipelins


les latences de miss se recouvrent partiellement
Exemple: sur le PA6T, on peut avoir jusqu 16 miss en cours simultanment

Quand une requte de miss est satisfaite (la ligne manquante a t charge
compltement ou partiellement dans le DL1), la file de miss doit informer le
scheduler que les LOAD dpendant des donnes charges peuvent tre
relancs

251

Exercice

Lignes de cache de 64 octets


Latence mmoire (DRAM) de L cycles
Bande passante mmoire de X octets/cycle
Calculer en fonction de L et X le nombre idal N dentres de la file de miss
La valeur de N idale est la plus petite valeur qui permet de saturer la bande passante
lorsque la file de miss est pleine
d=64/X

t+L

t+d

t+d+L

t+2d

t+2d+L

Rponse
Quand la bande passante est sature, on lance une requte tous les d=64/X cycles
Entre le dbut et la fin dun miss, on a le temps de lancer (L/d)-1 autres requtes
On a donc N=L/d = (L*X)/64 requtes simultanment en cours

252

Nombre de Requtes =

(cf. loi de Little)

Autre exemple:

Latence Bande Passante


Taille Ligne

Lignes 64 octets
Cache L2: pipelin, latence 16 cycles, bande passante 16 octets/cycle
Mmoire: pipeline, latence 128 cycles, bande passante 8 octets/cycle
Reorder buffer (ROB) de 64 instructions
On suppose quon fait dans le pire des cas 1 miss DL1 toutes les 8 instructions
On suppose que la file de miss est suffisamment grande
Question: sans considrer le prefetch, les bandes passantes sont elle
correctement dimensionnes ?

Rponse

Nombre maximum de requtes dans le ROB 64/8 = 8


Requtes pour saturer la bande passante L2 (16x16)/64 = 4
Requtes pour saturer la bande passante mmoire (128x8)/64 = 16
On peut saturer la bande passante L2
La bande passante mmoire est surdimensionne

253

Exemple: lIBM PowerPC 970FX

Technologie 90 nm
58 millions de transistors
Taille: 9.4 mm 7.1 mm
Frquence 2 GHz
Superscalaire degr 5, out-of-order
80 registres physiques entiers + 80 registres
physiques flottants
Ligne cache 128 octets
Cache IL1: 64 Ko, direct-mapped
Cache DL1: 32 Ko, 2-way set-associatif LRU
2 ports lecture 1 port criture
Cache L2: 512 Ko, 8 way set-associatif LRU
Prdicteur de branchement hybride (3x16k
entres)
Branchement mal prdit 12 cycles de
pnalit (minimum)

254

Superscalaire OoO: en rsum

Sur un processeur OoO, le scheduling dinstructions est fait par le matriel


Le scheduling dinstructions fait par le compilateur est en gnral inutile, sauf si
le compilateur travaille sur une fentre dinstructions plus grande que celle du
processeur (droulage de boucle, pipeline logiciel, inlining, )

Ce que le programmeur peut faire (ou essayer de faire) pour amliorer la


performance lorsque ncessaire
Augmenter le paralllisme dinstructions en diminuant la longueur du chemin
critique dans le graphe de dpendance de donnes
Bien utiliser les caches et le prefetch (localit temporelle, localit spatiale)
Lire la documentation du constructeur qui fournit des indications aux
programmeurs

255

La qute de la performance

Avant de se proccuper du processeur, il faut crire des algorithmes efficaces


dans le langage de programmation correspondant ses besoins

Ensuite, si on veut augmenter la performance, il faut utiliser un compilateur


performant et utiliser les bonnes options de compilation
Cela dpend de la plateforme processeur concerne

Si on veut encore plus de performance, alors on peut regarder les


caractristiques du processeur et les lacunes du compilateur

La plupart des processeurs comportent des compteurs de performance


donnent de multiples informations sur lexcution dun programme
Exemple: nombre dinstructions excutes, nombre de miss DL1, nombre de
branchements mal prdits, etc

256

Exemple:

Intel Pentium 4 (3 Ghz)


gcc 4.1.1
Niveau doptimisation O3
Temps dexcution 13.1 s

Intel Core 2 Duo (2.33 Ghz)


gcc 4.0.1
Niveau doptimisation O3
Temps dexcution 6.3 s

257

On augmente le paralllisme
dinstructions

Pentium 4
Temps dexcution 8.1 s

Core 2 Duo
Temps dexcution 3.0 s

258

Quand les donnes ne tiennent pas dans les


caches, il est parfois fructueux de regarder la
localit spatiale et/ou la localit temporelle

Core 2 Duo

gcc O3 liste.c o liste DPAS=1

gcc -O3 liste.c o liste DPAS=3

gcc -O3 liste.c o liste DPAS=5

Temps dexcution 1.1 s


Temps dexcution 3.2 s
Temps dexcution 5.2 s

gcc -O3 liste.c o liste DPAS=7


Temps dexcution 7.3 s

gcc O3 liste.c o liste DPAS=15


Temps dexcution 23.3 s

gcc O3 liste.c o liste DPAS=1001


Temps dexcution 50 s

259

Extensions SIMD

SIMD = single instruction multiple data


fait plusieurs oprations simultanment avec une seule instruction
Exemple: registres 128 bits 4 oprations FP simple prcision ou 2 oprations FP double
prcision

Exemple: Intel MMX, Intel SSE, SSE2, SSE3, etc.


X4

X3

X2

X1

Y4

Y3

Y2

Y1

op

op

op

op

X4 op Y4 X3 op Y3 X2 op Y2 X1 op Y1

Il faut que le compilateur soit capable de vectoriser le code automatiquement ou bien que
le programmeur utilise explicitement les instructions SIMD

260

Intel Core 2 Duo (2.33 Ghz), gcc 4.0.1


gcc O3 funroll-loops temps dexcution = 8.7 s
gcc O3 funroll-loops ftree-vectorize msse temps dexcution = 2.2 s
Le compilateur essaie de vectoriser le code automatiquement et si il russit il utilise
les instructions SIMD

261

On peut aussi vectoriser la main si on veut


gcc O3 funroll-loops msse temps dexcution = 2.4 s

262

Acclration locale / globale


Exemple: supposons quun programme passe 50% du temps dexcution dans
du calcul en virgule flottante, et supposons quon multiplie par 2 les
performances du calcul en virgule flottante. Quelle acclration globale peuton esprer ?

T =

T T 1 3
+ = T
2 2 2 4

acclration globale =

INT

INT

FP

FP

T 4
= = 1.33
T 3

263

Loi dAmdhal
T = temps total d' excution
F = fraction de l' excution qui est acclre
a = acclration locale
A = acclration globale

A=

T
T
=
T FT + (1 F )T
a

A=

1
F
+ (1 F )
a

A<

1
1 F

Lacclration globale ne peut pas dpasser 1/(1-F)

264

Le sens de la loi dAmdahl

Quand on veut amliorer les performances dun programme, on cherche


dabord savoir sur quelle partie du programme doit porter leffort en priorit
On utilise pour cela un outil de profilage (exemple: gprof) qui donne les contributions
de chaque fonction au temps dexcution total

Parfois, une fonction en particulier contribue de manire importante au temps


dexcution si on arrive acclrer cette fonction, on peut obtenir une
acclration globale significative
Mais attention, une fois quon a acclr une fonction particulire, une autre fonction
peut alors tre le contributeur principal au temps dexcution, et il faudra
ventuellement travailler sur cette autre fonction, etc.

Parfois, le temps dexcution total est plus ou moins galement rparti entre un
grand nombre de fonctions acclrer le programme la main va
demander un effort important
Dans ce cas, moins de trouver un meilleur compilateur, des options de compilation
plus efficaces, ou de disposer doutils faisant des optimisations automatiques de
code, il est difficile dobtenir des gains de performance importants

265

Consommation dnergie

266

Consommation dnergie / dissipation

Contrainte majeure (technique et conomique)

nergie (joules)
Cot (,$) important pour les data centers (exemple: Google)
Systmes aliments sur batterie
on veut maximiser le temps de dchargement de la batterie

Temprature
Temprature sur la puce: 85 100 C maxi pour un bon fonctionnement
Machine de bureau: cot de la machine, bruit du ventilateur
Systme portable: fortes contraintes gomtriques et de poids

Puissance (watts)
Amprage limit
Data centers: chauffement de la pice par effet de masse
limite le nombre de processeurs par pice

267

Consommation dynamique
Vdd

Effet Joule

i
0

v
C

Vdd

(Vdd v)idt = C (Vdd v)dv =


0

1
CVdd2
2

Lnergie dissipe par transition de bit ne


dpend que de la capacit et de la
tension

On peut diminuer lnergie consomme en rduisant lchelle de gravure


(C plus petit) et en rduisant la tension dalimentation
Attention: la latence dune porte logique est inversement proportionnelle la
diffrence entre Vdd et la tension de seuil du transistor
baisser Vdd augmente la latence des portes

268

Consommation statique

Les transistors ne sont pas des interrupteurs parfaits, il y a des courants de fuite

Une porte consomme de lnergie mme lorsquelle ne travaille pas (pas de


transition)

20 30 % de la consommation dans les processeurs des annes 2000


Cest la consommation principale dans les caches de niveau 2 et 3
Pour les caches L2 et L3, on peut utiliser des transistors un peu plus lents mais qui ont des
courants de fuite plus faibles
La situation sest amliore depuis lintroduction rcente de la techno 45 nm dIntel (high-K
dielectric)

Pour supprimer la consommation statique dans une partie de circuit, il faut la


dconnecter de lalimentation lectrique
Power gating
Attention: les mmoires perdent leur contenu

269

Puissance lectrique (watts)


dynamique

statique

P = a N C F Vdd2 + N I fuite Vdd

N = nombre de portes

a = fraction des portes qui changent dtat (01,10) par cycle dhorloge

C = capacit moyenne en sortie de porte

F = frquence dhorloge
Vdd = tension dalimentation

On peut diminuer N en faisant un circuit plus simple


On peut diminuer a en faisant du clock gating (cf. transparent suivant)
La rduction dchelle de gravure diminue C

Rduire la tension diminue la fois la consommation dynamique et la consommation


statique

Ifuite = courant de fuite moyen (augmente avec la temprature)

270

Clock gating

Quand un circuit nest pas utilis, il consomme de lnergie inutilement

Exemples:
certains programmes nutilisent pas les oprateurs virgule flottante
sur un accs mmoire long et bloquant, les oprateurs sont inutiliss durant laccs

Clock gating
Quand un circuit na pas t utilis depuis quelques cycles, le signal dhorloge est
dconnect automatiquement de ce circuit
supprime les transitions non voulues, consommation dynamique minimale
Le circuit se rveille la prochaine utilisation
Quasi immdiat, 1 ou 2 cycles

271

Tension / frquence

En thorie, grce au clock gating, un processeur non utilis pendant un certain temps
ne devrait pas consommer dnergie dynamique

En pratique, le clock gating seul ne permet pas dliminer compltement la


consommation dynamique dun processeur. De plus, il y a toujours la consommation
statique

Quand le processeur na pas t actif pendant un certain temps, on peut obtenir


une plus grande rduction de la consommation en diminuant simultanment la
tension dalimentation et la frquence dhorloge

permet de rduire la fois la consommation dynamique et la consommation


statique sans perdre le contenu des flip-flops et des diverses SRAMs (registres,
caches, TLBs, prdicteurs de branchement, )

Cependant, revenir la frquence maximum prend un certain temps


Exemple: PA6T 0.5 millisecondes pour revenir la frquence maximum

272

Temprature

Temprature nominale sur la puce = entre 85 et 100 C

Dure de vie du circuit dpend exponentiellement de la temprature


Un circuit en fonctionnement se dgrade avec le temps
Exemple: electromigration

Temprature leve augmente la vitesse de dgradation


+10 C dure de vie moyenne divise par 2

Le temps de rponse des circuits augmente avec la temprature


Augmentation de la rsistivit des matriaux (silicium,cuivre)

Les courants de fuite augmentent rapidement avec la temprature

273

La temprature sur la puce nest pas uniforme


jusqu plusieurs dizaines de C de diffrence dun point un autre

Exemple: IBM POWER4

274

Rgulation puissance / temprature

La puissance dissipe sur la puce processeur dpend de lapplication qui sexcute


Peut aller du simple au double, voire plus ( virus thermique)

La temprature dpend
De lapplication qui sexcute
De la vitesse du ventilateur
De la temprature ambiante

Capteurs de temprature et de puissance intgrs sur les processeurs rcents. Lorsque


risque de dpassement de la limite, le processeur est ralenti pour diminuer la
consommation
Les processeurs rcents comportent jusqu plusieurs dizaines de capteurs thermiques, placs
aux endroits potentiellement chauds

Diffrentes mthodes possibles:

Rduire la frquence dhorloge


Rduire la frquence dhorloge et la tension dalimentation
Clock gating global periodique (on/off/on/off)
tage de lecture dinstructions du pipeline travaille un cycle sur 2

275

Paralllisme et consommation
1 oprateur
Frquence F
Tension V

op

Dbit max = F op/s


Puissance dynamique ~ FV2

2 oprateurs
Frquence F/2 chacun
Tension V/2

op

op

Dbit max = 2(F/2)= F op/s


Puissance dynamique ~ 2(F/2)(V/2)2 = FV2/4

Le paralllisme permet dobtenir la mme performance en consommant moins de


puissance dynamique
condition quon baisse la tension et condition quil y ait du paralllisme
exploiter dans le programme

Haute performance / faible


consommation

Certaines applications demandent la fois une haute performance et une faible


consommation lectrique processeurs embarqus haute performance
Systmes aliments sur batterie
Contraintes gomtriques et/ou conomiques ne permettant pas un systme de refroidissement
performant

Quand la contrainte nergtique est forte, le processeur doit tre le plus simple possible
Processeurs embarqus ont gnralement des contraintes de time-to-market dans le cas o
les processeurs dj existants ne conviennent pas, un processeur simple ncessite moins
dingnieurs et prend moins de temps dvelopper

SIMD trs intressant pour les applications embarques multimdia


Avantage performance/consommation (moins dinstructions excuter pour un mme nombre
doprations)

Diffrents choix possibles selon les besoins


Pipeline in-order, faiblement superscalaire (voire non superscalaire) avec des oprateurs SIMD
Processeur OoO low-power, exemple PA6T (low-power, ici, veut dire quelques watts)
VLIW

276

Processeur VLIW

VLIW = Very Long Instruction Word

Philosophie

277

On exploite le paralllisme en mettant plusieurs oprateurs


Contrairement au superscalaire, le matriel pour contrler lexcution est rduit sa plus simple
expression cest le compilateur qui fait tout, ou presque
Pour un processeur embarqu, la compatibilit binaire est moins importante que pour un
processeur gnraliste

Caractristiques
Une instruction consiste en une nombre fixe doprations ( la diffrence du SIMD, pas des
oprations identiques)
Les oprations dune mme instruction sexcutent en parallle
Sauts diffrs (pas de prdicteur de branchement)
Si le compilateur ne trouve pas assez doprations excuter dans un cycle, il complte avec des
NOP

Afin que le programme ne prennent pas trop despace en mmoire, certains VLIW ont un format dinstruction
qui permet de compresser les NOP

Excution conditionnelle (prdication)


Le compilateur expose le paralllisme au maximum prdication, scheduling, droulage de
boucle, pipeline logiciel, etc ncessite un nombre assez lev de registres architecturaux

278

Exemple de VLIW: TriMedia TM3270

5 oprations par instruction


Saut diffr de 5 cycles ( le compilateur doit trouver 25 oprations mettre dans le
dlai du saut, dfaut il met des NOP)
Format dinstructions compresse les NOP
Adresses et donnes 32 bits
128 registres architecturaux 32 bits
10 ports de lecture, 5 ports dcriture
Prdicats (1 bit): 5 ports de lecture, 5 ports dcriture

31 units fonctionnelles
Cache dinstructions 64 Ko 8-way set-associatif LRU
Cache de donnes 128 Ko 4-way set-associatif LRU
Mcanisme de prefetch dans le cache de donnes contrl par logiciel

Technologie 90 nm
Surface 8.1 mm2
Tension 1.2 V
Frquence > 350 MHz
Consommation ~ 1 milliwatt/MHz ~ 0.35 W

279

Paralllisme de thread

280

Superscalaire: une technique mature ?

Annes 2000
Alpha rachet par Intel, projet Alpha EV8 (21464) arrt
Intel arrte le projet Tejas (Pentium 4 8 GHz): problme de consommation
lectrique et de dissipation de chaleur
Intel abandonne progressivement la microarchitecture Pentium 4 pour revenir la
microarchitecture prcdente (P6), amliore et renomme en Pentium M puis Intel
Core
Les principaux constructeurs se tournent vers le multi-coeur le marketing ne se fait
plus sur les Gigaherz mais sur le nombre de curs dexcution

Multi-cur: les raisons


Problme de complexit matrielle cot et temps de dveloppement des
processeurs
Problme de consommation lectrique d la complexit matrielle, mais aussi
la technologie (forte consommation statique dans les technologies rcentes)

281

Processeurs multi-coeurs

Multi-cur aussi appel chip multiprocessor (CMP)


Plusieurs processeurs (curs) sur une mme puce de silicium
Les caches peuvent tre locaux (un pour chaque cur) ou partags

processeur

processeur

Intel Core Duo 2 curs


AMD Phenom 4 curs
Sun Ultrasparc T2 8 coeurs

cache
IL1
cache
DL1

Exemples

cache
L2

cache
IL1
cache
DL1

282

Multi-cur: exemple

Exemple: Intel Core 2 Duo (65nm,


2.66 Ghz)

2 coeurs
291 millions de transistors (total)
144 mm2
65 watts
Cache L2 de 4 Mo partag par les 2
coeurs

283

Paralllisme de thread

Pour exploiter la performance potentielle dun multi-cur, il faut excuter


plusieurs threads simultanment (thread ~ tche)

Exemple: 2 curs, 2 threads 1 thread sexcute sur chaque cur

Chaque thread a son propre compteur de programme et ses propres registres

Les threads se partagent le mme espace dadressage et peuvent


communiquer en accdant des variables partages

Cest au programmeur de crer du paralllisme de thread


Avec les langages de programmation actuels, le paralllisme de thread est beaucoup
plus difficile exposer automatiquement que le paralllisme dinstructions

284

Exemple de programme multithread (cf. transparent 256)

Intel Core 2 Duo 2 coeurs

gcc O3 -lpthread

Temps dexcution 3.3 s

285

On peut aussi essayer dutiliser un


outil qui cre les threads (plus ou
moins) automatiquement
exemple OpenMP

gcc 4.2 sur Core 2 Duo

gcc O3 funroll-loops ftreevectorize fopenmp

Temps dexcution 3.3 s

Processeur SMT

Le multi-cur nest pas la seule manire dexploiter le paralllisme de thread


sur une mme puce
Une autre manire Simultaneous multithreading (SMT)
Dans un processeur superscalaire, il est rare quon arrive excuter chaque cycle
un nombre dinstructions gal au degr superscalaire
Dpendances entre instructions, miss de cache, etc

Un processeur SMT est capable dexcuter plusieurs threads simultanment

Plusieurs PC (cycle N lit instructions thread 1, cycle N+1 lit instructions thread 2, etc)
un instant donn, le pipeline dinstructions contient des instructions de plusieurs threads
Les threads se partagent les ressources (caches, oprateurs, )
Chaque thread a ses propres registres

Un processeur peut tre la fois multi-cur et SMT (les curs sont SMT)
Exemples de processeur SMT
Intel Pentium 4 (hyperthreading) 2 threads
IBM Power 5 2 threads par cur
Sun Ultrasparc T2 8 threads par coeur

286

287

Architecture mmoire partage

Les multi-curs gnralistes actuels sont des architectures mmoire


partage ils peuvent excuter simultanment plusieurs threads ayant le
mme espace dadressage

Larchitecture doit dfinir un modle de comportement de la mmoire


partage (consistency model) contrat avec le programmeur

288

Exemples
Avant la cration des threads, on initialise f1 et f2 0

Processeur 1

Processeur 2

f1 = 1;

f2 = 1;

while (f2==0);

while (f1==0);

Le programmeur veut exprimer le fait que le premier thread qui arrive son
point de synchronisation attend que lautre thread arrive au sien
On veut que la microarchitecture se comporte dune manire qui soit
intuitive pour le programmeur

289

Processeur 1

A=1;

X=B

B=1;

Y=A;

Initialement, A=B=0
Quatre cas possibles:

Processeur 2

X=0,Y=0 Y=A excut avant A=1


X=0,Y=1 X=B excut avant A=1 et Y=A excut aprs A=1
X=1,Y=1 X=B excut aprs B=1
X=1,Y=0 peut se produire si le processeur 2 excute Y=A avant X=B (cest
thoriquement possible sur un processeur OoO) ou si il voit B=1 avant A=1

Le 4me cas nest pas cohrent avec la vision squentielle que le


programmeur a du processeur ce cas est interdire

290

Processeur 1
A=1;

Processeur 2

Processeur 3

X=A;

Y=B;

B=1;

Z=A;

Initialement, A=B=0
Si X=1 et Y=1, alors on sattend avoir Z=1
le processeur 2 a vu linstruction A=1 sexcuter avant linstruction B=1, donc on
sattend ce que le processeur 3 voit aussi A=1 sexcuter avant B=1
on veut que lordre des critures soit le mme pour tous les processeurs

291

Sequential consistency (SC)

Le modle de mmoire partage connu sous le nom de sequential consistency


(SC) peut tre dcrit de la manire suivante

Une architecture qui respecte le modle SC ne gnre que les excutions quon
obtiendrait si on effectuait les accs mmoire de tous les threads les uns aprs
les autres et dune manire telle que chaque thread effectue ses accs dans
lordre squentiel (lordre spcifi par le programme)
Cela ne veut pas forcment dire que la microarchitecture effectue rellement les
accs mmoire les uns aprs les autres et dans lordre squentiel. Cest juste
limpression quelle doit donner au programmeur.

Il peut exister plusieurs excutions valides dans le modle SC


Plusieurs manires dentrelacer les threads

En pratique, le modle SC est difficile mettre en uvre sans sacrifier de la


performance certains processeurs mettent en uvre des versions
relches de SC

Exemple: modle de mmoire partage


de larchitecture Intel 64

Du point de vue du programmeur (en assembleur),


Les LOAD sont excuts dans lordre squentiel
Les STORE sont excuts dans lordre squentiel
Un STORE ne peut pas sexcuter avant un LOAD qui le prcde dans lordre
squentiel
Un LOAD peut sexcuter avant un STORE qui le prcde dans lordre squentiel
pourvu que le LOAD et le STORE accdent des adresses diffrentes
Lordre dans lequel sexcutent les STORE est le mme pour tous les processeurs

La microarchitecture doit simuler ce comportement

292

293

Mise en uvre du modle SC

Si un load a t excut spculativement et que la donne lue par le LOAD a


t modifie entre lexcution du LOAD et son retirement du reorder buffer
(ROB), il faut vider le ROB (comme pour une exception ou un branchement mal
prdit) et rexcuter le LOAD

Il faut un mcanisme permettant de simuler des critures atomiques


On doit pouvoir rpondre la question quel cycle a t effectue cette criture ?
toute lecture effectue avant ce cycle voit lancienne valeur, toute lecture effectue
aprs voit la nouvelle valeur
lordre des critures est le mme pour tous les coeurs

mcanisme de cohrence

Attention: les optimisations de code faites par le compilateur risquent de changer


la smantique du programme
Si lexcution correcte du programme repose sur le modle SC (ou un autre), il est
ncessaire de dire explicitement au compilateur de faire certains accs comme
spcifi (exemple: variables dclares volatiles)

294

Mcanisme de cohrence

Certains niveaux de cache sont locaux. Exemple: chaque cur a son propre
cache L1 de donnes. Sur certains multi-curs, les caches L2 sont aussi
locaux.

Si plusieurs coeurs accdent en lecture une mme ligne de cache, une copie
de la ligne est stocke sur chaque coeur

Si un des coeurs veut modifier la ligne, il faut invalider les autres copies avant
dautoriser la ligne tre modifie criture atomique effectue aprs
quon est sr que plus aucun coeur ne peut lire lancienne valeur

Avec des caches locaux write-back, en cas de miss, il faut regarder dans les
caches locaux des autres curs
Si une copy dirty de la ligne existe, cest cette copie quil faut lire (critures
atomiques : une fois que la nouvelle valeur peut tre lue par un processeur, cest
cette valeur que tous les processeurs doivent lire)

Il faut aussi maintenir la cohrence des TLB

295

Protocole MSI

Caches locaux write-back


Chaque (copie de) ligne de cache a 3 tats possibles
tat I ( invalid ) la ligne est invalide
tat M ( modified ) = dirty la ligne a t modifie, les autres copies de la ligne sont dans
ltat I
tat S ( shared ) toutes les copies valides de la ligne sont non modifies (tat S)
PR,PW

M
BR/
WB

PW
PW

Intentions

BW/
WB

PR (processor read): le coeur veut lire la ligne


PW (processor write): le coeur veut modifier la ligne
BR (bus read): un autre coeur veut lire la ligne
BW (bus write): un autre coeur veut modifier la ligne

Actions
WB (write-back): la ligne est sauvegarde dans la partie
partage de la hirarchie mmoire (exemple: cache L2)

BW

PR
PR,BR

Pour regarder dans les autres curs, on fait du bus


snooping
On exploite le fait davoir un bus partag entre les coeurs
Les tags des caches locaux sont dupliqus pour que le
snooping ne consomme pas de bande passante cache

296

Autres protocoles de cohrence

Protocole MESI
On rajoute un tat E ( exclusive ) la ligne est non modifie et aucun autre cur na
de copie
On met la ligne dans ltat E lorsquon fait un miss et quaucun autre cur na de copie
Quand on veut modifier la ligne et quelle est dans ltat E, on na pas besoin daller
regarder sur les autres curs on gnre moins de snooping
Utilis dans les Intel Core

Protocole MOESI
On rajoute un tat O ( owned ) il peut exister plusieurs copies de la ligne: cette
copie est dirty , les autres copies sont dans ltat S
On passe de ltat M ltat O quand un autre cur veut lire la ligne pas besoin de
faire un write-back dans ce cas
Utilis dans les AMD Opteron

Problme du false sharing: lorsque 2 variables non partages sont dans la mme
ligne de cache et que 2 coeurs veulent crire dans ces variables, la ligne fait du
ping-pong entre les 2 curs problme de performance

297

Le modle SC est-il suffisant ?

Thoriquement, le modle SC est suffisant pour la programmation multithread


Par exemple, on sait faire des sections critiques (algorithme de Dekker,
algorithme de Peterson,)

Problme(s)

Modle SC incompatible avec certaines optimisations de compilation


La performance est importante (sinon pourquoi faire du multi-cur ?)
Les boucles dattente consomment des ressources dexcution et de lnergie
Et si la mmoire partage nest pas strictement SC ?

la plupart des architectures proposent des instructions pour la


programmation multi-thread

298

Instructions pour le multi-thread

Exemples
Barrire mmoire (fence)
on force les accs mmoire antrieurs la barrire (dans lordre du programme) se
terminer avant dexcuter la suite du programme pipeline flush

Swap (or exchange)


Opration atomique qui change le contenu dun registre et dune adresse mmoire

Fetch-and-add
Opration atomique qui modifie le contenu dune adresse mmoire

Load-locked / Store-conditional
r1 LL x; modifie r1; SC r1,x
Si aucun autre processeur ncrit x entre lexcution du LL et du SC, alors le SC crit la
valeur de r1 ladresse x et crit 1 dans r1, sinon il crit 0 dans r1

Boucles dattente
Faire un HALT pour permettre un autre thread dutiliser le processeur si la boucle
dattente est trop longue
Instruction PAUSE (Intel) rend les boucles dattente moins agressives
MONITOR/MWAIT (Intel) permet de rveiller un thread lorsquun certain
vnement se produit (criture une adresse particulire)

299

Cache partag

Certains niveaux de cache peuvent tre partags entre plusieurs curs


Exemple: cache L2 de lIntel Core Duo
Si un niveau est partag, les niveaux suivants le sont aussi

L2 partag L3 partag

Avantages
Le protocole de cohrence entre curs na pas besoin daller au-del du niveau de
cache partag
Meilleure utilisation de lespace de cache

Pas de rplication de ligne dans un cache partag


Un cur peut faire du prefetch pour un autre coeur
Lorsquun seul cur travaille un instant donn, il a accs tous lespace du cache
Lorsque plusieurs curs travaillent en mme temps et que lun des curs nutilise quune
petite partie de lespace du cache partag, cela laisse plus despace pour les autres curs

Inconvnients
Ncessite une grande bande passante daccs au cache
Cache plus complexe, latence du cache plus grande
La politique de remplacement LRU (ou pseudo-LRU) ne garantit pas un usage
quitable de lespace du cache lorsquon excute des tches indpendantes il faut
une politique de remplacement spcifique, plus complexe que LRU

300

Quelques rfrences

Principes de base de larchitecture des ordinateurs


David A. Patterson & John L. Hennessy, Computer Organization and Design: the
hardware/software interfaces , 3me dition, Morgan Kaufmann.

Architecture avance
John L. Hennessy & David A. Patterson, Computer Architecture: a quantitative
approach , 4me dition, Morgan Kaufmann.

Architectures multiprocesseurs
David E. Culler & Jaswinder Pal Singh, Parallel Computer Architecture: a
hardware/software approach , Morgan Kaufmann.

Vous aimerez peut-être aussi