Title: ARPO
1ARPO
- Architectures des processeurs superscalaires,
VLIW et optimisations
2Linterface logiciel / matériel
langage
logiciel
compilateur
jeu dinstructions (ISA)
micro-architecture
matériel
transistor
3Différents contextes
- Processeurs à usage général
- serveurs, ordinateurs de bureau, ordinateurs de
poche ... - exécute tous types dapplications
- Processeurs enfouis
- téléphone, télévision, voiture ...
- application spécifique
- processeur spécialisé ou dérivé dun processeur à
usage général
4Besoins en performances
- Performance
- améliorer le temps de réponse gt interactivité
- applications scientifiques
- bases de données
- traitement du signal
- multimédia
- ...
5Comment améliorer la performance ?
écrire un meilleur algorithme
langage
optimisations du compilateur
compilateur
jeu dinstructions (ISA)
améliorer lISA
micro-architecture
meilleure micro-architecture
transistor
nouvelle technologie
6Où doit porter leffort ?
compilateur
ISA
micro-architecture
processeur usage général
processeur enfoui
- Processeur usage général
- en général, on hérite dun ISA existant (exemple
Intel x86) - compatibilité binaire la nouvelle génération de
processeur doit pouvoir exécuter les codes
exécutables sur les anciennes générations - Processeur enfoui
- attention au coût du processeur
- compromis performance / consommation électrique
7Plan du cours
- Performances
- Architecture des processeurs
- jeu dinstructions (ISA Instruction Set
Architecture) - micro-architecture
- Compilateur
- optimisations de code
8Améliorer la performance ?
- Ca dépend du point de vue
- Débit dexécution faire plus de travail utile
pendant un temps donné - serveurs
- environnement multiprogrammé
- Temps dexécution faire un travail donné dans
un temps plus court - point de vue de lutilisateur
- Rem diminuer le temps dexécution augmente le
débit
9Accélération
Exemple Un programme compilé avec le
compilateur A sexécute en 10 ms Avec le
compilateur B, sexécute en 5 ms
10
accélération B/A
2
5
Le compilateur B est 2 fois plus performant
que le compilateur A
10Accélération locale / globale
Exemple supposons quun programme passe 50 du
temps dexécution dans du calcul en virgule
flottante, et supposons quon multiplie par 2 les
performances du calcul en virgule flottante.
Quelle est laccélération globale ?
11Loi dAmdahl
12Exemple
Exemple supposons que 50 du temps dexécution
provienne du CPU, les 50 restant des
entrées/sorties. On multiplie par 5 les
performances du CPU. Quelle est laccélération
globale ?
Il faut optimiser dabord le cas le plus fréquent
13temps CPU / temps réel
temps CPU temps utilisateur système
temps dexécution
temps réel (E/S, temps partagé )
Exemple processeur fixé, on travaille sur le
compilateur
On peut utiliser le temps CPU utilisateur pour
mesurer la performance
14Fréquence / cycle / IPC
Fréquence CPU f fréquence de lhorloge interne
du processeur dépend (entre autres) de léchelle
de gravure des transistors
Cycle CPU T 1 / f
Exemple f 500 MHz T 2 ns
Nombre moyen dinstructions exécutées par cycle
15MIPS / megaflops
MIPS
nombre moyen de millions dinstructions exécutées
par seconde
Exemple ISA et compilateur fixés , on travaille
sur la micro-architecture utiliser les
MIPS pour mesurer la performance
Si on travaille a fréquence CPU fixée, on peut
utiliser lIPC
nombre moyen de millions dopérations virgule
flottante par seconde
megaflops
Utilisé pour le calcul numérique intensif
16Comparer des machines différentes
Les MIPS nont aucune signification ici car les
ISA sont différents
Solution 1 temps CPU
Solution 2 utiliser une machine de référence
Exemple VAX MIPS
17Programmes de test
- Programmes standards (benchmarks)
- exemple 1 SPEC CPU2000
- SPEC int compression de données, compilateur,
interpréteur, synthèse dimage, analyseur
grammatical, jeu déchec, conception de circuits
... - SPEC fp physique, maths, chimie, météo ...
- Exemple 2 TPC (Transaction Processing
Performance) - base de données multi-utilisateurs
- sollicite les entrées-sorties
- Programmes spécifiques
Il faut choisir les programmes de test appropriés
au cas étudié ...
18Évaluer / analyser les performances
- Mesures de temps dexécution
- Instrumentation
- exemple quelle partie du code contribue le plus
au temps dexécution ? - code instrumenté code original code
supplémentaire permettant de récupérer de
linformation à lexécution (exemple adresses
mémoire) - exemples doutils Prof, Pixie, Salto, EEL, Atom,
- Utilisation des compteurs matériels du processeur
- compte certains évènements (exemple nombre
dinstructions exécutées) - quand un compteur atteint sa valeur maximum,
génère une interruption - Simulation
- on simule lexécution au lieu dexécuter
réellement - lISA simulé peut ne pas être celui de la machine
sur laquelle on simule - Exemples de simulateurs Simplescalar, Shade,
SimOS, Impact ...
19Jeu dinstructions (ISA)
- Cest linterface matériel / logiciel
- Exemples
- Intel x86 (1979)
- MIPS , SPARC (milieu années 80)
- Alpha (début années 90)
- Les ISA évoluent lentement, par ajouts successifs
- il faut avoir de bonnes raisons pour lancer un
nouveau jeu dinstructions - plus de raisons pour les processeurs enfouis
applications spécifiques, densité du code,
consommation électrique, ...
20Types dISA
- CISC (Complex Instruction Set Computer)
- ex. Intel x86, VAX, IBM 360, ...
- taille dinstruction variable
- plusieurs modes dadressage (absolu, basé,
indexé, indirect) - instructions registres-mémoire
- instructions itératives
- RISC (Reduced Instruction Set Computer)
- ex. Alpha, Sparc, MIPS, PowerPC ...
- taille dinstruction constante (en général 32
bits) - architecture load / store
- modes dadressage simples (basé, indexé)
- instructions simples registre-registre
- VLIW (Very Long Instruction Word)
- 1 instruction VLIW plusieurs opérations
indépendantes
21CISC exemple
add r4, 10 (r5, r6)
r4 r4 memr5r610
3 additions
add r7, r5, r6 load r7, 10 (r7) add r4, r4, r7
r7 r5 r6 r7 memr710 r4 r4 r7
Équivalent RISC
22RISC contre CISC
- CISC
- code plus dense, prend moins de place en mémoire
- RISC
- décodage plus rapide
- processeur plus simple
- le compilateur peut optimiser le code
CISC
décode
Remarque lIntel P6 traduit à la volée les
instructions x86 en micro-opérations RISC
RISC
cœur RISC
23Jeu dinstructions RISC typique
- instructions sur 32 bits
- 32 registres entiers
- 32 registres flottants
- load / store (basé)
- rt rs op imm
- branchement
- saut registre
6
5
5
16
op
rs
rt
immédiat
Format I
6
5
5
5
11
- rd rs fonc rt
- load / store (indexé)
op
rs
rd
fonc
Format R
rt
Format J
24RISC remarques
- Architecture 32 ou 64 bits ?
- cest la taille des adresses virtuelles (
adresses logiques) - Intel x86 architecture 32 bits
- Alpha, Sparc, MIPS architectures 64 bits
- en général, correspond à la taille des registres
entiers - Virgule flottante
- add, mul, div, sqrt, mult-add
- banc de registres flottants séparé des registres
entiers - registres 64 bits (double précision)
- Accès mémoires
- plusieurs grains daccès octet, demi-mot (2
octets), mot (4 octets), double-mot (8 octets) - accès alignés quand on accède un groupe de N
octets, les log2(N) bits de poids faible de
ladresse sont nuls
25Étapes dexécution (RISC)
- Générer ladresse de linstruction
- incrémenter le compteur de programme PC PC
4 - Lire linstruction en mémoire
- Décoder linstruction
- type dinstruction (ALU, flottant, load, store,
branchement, ?) - préciser (add, mul, shift, and, or, adressage
basé, indexé, ?) - registres sources, registre destination
- Lire les registres sources
- Exécuter lopération
- Écrire le résultat dans le registre destination
- rem pour un saut ou un branchement pris, le
registre destination implicite est le compteur de
programme
26Quelques données technologiques
- Le temps de traversée dune porte logique nest
pas nul - Positionner une tension sur une connexion, ca
prend du temps - Temps de cycle des processeurs rapides (2000)
1 ns - Durée dune addition entière 64 bits 1 cycle
- Durée dune addition / multiplication flottante
3-4 cycles - Lecture / écriture registres 1 cycle (dépend du
nombre de registres et du nombre de ports) - Accès mémoire de lt 1 cycle à plusieurs centaines
de cycles suivant le type et la taille de la
mémoire
Il faut plusieurs cycles pour exécuter
complètement une instruction
27La technique du pipeline
- Découper le traitement dune instruction en
plusieurs étages - mise à jour PC, chargement instruction, décodage
et lecture registres, exécution, écriture
registre - A un instant donné, chaque étage travaille sur
une instruction différente - en début de cycle, chaque étage envoie son
instruction à létage suivant
cycle N
cycle N1
cycle N2
PC PC4
Inst 5
Inst 6
Inst 7
chargement
Inst 4
Inst 5
Inst 6
décodage / lecture registres
Inst 3
Inst 4
Inst 5
exécution
Inst 2
Inst 3
Inst 4
écriture registre
Inst 1
Inst 2
Inst 3
28Pipeline remarques
- Le pipeline ne réduit pas le temps dexécution
d une instruction - en fait, ça lallonge même un peu à cause des
verrous quon rajoute entre les étages - Permet un débit dune instruction par cycle
- en théorie, pas en pratique (cf. transparents
suivants) - Banc de registres à 3 ports 2 ports de lecture
et 1 port décriture - Rem si lISA autorise ladressage indexé (Sparc,
PowerPC), il faut un troisième port de lecture
pour les stores
29Aléas structurels
- supposons quau cycle N, une instruction load se
trouve à létage dexécution et essaie daccéder
à la mémoire - au même instant, une autre instruction se trouve
à l étage de chargement dinstructions on doit
également accéder à la mémoire - problème sil ny a quun seul port daccès à la
mémoire, conflit de ressource - 1ère solution donner la priorité au load, et
différer dun cycle linstruction à létage de
chargement cest un aléa structurel - 2ème solution 2 ports daccès à la mémoire
30Dépendances de données
- Soit 2 instructions I1 et I2 (I2 après I1)
- 3 types de dépendances de données
- dépendance RAW (Read After Write)
- le résultat de I1 est utilisé par I2
- aussi appelée dépendance vraie
- dépendance WAR (Write After Read)
- I2 écrit dans un registre lu par I1
- aussi appelée anti-dépendance
- dépendance WAW (Write After Write)
- I2 écrit dans le même registre que I1
- aussi appelé dépendance de sortie
I1 r1 r11 I2 load r2, 0(r1)
I1 load r2, 0(r1) I2 r1 r11
I1 load r2, 0(r1) jump I3 if r50 I2 load
r2, 0(r3)
31Aléas de données
- Pour respecter les dépendances RAW, WAR et WAW,
on peut être amené à introduire des bulles
dans le pipeline - bulle la partie amont du pipeline est gelée ,
seule la partie aval du pipeline progresse - Aléas de données
- RAW
- WAW pas de problème si les instructions passent
par létage décriture dans lordre du programme - WAR pas de problème si on lit les registres
dans lordre du programme et toujours au même
étage du pipeline - Les aléas de données, comme les aléas
structurels, diminuent les performances
32Aléa RAW
Cycle N
Cycle N1
Cycle N2
Cycle N3
PC PC4
chargement
décodage / lecture registres
I2 r1r11
I2
I2
I1 r1r2r3
bulle
bulle
I2
exécution
écriture registre
I1
bulle
bulle
Dépendance RAW entre I1 et I2 au moment ou I2
essaie de lire r1, I1 na pas encore écrit dedans
I2 doit attendre ...
On attend 2 cycles avant de lancer I2
2 cycles perdus
33Mécanisme de bypass
Banc de registres
Enlève laléa RAW entre I1 et I2
PC PC4
MUX
MUX
chargement
décodage / lecture registres
exécution
écriture registre
34Plus daléas de données ? presque ...
- Plus daléas RAW entre instructions
registre-registre - A priori, il ny a pas daléas WAR ou WAW
- Mais
- certaines instructions nécessitent plusieurs
cycles d exécution - load / store
- division et multiplication entière
- opérations virgule flottante
35Cas des load / store
- On supposera pour linstant que laccès à la
mémoire se fait en 1 cycle - Pour exécuter un load / store
- 1 cycle pour calculer ladresse daccès
(addition) - 1 cycle pour accéder à la mémoire
- total 2 cycles à l étage dexécution
- Solution diviser en 2 étages
- étage dexécution utiliser lALU pour calculer
ladresse - étage daccès mémoire
36Nombre détages variable ?
Pour les load / store, pipeline à 6 étages Pour
les autres instructions, pipeline à 5 étages
PC PC4
chargement
décodage / lecture registres
exécution
I2 r3r4r5
accès mémoire
I1 load r1,0(r2)
Aléa structurel au cycle suivant, I1 et I2 vont
essayer décrire en même temps dans le banc de
registre, or il ny a quun seul port décriture.
écriture registre
37Nombre détages fixe
Pipeline à 6 étages pour toutes les
instructions Si linstruction nest pas un load /
store, létage accès mémoire ne fait rien
PC PC4
chargement
décodage / lecture registres
exécution
I2 r3r4r5
accès mémoire
I1 load r1,0(r2)
écriture registre
I1 et I2 écriront dans les registres à des cycles
différents plus daléa structurel
Grâce au bypass, pas de problème
38Il reste des aléas RAW load-use
Cycle N
Cycle N1
Cycle N2
PC PC4
chargement
décodage / lecture registres
I2 r1r11
I2
exécution
I1 load r1,0(r2)
bulle
I2
accès mémoire
bulle
I1
écriture registre
I1
Un cycle de pénalité load-use Le compilateur
doit essayer dordonner les instructions de
manière à insérer une instruction entre I1 et I2
qui nutilise pas le résultat de I1
39Exercice
load r2, 0(r1) a add r2, r2, 1 store r2,
0(r1) load r2, 4(r1) b add r2, r2, 1 store
r2, 4(r1)
aa1 bb1
PC PC4
chargement
décodage / lecture registres
exécution
accès mémoire
- Combien de bulles sont générées sur cette
séquence ? - Transformer le code de manière à éliminer ces
bulles
écriture registre
40Exercice
- Hypothèse
- 1 instruction sur 5 est un load
PC PC4
chargement
- 1) Quel est lIPC moyen si la probabilité quune
instruction dépende de linstruction précédente
vaut 1/2 ? - 2) On suppose quen ordonnant les instructions,
le compilateur est capable de placer une
instruction indépendante derrière 75 des load.
Quel est lIPC moyen ?
décodage / lecture registres
exécution
accès mémoire
écriture registre
41Exercice
On modifie le pipeline on insère un étage calcul
dadresse spécifique avant létage dexécution.
Les accès mémoire se font à létage dexécution.
(létage calcul dadresse ne fait rien pour les
instructions qui ne sont pas des load / store)
PC PC4
chargement
décodage / lecture registres
- Combien de bulles sur une dépendance load-use ?
- Cette structure de pipeline a-telle le même coût
matériel que la structure précédente ? - Que doit faire le compilateur pour tirer partie
de cette structure de pipeline ?
calcul adresse
exécution / mem
écriture registre
42Instructions longues
- Instructions longues sur lAlpha 21264 (1998)
- multiplication entière 7 cycles, complètement
pipelinée - division flottante 12 cycles SP, 15 cycles DP,
non pipelinée - racine carrée 18 cycles SP, 33 cycles DP, non
pipelinée - Les opérations non pipelinées génèrent des aléas
structurels - Attention aux aléas WAW
- Problème des interruptions précises
- si une interruption se produit entre I1 et I2, il
faut maintenir un état cohérent des registres - il ne faut pas que I2 écrivent dans les registres
avant dêtre sûr que I1 ne génèrera pas
dexception
43Dépendances WAW
cycle de lancement
cycle décriture
Exemple de pipeline virgule flottante
I1 fmul f1,f1,f1 I2 fadd f1,f2,f3
N N5 N1 N4
PC
charg.
problème ...
déc/lect.
- Solutions possibles
- retarder le lancement de I2 (bulles)
- masquer lécriture de I1
- rajouter 2 étages vides après ladditionneur
flottant - ...
fadd 3 cycles
fmul 5 cycles
écriture
44Interruptions précises
- Nécessaire lorsquon veut redémarrer un programme
interrompu par une exception - par exemple, on peut émuler par logiciel
certaines instructions - Faire les écritures registre dans lordre du
programme - Pipeline de même longueur pour (presque) toutes
les instructions - Problème augmente le nombre de niveaux de bypass
- Solution utiliser 2 copies du banc de registres
- banc de travail les écritures peuvent être
faites dans le désordre - banc architectural mis à jour dans lordre du
programme au commit (dernier étage du pipeline) - en cas dinterruption, on recopie le contenu du
banc architectural dans le banc de travail
45Cas des sauts aléas de contrôle
PC adresse de saut
Cycle N
Cycle N1
Cycle N2
PC
I35
I36
chargement
I3
I35
I36
décodage / lecture registres
I2
bulle
I35
exécution
I1 jump _at_I35
bulle
bulle
accès mémoire
bulle
I1
écriture registre
I1
Les instructions I2 et I3 sont annulées 2 cycles
de pénalité de saut
46Impact des aléas de contrôle
- La pénalité de saut sera dautant plus grande que
les sauts et branchements seront exécutés tard
dans le pipeline - En moyenne, 1 saut exécuté pour 7 instructions
PC PC4
- Exercice
- on suppose pas daléas de donnée ou structurels
- quel est limpact des aléas de contrôle sur les
performances ?
chargement
décodage / lecture registres
exécution
accès mémoire
écriture registre
47Quelles solutions ?
- Branchement différé (MIPS, Sparc )
- le saut ne se fait pas tout de suite, mais avec
un délai - exemple le programme exécute I1, puis I2, puis
I5 - permet denlever une bulle sur un saut
- le compilateur doit trouver une instruction utile
à mettre dans le délai du branchement (à défaut,
mettre un NOP) - années 80, exécution des branchements au 3ème
étage, aucune pénalité de saut grâce à cette
technique - Prédiction de branchement
- solution utilisée dans les processeurs dusage
général des années 90 - cf. plus loin dans le cours
I1 jump _at_I5 I2 add r1,r1,1 I3 I4 I5
48Exemple lUltrasparc-3 (2000)
pred.PC
charg. 1
charg. 2
decod. 1
decod. 2
dispatch
Les loads 4/8 octets sont terminés à load 1, les
loads 1/2 octets sont terminés à load 2.
Pipeline entier
exec.
load 2
load 1
commit
lit int
écriture registre ou mémoire
lit fp
exec. 1
exec. 2
exec. 3
exec. 4
Pipeline flottant
49Exercice
- Sur lUltrasparc-3
- donner le nombre de bulles lorsque
- une instruction de calcul entier dépend dun load
4 ou 2 octets - 2 instructions de calcul flottant sont
dépendantes - une instruction de calcul flottant dépend dun
load - létage vide en début du pipeline flottant vous
paraît-il plutôt utile ou plutôt pénalisant ? - quel type de mécanisme peut-on imaginer pour
résoudre le cas dun load dépendant dun store
récent ?
50Remarques
- Optimiser le cas fréquent
- les opérations très longues (ex. division) sont
traitées à coté du pipeline, en dehors du
chemin critique dexécution - Certains processeurs découplent les pipelines
entier et flottant - exemple MIPS R8000 (1994)
- les opérations de calcul flottant sont insérées
dans une file dattente et traitées séparément - avantage les dépendances entres instructions de
calcul flottant nintroduisent pas de bulles - inconvénient pas dinterruption précise sur les
instructions de calcul flottant - Les processeurs enfouis ont généralement un
pipeline court (5-6 étages) alors que le pipeline
dun processeur à usage général peut faire entre
10 et 20 étages - pipeline long haute fréquence et haute
consommation électrique
51La mémoire
- Plus une mémoire est grande, plus son temps
daccès est long - 3 types de mémoire
- banc de registres
- peu dentrées, temps daccès court (lt 1 cycle),
plusieurs ports - mémoire dynamique (DRAM)
- mémorisation dune charge sur une capacité, 1
transistor par bit - grande densité dintégration (16-64 Mbits)
- temps daccès long 50-100 ns
- utilisé comme mémoire principale
- mémoire statique (SRAM)
- mémorisation par bouclage de 2 portes 1-4 Mbits
- cher
- temps daccès court 5-10 ns
52Latence mémoire
- La latence mémoire nest pas seulement constituée
par le temps daccès DRAM - translation dadresse
- traverser les broches du processeur et le bus
externe - multiplexage si plusieurs bancs mémoires
- Latence mémoire principale 100-200 ns
- à 1 GHz, ça fait 100 à 200 cycles CPU
- problème !!
53Les caches
- utiliser de la SRAM pour maintenir des copies des
instructions et des données utilisées souvent - si possible, intégrer cette mémoire cache sur le
processeur - latence moindre
- les données et instructions stockées dans le
cache sont étiquetées avec leur adresse afin de
pouvoir les identifier sans ambiguïté - quand on veut charger une instruction ou une
donnée, on regarde si elle se trouve dans le
cache ou pas - si oui (hit), latence mémoire latence cache 1
à 10 cycles - si non, cest un défaut de cache (miss), on va
chercher la donnée en mémoire principale, et on
la recopie dans le cache - le cache est transparent à lutilisateur, tout
est automatique - actuellement, cache de données et cache
dinstructions distincts - permet de lire dans le même cycle une donnée et
une instruction
54Les caches pourquoi ca marche
- Localité temporelle
- des données ou des instructions déjà accédées
dans le passé sont souvent réutilisées dans un
futur proche - Localité spatiale
- des données ou des instructions qui sont à des
adresses proches ont tendance à être accédées
dans des temps rapprochés - sur un défaut de cache, on ne chargera pas une
seule donnée ou une seule instruction, mais un
bloc de plusieurs instructions ou données - bloc ligne de cache
- taille dune ligne de cache 16-64 octets
55Exercice
On suppose que le chargement dinstructions se
fait en 1 cycle (pas de défauts de cache
dinstructions) , quil ny a pas daléas de
contrôle, structurels, WAW ou load-use On suppose
que lorsque la donnée se trouve dans le cache de
données, un load / store passe un seul cycle dans
létage daccès mémoire Sur un défaut de cache,
le pipeline est gelé en amont de létage daccès
mémoire en attendant que la donnée arrive
PC PC4
chargement
décodage / lecture registres
exécution
accès mémoire
- Environ 40 des instructions sont des load/store
- Quel est le débit en IPC du pipeline si un défaut
de cache prend 50 cycles à se résoudre et si cela
se produit sur 10 des load/store ? - Quelle est la latence moyenne dun load/store ?
écriture registre
56Caches remarques
- Même un faible pourcentage de défauts de cache
est pénalisant - Gros travail doptimisation à faire sur les
caches - La hiérarchie mémoire est constituée de plusieurs
niveaux de cache sur les processeurs actuels - caches primaires (L1)
- cache dinstructions et cache de données
- 8 à 64 Ko
- temps daccès 1-2 cycles
- cache secondaire (L2)
- unifié (instructions et données)
- si externe, 512 ko à 4 Mo
- de plus en plus, intégré sur le processeur (256
Ko on-chip) - latence 5-10 cycles
- (cache tertiaire externe)
57Caches remarques
- Sur un défaut de cache primaire, on va chercher
la ligne manquante dans le cache secondaire - Si défaut de cache secondaire, on va chercher la
ligne manquante en mémoire principale (ou dans le
cache tertiaire sil y en a un) - La plus grande partie du budget en transistors
des processeurs actuels est utilisée dans les
caches - Exemple le PA-8500 dHP (1999)
- 130 millions de transistors, 1.5 Mo de cache
on-chip
58Cache principe de mise en œuvre
étiquette (tag) identificateur de ligne
Espace mémoire
lignes de cache
Load A
Si ladresse de la ligne contenant A se trouve
dans la table des étiquettes, la donnée est dans
le cache
A
59Différents types de cache
- Compromis entre la complexité du cache et sa
capacité à retenir un maximum de lignes - Cache à correspondance directe (direct-mapped)
- une ligne na quun seul emplacement possible
dans le cache - conflits entre différentes lignes
- Cache complètement associatif (fully-associative)
- une ligne peut être à nimporte quel emplacement
dans le cache - lespace du cache est mieux utilisé
- Associatif par ensembles de N lignes (N-way
set-associative) - intermédiaire entre direct-mapped et
fully-associative
60Cache direct-mapped
Exemple cache de 4 Ko, lignes de 16 octets,
adresses 32 bits
4 bits
8 bits
20 bits
adresse daccès
étiquette (tag)
index cache
offset ligne
8
256 lignes de cache de 16 octets
256 tags de 20 bits
4
20
20
ligne
?
Si tags égaux, la donnée est dans le cache.
Sinon, défaut de cache.
61Exercice
On considère une architecture 64 bits (adresses
sur 64 bits). Soit un cache direct-mapped pouvant
contenir 64 Ko de données, la taille de ligne
étant de 32 octets.
- Combien de lignes contient le cache ?
- Quelle est la taille dune étiquette en nombre de
bits ? - Si on compte la table des étiquettes, quelle est
la quantité de mémoire réellement occupée par le
cache ? - Montrer que, lorsque deux adresses sont séparées
par une distance inférieure à 64 Ko, elles ne
sont pas en conflit dans le cache. La réciproque
est-elle vraie ?
62Exercice
Cache direct-mapped 4 Ko, ligne 16 octets
Programme A
Programme B
define _8k 8192 char a_8k register int i,x
0 for (i0ilt_8ki) ai ai1 for
(i_8k-1igt0i--) xxai
define _8k 8192 int a_8k register int i,x
0 for (i0ilt_8ki) ai ai1 for
(i_8k-1igt0i--) xxai
- Combien de défauts de cache sont générés sur la
deuxième boucle du programme A ? - Même question sur le programme B
63Exercice
Soit un cache direct-mapped de N octets avec des
lignes de L octets
- Quelle est la probabilité (fonction de N et L)
pour que deux adresses aléatoires soient en
conflit dans le cache ? - Quelle conclusion en tirez-vous ?
- Soit deux tableaux de K octets chacun, commençant
aux adresses respectives A et B (les données dun
tableau sont rangées à des adresses contiguës en
mémoire). On suppose que les adresses A et B sont
alignées sur des frontières de ligne et que
chaque tableau fait un nombre entier de lignes.
Quelle est la probabilité pour que ces deux
tableaux soient en conflit dans le cache ?
64Cache N-way set-associatif
Exemple cache 2-way SA de 4 Ko, lignes de 16
octets, adresses 32 bits
4 bits
7 bits
21 bits
étiquette (tag)
index cache
offset ligne
banc 0
banc 1
banc 0
banc 1
128 lignes de 16 octets
128 tags 21 bits
128 lignes de 16 octets
128 tags 21 bits
?
?
Sélectionner la bonne ligne
La ligne est-elle présente ?
ou
65Cache N-way SA
- Chaque ensemble est composé de N lignes réparties
sur N bancs et ayant le même index de cache - Temps daccès plus élevé quun cache
direct-mapped - pour accéder à la donnée, on doit avoir lu les
tags et effectué la comparaison - Si le nombre de bancs dun cache SA est égal au
nombre total de lignes dans le cache, on obtient
un cache FA - Politique de remplacement en cas de défaut de
cache, on a le choix entre N emplacements pour
stocker la nouvelle ligne - random
- remplacer une ligne au hasard parmi les N
- LRU (least recently used)
- remplacer la ligne la moins récemment utilisée
- meilleur que random
66LRU exemple
Cache 4-way set-associatif Supposons que les
lignes A,B,C,D,E aient le même index cache
Cache avant
Hit / miss ?
Ligne évincée
Cache après
Ligne accédée
A DBCA hit
ADBC
B ADBC hit
BADC
C BADC hit
CBAD
D CBAD hit
DCBA
E DCBA miss A
EDCB
A EDCB miss B
AEDC
E AEDC hit
EADC
B EADC miss C
BEAD
67Mise en œuvre matérielle du LRU
- Cache 2-way SA
- associer un bit B à chaque ensemble
- ce bit contient le numéro du dernier banc accédé
(0 ou 1) dans lensemble considéré - quand on doit évincer une ligne, choisir le banc
NON(B) - Cache N-way SA
- associer une matrice de bits Ai,j à chaque
ensemble du cache - Ai,j1 signifie que le banc i a été accédé plus
récemment que le banc j dans lensemble considéré - comme Ai,j NON(Aj,i), prendre la partie
triangulaire sans la diagonale - N(N-1)/2 bits
- lorsque le banc k est accédé, mettre la ligne k à
1 et la colonne k à 0 - le banc le moins récemment accédé est celui dont
la ligne ne contient que des 0 et la colonne que
des 1 - bonne approximation du LRU utiliser une
structure en arbre - exemple 4-way 3 bits (1 pour chaque paire de
bancs 1 global)
68Distance de réutilisation définition
- Dun point de vue algorithmique, on peut
maintenir lordre LRU par une liste chaînée - chaque ligne accédée est placée en tête de liste
- la ligne en queue de liste est la moins récemment
utilisée - plusieurs listes chaînées
- les lignes qui ont le même index cache sont dans
la même liste - si cache FA, une seule liste globale
- Distance de réutilisation D dune ligne
distance par rapport à la tête de liste - D0 pour la ligne en tête de liste
- D peut être globale (une seule liste) ou locale
(plusieurs listes) - Sur un cache N-way SA LRU, si D lt N cest un hit,
sinon cest un miss
69Distance de réutilisation utilité
- La distance de réutilisation globale dune ligne
donne une idée de sa localité temporelle - Sur un cache FA LRU comportant N lignes
- si D lt N cest un hit, sinon cest un miss
- Sur un cache direct-mapped comportant N lignes
- soit une ligne A et soit D sa distance de
réutilisation globale - D lignes distinctes ont été accédées depuis la
dernière utilisation - si on néglige la localité spatiale, la
probabilité que ces D
lignes aient toutes un index différent de A vaut - la probabilité davoir un miss sur A vaut
- La probabilité de miss augmente avec la distance
de réutilisation
70Exercice multiplication de matrices
register int i, j, k for (i 0 i lt N i)
for (j 0 j lt N j) for (k 0 k lt
N k) Cij Aik Bkj
for (jj 0 jj lt N jjjjN/2) for (i 0 i lt
N i) for (j jj j lt jjN/2 j)
for (k 0 k lt N k)
Cij Aik Bkj
1
3
- Combien de fois utilise-t-on un même élément de
A, B et C ? - On suppose 1 ligne 1 donnée. Quelle est la
distance de réutilisation globale dun élément de
A, B et C sur chacun des 3 programmes ?
Conclusion ? - On suppose 1 ligne plusieurs données. Entre les
programmes 1 et 2, lequel des deux est à votre
avis le plus performant ? - on supposera (Xij) X i N j
for (i 0 i lt N i) for (k 0 k lt N
k) for (j 0 j lt N j)
Cij Aik Bkj
2
71Direct-mapped / set-associatif
- Direct-mapped
- accès rapide
- on na pas besoin dattendre la lecture des tags
et la comparaison pour savoir ou se trouve la
donnée - Set-associatif
- en général, 2-way ou 4-way
- le temps daccès augmente avec lassociativité
- moins de cache miss
- règle empirique un cache 2-way SA de taille N a
grosso-modo le même taux de miss quun cache DM
de taille 2N
72La bande passante
- Bande passante débit maximum de transit des
données sur le bus entre deux niveaux de cache ou
vers la mémoire - Bande passante limitée par la fréquence et la
largeur du bus - exemple bus 128 bits 500 MHz, bande passante
maximale 8 Giga-octets par seconde - Une bande passante trop petite augmente la
latence apparente des accès mémoire - La localité spatiale permet de bien utiliser la
bande passante disponible
73Exemple
Soit un tableau de N entiers accédé pour la
première fois. On suppose que les accès se font
dans lordre 1,2,3,4,5, ... Les lignes font 64
octets et la bande passante du bus est de 8
octets par cycle. La latence mémoire est de 10
cycles.
Fréquence des miss 1 miss pour 16 accès Latence
moyenne dun load (151 110)/16 1.56
cycles ? FAUX !
Un miss ne met pas 10 cycles à se résoudre, mais
9 64/8 17 cycles Latence moyenne dun load
(151117)/16 2 cycles
Et si on prend des lignes plus petites, par ex.
16 octets ? Fréquence des miss 1 miss pour 4
accès. Temps de résolution dun miss 9 16/8
11 cycles Latence moyenne dun load
(31111)/4 3.5 cycles
74Quelle taille de ligne ?
- Petites lignes ?
- on ne charge sur le bus et dans le cache que des
données utiles - la place occupée par les tags augmente
- Grandes lignes ?
- bonne localité spatiale ?
- effet de préchargement bénéfique
- on peut avoir un bus plus large
- localité spatiale médiocre ?
- espace du cache mal utilisé (beaucoup de
trous dans les lignes) - risque de conflits entre lignes
- bande passante gaspillée
- Compromis
- taille de ligne typique 64 octets
75Les écritures dans le cache
- Les écritures posent moins un problème de latence
que de bande passante - le problème de latence est résolu avec un tampon
décritures en attente - les écritures peuvent se faire lorsque la bande
passante nest pas utilisée par les lectures ou
lorsque le tampon est plein - Cache write-through
- lorsquune donnée est écrite dans le cache, elle
est écrite en même temps dans le niveau de cache
suivant ou en mémoire principale - si le niveau de cache suivant est write-through,
on propage lécriture de la même façon - en cas de miss sur écriture, on se contente
généralement de ne faire lécriture quen
mémoire, on ne va pas chercher la ligne manquante - facilite le maintient de la cohérence mémoire sur
machine multi-processeur - Cache write-back
- les écritures se font uniquement dans le cache.
Lorsquune ligne est évincée du cache et quelle
a été modifiée, elle est recopiée automatiquement
en mémoire - write-allocate en cas de miss sur écriture, on
va chercher la ligne manquante - meilleur utilisation de la bande passante et
débit décriture moindre
76Mémoire virtuelle
- Les adresses logiques (ou virtuelles, c.a.d
celles vues par le logiciel) ne sont pas
forcément celles qui sont utilisées par le
matériel pour adresser la DRAM (adresses
physiques) - avantage permet de voir un espace
dadressage plus grand que celui offert par la
quantité de DRAM disponible (et le nombre de
broches) - On utilise un mécanisme de translation dadresse
pour convertir les adresses logiques en adresses
physiques - en général, combinaison de techniques matérielles
et logicielles - lunité de mémoire sur laquelle on travaille
page mémoire - mécanisme de pagination
- les pages quon ne peut pas stocker en DRAM sont
stockées sur disque - on utilise une table des pages pour faire la
translation page logique / physique - pour accéder à une page qui se trouve sur disque,
on la recopie en DRAM et on met à jour la table
des pages
77Pagination
- Taille de page typique 4 Ko
- Table des page indexée avec le numéro de page
logique, fournit un numéro de page physique - La table des pages est stockée en DRAM, dans une
zone ne nécessitant pas de translation - exemple espace logique sur 32 bits, pages 4 Ko
(12 bits doffset), soit 220 pages logiques - Si on devait consulter la table des pages pour
chaque accès mémoire, le temps de translation
serait beaucoup trop long - On utilise un TLB (translation look-aside buffer)
- TLB cache de translation dadresse intégré sur
le processeur - contient un sous-ensemble de la table des pages
- typique 64/128 entrées, full-associative
78TLB
Exemple adresses logiques 32 bits, pages de 4
Ko, TLB 64 entrées
12 bits
20 bits
adresse logique
numéro de page logique
offset page
64 tags numéros de page logique
TLB
64 numéros de pages physiques qq bits de statut
12 bits
adresse physique
numéro de page physique
offset page
79Défauts de TLB
- Sur un défaut de TLB, une exception est générée
- le système consulte la table des pages en DRAM
- si la page est présente en DRAM, le système met
le TLB à jour puis rend la main au programme - latence quelques dizaines à quelques centaines
de cycles - si la page nest pas présente cest un défaut de
page - latence centaines de milliers de cycles (accès
disque)
80Mémoire virtuelle et caches
- Stocke-t-on dans le cache des adresses logiques
ou physiques ? - Adresse logique
- problème des synonymes sur les pages accessibles
en écriture - des pages logiques distinctes projetées sur la
même page physique - plusieurs copies de la même données dans le cache
- Adresse physique
- il faut accéder au TLB avant daccéder au cache,
ça augmente le temps daccès - En général
- cache L1 données index logique/tag physique
- cache L1 instructions adresses logiques ou index
logique/tag physique - cache L2 adresses physiques
81Index logique / tags physiques
- Si la somme du nombre de bits dindex cache et du
nombre de bits doffset ligne ne dépasse pas le
nombre de bits doffset page, lindex de
ladresse physique est égal à lindex de
ladresse logique - on peut commencer à indexer le cache avec
ladresse logique, sans attendre que laccès TLB
soit terminé - laccès TLB se fait en parallèle avec lindexage
du cache, il ne coûte rien - la comparaison sur les tags seffectue avec
ladresse physique - Si les pages sont trop petites, on peut
- augmenter lassociativité du cache pour réduire
le nombre de bits dindex - imposer au système de ne pas altérer les bits
qui dépassent lors de la translation
dadresse
82En résumé ...
- Les caches permettent de masquer la latence
daccès à la mémoire principale - lorsque la localité des références est bonne, la
majorité des load et des store sexécutent en 1
ou 2 cycles - Un cache permet de filtrer les requêtes vers les
niveaux de cache suivant on économise de la
bande passante - si on a un bus mémoire avec une faible bande
passante, on a intérêt à avoir un gros cache - Technique complémentaire le préchargement
- préchargement matériel
- exemple sur un cache miss, charger la ligne
manquante dans le cache et charger les lignes
suivantes dans un tampon de préchargement daccès
rapide - fonctionne bien pour les instructions et les
accès aux tableaux - préchargement logiciel instructions fetch
(plupart des ISA RISC) - il faut de la bande passante !
83Que peut faire le compilateur ?
- Améliorer la localité temporelle
- réarranger les boucles
- exemple multiplication de matrice
- Améliorer la localité spatiale bien utiliser les
lignes de cache - lire les tableaux 2D dans le bon sens
- éviter de faire des accès par pas supérieur à 1
- Utiliser les registres chaque fois que cest
possible - Préchargement logiciel
84Le problème des sauts
En moyenne, un saut se produit toutes les 7
instructions Pipeline de plus en plus long
actuellement gt 10 étages (Intel P6, Ultrasparc 3,
AMD Athlon ), bientôt 20 étages (Intel Pentium
4)
N étage auquel les sauts sont exécutés
inst / cycle
IPC
85La prédiction de branchements
Années 80
Années 90
PC PC4
prédiction PC
chargement
chargement
correction si mal prédit
décodage
décodage
saut
exécution
exécution
accès cache
accès cache
écriture registre
écriture registre
Branchements prédits non pris
On essaie de prédire les sauts
86Prédiction de branchement principes
- Il faut minimiser le nombre de mauvaises
prédictions - sur un branchement mal prédit, on retrouve le
problème des aléas de contrôle (bulles) - Utiliser le comportement passé des branchements
- la majorité du temps dexécution est passé dans
des boucles lorsquon rencontre un branchement,
on a de bonnes chances de lavoir déjà rencontré
dans le passé - le comportement des branchements nest pas
aléatoire, il est biaisé on peut prédire le
comportement futur du branchement en regardant
son comportement passé - Stocker linformation sur le comportement passé
de chaque branchement dans une table de
prédictions - table daccès rapide indexé avec le PC du
branchement - premier étage du pipeline
87Types de branchements
- Branchement inconditionnel
- le saut est systématique
- saut relatif
- adresse de saut statique, connue à la compilation
- exemple PC du branchement offset immédiat
- saut indirect
- adresse de saut dynamique, lue dans un registre
- retours de fonction, appels de fonctions, switch
case, pointeurs de fonctions - Branchement conditionnel
- dépend de lévaluation dune condition le
branchement peut être pris (on saute) ou non pris
(on passe à linstruction suivante) - comparaison entre 2 registres ou comparaison dun
registre avec 0 - en général, adresse de saut statique
- boucles, ifthenelse, switch case, ...
88Quelques statistiques ...
- En moyenne 1 instruction sur 5 est un branchement
(conditionnel ou inconditionnel) - les blocs de base sont petits (certains font 1 ou
2 instructions) - il est souhaitable de pouvoir prédire un
branchement par cycle - 75 des branchements sont conditionnels
- il est important de bien prédire les branchements
conditionnels - 40 des branchements conditionnels sont non pris
- prédire toujours non pris 60 de
mauvaises prédictions - 10 des branchements sont des retours de
fonction - 0 à 10 des branchements sont des appels de
fonction indirects - plus nombreux dans les codes orientés objet
- Restant branchements inconditionnels relatifs
89Les branchements dans le pipeline
Branchement identifié
prédiction
Adresse de saut relatif
chargement
décodage
Branchement conditionnel exécuté Saut indirect
exécuté
exécution
accès cache
écriture registre
90Les étapes de la prédiction
- Prédire quà ladresse indiquée par le compteur
de programme se trouve une instruction de
branchement - Identifier le branchement
- branchement conditionnel ou inconditionnel ?
- appel de fonction ?
- retour de fonction ?
- Prédire ladresse de saut
- Pour les branchements conditionnels, prédire si
le branchement est pris (1) ou non pris (0) - En cas de mauvaise prédiction, profiter du temps
de réparation du pipeline pour corriger la table
de prédiction
91Table de prédictions
Est-ce un branchement ? Si oui info table
(type, 0/1,adresse saut) PC lt F (PC, info
table) Si non PC lt PC 4
PC suivant
prédiction
PC courant
chargement
décodage
Mise à jour si mauvaise prédiction
exécution
accès cache
écriture registre
92Cache de branchements
ou BTB (Branch Target Buffer)
étiquettes
cibles
PC
?
Un branchement est détecté, il est prédit pris
adresse de saut
93Utilisation du BTB
- On stocke dans le BTB les sauts inconditionnels
et les branchements pris - La présence dune entrée dans le BTB entraîne un
saut à ladresse indiquée par le BTB - En labsence dune entrée BTB, on suppose que
linstruction nest pas un branchement ou est un
branchement non pris - En cas de mauvaise prédiction, corriger le BTB
- si on a manqué un saut, rajouter lentrée
manquante - si on a prédit un branchement pris alors quen
réalité il est non pris, enlever lentrée du BTB - si on a sauté à une mauvaise adresse, corriger
ladresse de saut dans le BTB
94BTB remarques
- Aussi appelé BTAC (branch target address cache)
- Utilisé sur les processeurs Intel P6, AMD Athlon,
IBM Power3, HP PA-8500 ... - Taille 32-2048 entrées
- Associativité 2/4
- Prédiction comme la dernière fois ( on prédit
le même comportement que la dernière fois) - fonctionne bien pour les inconditionnels relatifs
- le comportement est toujours le même
- pas optimal pour les branchements conditionnels
et les retours de fonction - le comportement nest pas toujours le même
- 20 de mauvaises prédictions sur les
conditionnels
95Prédiction comme la dernière fois
direction effective
prédiction
1
for (i0ilt1000i) for (j0jlt4j)
corps de la boucle
1
1
1
1
mal prédit
0
1
mal prédit
1
0
1
1
1
1
mal prédit
0
1
mal prédit
1
0
Branchement mal prédit à la première et à la
dernière itération
96Exercice
- On considère un branchement conditionnel ayant
une probabilité p dêtre pris. - En prédisant comme la dernière fois, quel taux de
mauvaises prédictions obtient-on sur ce
branchement ? - Quel taux de mauvaises prédictions obtiendrait-on
si on prédisait ce branchement toujours pris ?
Est-ce mieux que comme la dernière fois ?
97Le compteur 2 bits
prédit 0
prédit 1
1
1
1
1
0
1
2
3
0
0
0
0
- 4 états 2 bits
- la prédiction est obtenue en lisant le bit de
poids fort du compteur - il faut 2 mauvaises prédictions consécutives pour
changer la prédiction en partant dun état
fort (0 ou 3)
98Efficacité du compteur 2 bits
for (i0ilt1000i) for (j0jlt4j)
corps de la boucle
Branchement mal prédit à la dernière itération
seulement
- Le compteur 2 bits divise par 2 le nombre de
mauvaises prédictions sur les branchements
conditionnels - 10 de mauvaises prédictions sur les
conditionnels
99Compteur 2 bits mise en œuvre
- Première possibilité rajouter un compteur 2
bits dans chaque entrée du BTB - on bénéficie de lassociativité du BTB
- si un branchement est prédit pris mais quen
réalité il est non pris, on décrémente le
compteur et on laisse lentrée dans le BTB - Deuxième possibilité stocker les compteurs 2
bits dans une table spécifique, la BHT (branch
history table) - MIPS R10000, IBM Power3, PowerPC, AMD Athlon, HP
PA-8500 - pas de tags, juste 2 bits dans chaque entrée
- la BHT peut comporter plus dentrées que le BTB
- taille 256 à 2k entrées
- quand le compteur passe de létat 2 à létat 1,
lentrée dans le BTB nest plus nécessaire
100BHT
PC du branchement conditionnel
poids forts
poids faibles
n bits
BHT 2n compteurs 2 bits
Rem comme il ny a pas de tags, on ne peut pas
avoir dassociativité.
Interférences entre branchements. Problème
analogue aux conflits dans un cache direct mapped.
Le bit de poids fort du compteur donne la
prédiction
101Prédire les retours de fonction
- Utiliser une pile dadresses de retour
- pour chaque call exécuté, on empile ladresse de
retour - pour prédire un retour, au lieu dutiliser
ladresse fournie par le BTB, dépiler ladresse
au sommet de la pile et sauter à cette adresse - Peut être utilisé aussi pour prédire les retours
dinterruptions et dexceptions - Si pile suffisamment profonde, 100 de bonnes
prédictions - UltraSparc-3 (8 entrées), AMD Athlon (12 entr.),
Alpha 21264 (32 entr.) - ne pas abuser de la récursivité
- Principale difficulté 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 31 (MIPS) ...
102BTB / BHT
- Processeurs ayant à la fois un BTB et une BHT
- le BTB permet didentifier les branchements avant
décodage (conditionnel/inconditionnel/appel/retour
) et fournit ladresse de saut (sauf pour les
retours) - la BHT prédit la direction des conditionnels
- Processeurs ayant une BHT mais pas de BTB
- la prédiction se fait à létage de décodage
- si prédit non pris, pas de pénalité
- exemple