Etapes d`exécution des instructions

publicité
Etapes d'exécution des instructions
Etapes d'exécution des instructions
Recherche
instruction
Recherche
opérandes
Exécution
Ecriture
résultat
4. 1
Etapes d'exécution des instructions
1. Cycle d'exécution des instructions
Modèle de Von Neuman
• Le CPU fait une boucle sans fin pour exécuter le programme chargé
en mémoire centrale
• Chaque étape correspond à une modification d'un composant du
chemin de données (la mémoire ou les registres)
• Les étapes dépendent de l'instruction à exécuter : opération à
effectuer et mode d'adressage
• Quelle que soit l'architecture, on retrouve des étapes similaires
(même fonction) mais les étapes dépendent du chemin de données
4. 2
Etapes d'exécution des instructions
lecture en
lecture du ou
mémoire instruction
à l'adresse PC
des opérandes
lecture et
interprétation
des champs
d'instruction
écriture des résultats
calculs
traitement des interruptions
matérielles (souris, clavier, ...)
conditions d'erreur (division
par 0,overflow, ...), défaut de page
calcul de la nouvelle
valeur de PC
(dépend du format de l'instruction)
©W. Stallings « Computer Organization and Architecture »
4. 3
Etapes d'exécution des instructions
●
Lecture d’instruction
•
●
Décodage
•
•
●
•
Accès aux registres (si mode registre)
Calcul d’adresse et recherche d’opérandes mémoire (si mode mémoire)
Exécution
•
•
●
Lecture éventuelle des autres mots d'instruction (selon le format)
Ces valeurs sont stockées dans l'unité centrale dans des registres internes (registre
d'opérande et de données)
Recherche d’opérandes
•
●
Charger le 1er mot d'instruction de la mémoire principale vers le registre d'instruction
Calcul dans l’ALU pour les instructions arithmétiques ou logiques
Calcul de l’adresse de branchement pour les instructions de contrôle
Ecriture résultat
•
•
Modification de l’opérande destination pour les instructions arithmétiques ou logiques
Modification de PC pour les instructions de contrôle
4. 4
Etapes d'exécution des instructions
Exemple : PROCSI
RD1
RD2
R/Wreg
REG
SR
SP
ROP
CSreg
3
PC
IR
BUS
ADDRESS_BUS
RAD
DATA_BUS
16
AS
MEMOIRE
instructions
DS
données
4. 5
R/W
contrôle
Etapes d'exécution des instructions
Exemple de décomposition en étapes pour PROCSI
add R2, # 80
R2 <- R2 + 80
lecture instruction
rad  pc
ir  mem[rad]
pc  pc + 1
lecture du code instruction
décodage
rad  pc
rop  mem[rad]
pc pc + 1
lecture du 2ème mot d’instruction
(constante 80)
recherche
opérande
rd1  reg[ir(0..2)]
rd2  rop
ir(0..2) : bits 0, 1 et 2 de ir qui contiennent
le code du registre destination
reg[ir(0..2)] est le registre destination
exécution
rd1  rd1 + rd2
écriture
résultat
reg[ir(0..2)]  rd1
4. 6
Etapes d'exécution des instructions
ADD R2, #80
RD1
RD2
R/Wreg
6
REG
SR
CSreg
3
PC + 1
SP
ROP
IR
PC
BUS
000000 0100X010
DATA_BUS
16
ADDRESS_BUS
RAD
1) Lecture instruction
AS
MEMOIRE
PC:000000 0100X010
80
instructions
DS
R/W
données
4. 7
Légende :
en 1er
en 2ème
en 3ème
Etapes d'exécution des instructions
RD1
RD2
R/Wreg
6
REG
SR
CSreg
3
80 PC + 1
SP
ROP
IR
PC
000000 0100X010
BUS
16
2) décodage
DATA_BUS
ADDRESS_BUS
RAD
AS
MEMOIRE
PC :000000 0100X010
80
instructions
DS
R/W
données
4. 8
Etapes d'exécution des instructions
6
RD1
RD2
80
R/Wreg
010
SR
SP
ROP
6
REG
CSreg
3
PC
IR
000000 0100X010
BUS
16
3) recherche opérande
DATA_BUS
ADDRESS_BUS
RAD 17
AS
MEMOIRE
DS
000000 0100X010
instructions
R/W
données
4. 9
80
Etapes d'exécution des instructions
86
RD2 80
RD1 6
R/Wreg
6
REG
SR
+
SP
ROP
CSreg
3
PC
IR
BUS
ADDRESS_BUS
RAD 17
DATA_BUS
16
4) Exécution
AS
MEMOIRE
000000 0100X010
instructions
DS
R/W
données
80
4. 10
Etapes d'exécution des instructions
RD1
86
RD2
86 6
010
SR
SP
ROP
REG
R/Wreg
CSreg
3
PC
IR
BUS
16
5) Ecriture résultat
DATA_BUS
ADDRESS_BUS
RAD 17
AS
MEMOIRE
DS
000000 0100X010
instructions
R/W
données
4. 11
80
Etapes d'exécution des instructions
Exemple de décomposition en étapes pour PROCSI
add [80], R3
MEM[80] <- MEM[80] + R3
lecture instruction
rad  pc
ir  mem[rad]
pc  pc + 1
décodage
rad  pc
rop  mem[rad]
pc pc + 1
rop contient 80
rd1  reg[ir(3..5)]
rad  rop
rd2  mem[rad]
ir(3..5) : bits 3, 4 et 5 de ir qui contiennent
le numéro du registre source
reg[ir(3..5)] est le registre source (R3 ici)
rd2 contient MEM[80]
recherche opérande
exécution
rd1  rd1 + rd2
écriture résultat
mem[rad]  rd1
4. 12
Etapes d'exécution des instructions
2. Cycle d'exécution pipeline
Durée : 3 mn
Sens du parcours
Eve
Julie
Anne
Pour manger :
- il faut passer par tous les stands,
- 4 personnes sont servies en même temps.
Aladin
Une personne met 12mn pour être servie.
Toutes les 3mn une personne sort de la
chaîne.
4. 13
Etapes d'exécution des instructions
2.1. Les principes
• Une instruction est divisée en k étapes indépendantes
• Les étapes de plusieurs instructions s'exécutent en parallèle
• Si une étape dure t unités de temps alors pour n instructions :
– sans pipeline : t * k * n unités de temps
– avec pipeline : t * k + t * (n-1) unités de temps
SANS PIPELINE
8 ns
2 2 2 2
i
8 ns
2 2 2 2
i+1
8 ns
2 2 2 2 24 ns
i+2
AVEC PIPELINE
i:
2
i+1:
i+2:
4. 14
8 ns
2
2
2
2
2
2
2
2
2
2
2 12 ns
Etapes d'exécution des instructions
Contraintes pour que le pipeline soit efficace :
– chaque étape a la même durée : pas d'embouteillage !
– chaque instruction passe par les mêmes étapes : contrôle simplifié,
pas de trou dans le pipeline !

Architecture RISC (commercialisé ~ 1986) :
Jeu d'instructions et modes d’adressage simples,
● Accès mémoire par instructions spécialisées (LOAD/STORE),
● Débit d'une instruction par cycle : chaque étape dure un cycle
donc une instruction sort du pipeline sur chaque cycle
●
i:
i+1:
i+2:
1
1
1
1
1
1
1
1
1
4. 15
1
1
1
Etapes d'exécution des instructions
Jeu d'instruction RISC
• plus de registres
AMD 64 bits : registres AX, BX, CX, DX, DI, ... étendus à 32 bits (EAX,
EBX, ...) et à 64 bits (RAX, ...) + 8 registres R8, ..., R15
• moins de modes d'adressage : instructions de calcul en mode registre +
instructions LOAD /STORE
• instructions à 3 opérandes
ARM : add R1, R4, R5
• instructions conditionnelles
AMD 64 bits :
cmp eax, ebx
bnez suite
mov ecx, edx
cmp eax, ebx
cmovz ecx, edx
4. 16
Etapes d'exécution des instructions
2.2. Etages de base
•
LI lecture d'instruction dans le cache d'instruction
•
DE décodage
•
CA calcul dans l'ALU (ou calcul d'adresse mémoire ou de branchement)
•
MEM accès à la mémoire dans le cache des données (pour les instructions
LOAD/STORE)
•
ER écriture résultat (modification des registres ou de PC ou du cache de données)
4. 17
Etapes d'exécution des instructions
Schéma d'exécution temps / étage
Numéro d’instruction
Etages d’exécution
i:
LI
i+1:
DE
CA
ER
LI
DE
CA
ER
LI
DE
CA
ER
LI
DE
CA
ER
4
5
6
7
i+2:
Top d’horloge
i+3:
1
2
3
Sur le top d’horloge 4, il y a exécution en parallèle de l’écriture résultat (ER) de
l’instruction i, du calcul (CA) de l’instruction i + 1, du décodage (DE) de
l’instruction i+2 et de la lecture (LI) de l’instruction i+3
4. 18
Etapes d'exécution des instructions
Exemples de pipeline
• Pentium 4 : 20 étages
• AMD 64
– 12 étages pipeline entier et 17 étages pipeline flottant,
– 8 premiers étages = "Fetch/Decode" + "Pack/Decode" et "Dispatch",
communs aux entiers et aux flottants
• ARM
– ARM 7, 3 niveaux (lecture d'instruction, décodage, exécution)5
– StrongARM (ARM 8, 9 et SA-1) 5 niveaux (lecture d'instruction, lecture
des registres et test de branchement, exécution, écriture cache, écriture
registre)
4. 19
Etapes d'exécution des instructions
2.3. Comment ça marche ?
• Chaque étage est “autonome” : il contient les composants nécessaires pour
réaliser l'étape d'exécution
– LI: accès à la file d'instructions
– DE : accès aux registres
– CA : unité de calcul
– ER : accès registre et mémoire de données
• Accès en parallèle aux ressources
– Registres : deux accès en lecture et un en écriture simultanément
– Mémoire centrale : cache d'instructions et cache de données
• Deux étages successifs partagent les données
– registres de stockages intermédiaires
– l'étage i écrit le résultat, l'étage i+1 lit le résultat
4. 20
Etapes d'exécution des instructions
Exemple : Exécution de «add R2,R1,R2» suivi de «add R3,R4,R5»
R2 <-R1 + R2
R3 < - R4 + R5»
DE
LI
CA
ER
ALU
PC
Inst
Données
Registres R1=10
R2=8
R3=0
R4=6
R5=3
Mémoire
4. 21
Etapes d'exécution des instructions
Exécution de «add R2,R1,R2» suivi de «add R3,R4,R5»
DE
add R2,R1,R2
PC
Inst
CA
Add
R2
R1
R2
LI
TOP 1
ER
ALU
Données
Registres R1=10
R2=8
R3=0
R4=6
R5=3
Mémoire
4. 22
Etapes d'exécution des instructions
Exécution de «add R2,R1,R2» suivi de «add R3,R4,R5»
Inst
accès à R1
et R2
Add
R2
10
PC
Add
R3
R4
R5
add R3,R4,R5
CA
ER
8
DE
LI
TOP 2
ALU
Données
Registres R1=10
R2=8
R3=0
R4=6
R5=3
Mémoire
4. 23
Etapes d'exécution des instructions
Exécution de «add R2,R1,R2» suivi de «add R3,R4,R5»
CA
ER
PC
Inst
6
10 + 8
Add
Add
R3
accès à R4
et R5
R2
3
18
DE
LI
TOP 3
ALU
Données
Registres R1=10
R2=8
R3=0
R4=6
R5=3
Mémoire
4. 24
Etapes d'exécution des instructions
Exécution de «add R2,R1,R2» suivi de «add R3,R4,R5»
DE
CA
ER
9
LI
TOP 4
R3
accès à R2
Add
6+3
ALU
PC
Inst
Données
Registres R1=10
R2=8
R3=0
R4=6
R5=3
Mémoire
4. 25
18
Etapes d'exécution des instructions
Exécution de «add R2,R1,R2» suivi de «add R3,R4,R5»
DE
LI
TOP 5
CA
ER
accès à R3
ALU
PC
Inst
Données
Registres R1=10
R2=18
R3=0 9
R4=6
R5=3
Mémoire
4. 26
Etapes d'exécution des instructions
3. Aléas du pipeline
L'exécution en parallèle rend le contrôle de l'exécution plus complexe :
●
Gestion de l'accès simultané aux ressources partagées
Aléas de données : un étage peut lire une donnée avant qu'elle ait été
mise à jour
• Gestion des instructions de branchement : les instructions dans le pipeline ne
sont pas forcément exécutées
Aléas de contrôle
• Accès à des données d'autres unités fonctionnelles (cas superscalaire)
Aléas structurel
4. 27
Etapes d'exécution des instructions
3.1. Aléas de données
•
•
lecture avant écriture d’un résultat,
écriture du résultat avant lecture de la donnée (exécution dans le désordre)
Exemple:
ADD R1, R2, R3
SUB R4, R1, R5
instruction
ADD
SUB
Ecriture de R1
Aléa de type « lecture avant écriture »
LI
DE
LI
CA
DE
ER
CA
ER
lecture de R1
4. 28
Etapes d'exécution des instructions
Solution 1 : suspension d'exécution
ADD R1, R2, R3
SUB R4, R1, R5
ADD
SUB
LI
Ecriture de R1
DE
LI
CA
DE
ER
CA
ER
lecture de R1
Ecriture de R1
ADD
SUB
LI
DE
LI
CA
susp
ER
susp
DE
CA
lecture de R1
4. 29
ER
Etapes d'exécution des instructions
Solution 2 : bypass
• la sortie de l’ALU est utilisée directement
Pour l’exemple «add R1,R2,R3» suivi de «add R6,R1,R5», lors du décodage
de «add R6,R1,R5», on utilise la valeur de bypass (i.e sortie de l'ALU après calcul
de R2 + R3) au lieu d’aller lire la valeur de R1 dans la RAM.
DE
CA
ER
PC
8
8+0
R1
Add
accès à R1
et R5
R6
8
3
LI
ALU
8
4. 30
Etapes d'exécution des instructions
Exemple de bypass avec l'ARM SA-110
Programme
LDR r1,[r0 + 4]
MOV r2,r1
4. 31
Etapes d'exécution des instructions
3.2. Aléas de contrôle
Les instructions qui suivent une instruction de branchement (jmp) ne doivent pas
être exécutées.
Pourtant, elles sont dans le pipeline  suspension du pipeline
i : jmp 360
i+1
LI
DE
LI
i+2
i+3
A la fin du décodage du « jmp » on sait qu’il s’agit d’un saut
- il ne faut pas exécuter les instructions suivantes
- il faut suspendre l’exécution jusqu’à ce que l’adresse de branchement
soit connue → étage ER
4. 32
Etapes d'exécution des instructions
A la fin de l’étage ER du jmp, on connaît l’adresse de branchement (PC a été modifié)
→ l’exécution peut reprendre à l'adresse de branchement
H
i : jmp 360
i+1
1
LI
2
DE
LI
3
CA
4
ER
susp susp
i+2
susp susp
i+3
susp
inst 360
5
LI
DE
CA
ER
Pénalité de 3 tops d’horloge !!!
Problème : - on a exécuté l'étape LI de i+1 inutilement
- l'étape LI est un accès mémoire donc coûteux
4. 33
Etapes d'exécution des instructions
Solution : branchement avec délai
jmp 360
i+1
LI
DE
CA
ER
LI
DE
CA
i+2
susp susp
i+3
susp
Toujours exécutée
ER
LI
DE
CA
ER
inst 360
• Si i est une instruction de saut, on exécute toujours l'intruction i+1
•Après décodage du jmp, on sait qu’il faut suspendre l’instruction i+2
→ pas d’étape LI inutile
• Le compilateur se charge de choisir l'instruction qu'il faut placer dans le délai
4. 34
Etapes d'exécution des instructions
Branchement avec délai : Optimisation de code
Objectif : remplir au mieux le pipeline tout en gardant la sémantique du programme
→ le compilateur « choisit » l’instruction à mettre derrière le branchement
→ réorganisation du code ou insertion de NOP (instruction "no operation")
Insertion de NOP
Instruction avant
ADD R1,R2,R3
jmp boucle
délai
ADD R1,R2,R3
jmp boucle
délai
ADD R1,R2,R3
jmp boucle
NOP
jmp boucle
ADD R1,R2,R3
4. 35
Généré par compilateur
Etapes d'exécution des instructions
Branchement avec délai: cas des branchements conditionnels (bcc)
on sait dans l’étage DE du bcc si le branchement doit être pris ou non
→ avec le délai, on n'a aucune suspension dans le cas où le branchement est pris
LI
Bcc 360
i+1
Toujours exécutée
bcc PRIS
bcc NON PRIS
DE
CA
ER
LI
DE
CA
ER
inst 360
susp
susp
LI
DE
LI
DE
CA
ER
Inst i + 2
4. 36
CA
ER
Etapes d'exécution des instructions
• Dans le cas des branchements conditionnels, pour savoir
quelle instruction mettre dans le délai, il faut “décider” si le
branchement sera pris ou non : c'est la prédiction de
branchement
• Une première prédiction est faite de façon statique (on
choisit d'office que le branchement est pris par exemple); le
compilateur tient compte de ce choix pour réorganiser le code
• Ensuite on corrige les prédictions de façon dynamique : la
partie contrôle change la prédiction si elle était mauvaise
4. 37
Etapes d'exécution des instructions
Branchement conditionnel avec délai: Optimisation de code
Prédiction STATIQUE
Instruction avant
Instruction cible
Instruction après
ADD R1,R2,R3
si R2 =0 alors
délai
MOV R0,R1
SUB R5,R6,R7
ADD R1,R2,R3
si R1 =0 alors
délai
MOV R0,R1
SUB R5,R6,R7
ADD R1,R2,R3
si R1 =0 alors
délai
MOV R0,R1
SUB R5,R6,R7
pas de dépendance entre inst. avant
et condition de test
si R2 =0 alors
ADD R1,R2,R3
MOV R0,R1
SUB R5,R6,R7
dépendance entre inst. avant et
condition de test.
spéculation branch pris
ADD R1,R2,R3
si R1 =0 alors
SUB R5,R6,R7
MOV R0,R1
SUB R5,R6,R7
4. 38
dépendance entre inst. avant et
condition de test.
spéculation branch non pris
ADD R1,R2,R3
si R1 =0 alors
MOV R0,R1
SUB R5,R6,R7
Etapes d'exécution des instructions
Prédiction de branchement DYNAMIQUE : (bas niveau, par la partie contrôle)
Pendant que le processeur travaille, l’unité de pré-extraction des instructions travaille
et lit les instructions qu’il faudra exécuter bientôt
→ prédiction spéculative du fait que le branchement courant sera pris ou pas.
Algorithme de Smith (prédiction à 2 bits):
pris
non pris
non pris
P
non pris
FP
pris
non pris
FNP
pris
P: Pris
FP: Faiblement Pris
NP
pris
FNP: Faiblement Non Pris
NP: Non Pris
4. 39
Etapes d'exécution des instructions
Pourquoi tant de mal?
•
Instructions de branchement : 20% des instructions d’un programme
•
Branchement conditionnel pris dans 60% des cas
•
Branchement pris
- des instructions ont été chargées dans le pipeline inutilement (il faut
stopper leur exécution)
- l’instruction peut ne pas être dans la file des instructions (ni dans le
cache d’instruction, ni dans la mémoire centrale) -> accès disque ->
coûteux !
•Branchements avec délais + optimisation de code :
dans les DSP (ex : téléphones portables)
•Dans les CPU actuels, la prédiction des branchements
permet d'anticiper l'exécution dans le désordre
4. 40
Etapes d'exécution des instructions
4. Une version pipeline de PROCSI: PIPSI
• Pipeline de 4 étages: LI (instruction fetch), DE (decode), EX (execute), EC
(écriture)
• Opérations arithmétiques/logiques : seulement modes registre/registre et
immédiat / registre
• Accès mémoire par instruction load/store en mode direct et indirect
• Toutes les instructions sont codées sur 2 mots de 16 bits
• Cache de données (1 cycle processeur)
• Cache d’instruction (1 cycle processeur)
• Le banc de registres internes (REG) permet 2 accès lecture et un accès
écriture simultanément (i.e sur un même top)
4. 41
Etapes d'exécution des instructions
FEtch
DEcode
EXecute
ECriture
RD1
RD2
Pcde
Pcex
IR
Irde
Irex
Cache
instruction
3
3
in
Ad-read1
Ad-read2
3
Cache
données
REG
Ad-write
4. 42
Adress
Data-in
PC
+2
Data-out
ROPex
Address
ROPde
out2
Data_high
ROP
out1
Data_low
resex
Etapes d'exécution des instructions
FE
accès mémoire inst.
1er mot dans ir
2ème mot dans rop
add R7, #1
DE
recherche
d'opérandes
FE
ir <- memi[pc]
DE
rd1 <- rop
rop <- memi[pc+1] rd2 <- reg[ir[0..2]]
pcde <- pc
pc <- pc + 2
irde <- ir
ropde <- rop
store [80], R0
EX
EC
calculs
écriture reg
lecture mém. data écriture mém. data
EX
resex <- rd1 + rd2
EC
reg[irex[0..2]] <- resex
pcex <- pcde
irex <- irde
ropex <- ropde
EX
DE
rd1 <- reg[ir[3..5]] resex <- rd1
pcex <- pcde
rop <- memi[pc+1] pcde <- pc
irde <- ir
irex <- irde
pc <- pc + 2
ropde <- rop
ropex <- ropde
FE
ir <- memi[pc]
4. 43
EC
memd[ropex] <- resex
Téléchargement