Chapitre 3 : Introduction aux architectures de systèmes

Download Report

Transcript Chapitre 3 : Introduction aux architectures de systèmes

Chapitre 3 : Introduction aux
architectures de systèmes embarqués
1. Architectures RISC et difficultés (rappel)
2. Parallélisme d’instructions
3. Architectures pour ILP (superscalaire, SIMD et
VLIW)
4. Déroulement de boucles
5. Prédiction de branchement
1
INF3610 Systèmes embarqués
Architecture RISC (rappel)
•
•
•
Cycle d'horloge court
Petit nombre de cycles/instruction
Efficacité du pipeline d'instruction
•
Comparaisons avec CISC (Complex Instruction-Set Computer) :
– Pour diminuer les accès mémoires autrefois dispendieuses (de plus, on ne
connaissait pas encore la mémoire cache).
– Pour simplifier la construction des compilateurs.
– Instruction complexe en langage assembleur pour simplifier le mapping
avec un langage de programmation de haut niveau.
– Pipeline difficile à réaliser donc Ncpi > 1.
– N.B. Le CISC est réapparu avec le processeur configurable (RISC + DSP
+VLIW + CISC)
2
INF3610 Systèmes embarqués
Architecture RISC (rappel)
•
•
•
•
DLX peut être réalisé avec 5 étapes du pipeline:
LI: lecture d'instruction
DI: décodage de l'instruction et lecture des registres
EX: exécution et calcul de l'adresse effective (réalisation
de l'opération indiquée par le code d'opération ou addition
pour accès mémoire ou addition pour branchement/saut)
• MEM: accès mémoire ou fin de branchement (exécution
de l'accès mémoire ou du branchement)
• ER: écriture du résultat dans le banc de registres
3
INF3610 Systèmes embarqués
Architecture RISC (rappel)
4
INF3610 Systèmes embarqués
Architecture RISC (rappel)
5
INF3610 Systèmes embarqués
Le pipeline DLX
Adresse calculée
Condition de branchement
LI/DI
4
ADD
M
U
X
NCP
C
P
Zéro?
RI[6:10]
Mémoire
instructions
EX/MEM
DI/EX
A
RI
RI[11:15]
Donnée à écrire en
registre
M
U
X
Registres
MEM/ER
Branchement pris
MEM/ER
UAL
B
Mémoire
données Valeur chargée
Adresse
M
U
X
(DMC)
M
U
X
Donnée à écrire
RI[16:31]
Étendre
RI[0:5]
Imm
Instruction
Instruction
6
INF3610 Systèmes embarqués
Donnée à écrire en
registre
Architecture RISC (rappel)
•
•
•
•
Objectif du concepteur: équilibrer la taille des étages du pipeline.
L'accélération liée au pipeline = nombre d'étages
= 5
Remarques:
– La difficulté principale de la technique du pipeline est ce qu'on
appelle les aléas du pipeline, en effet il existe des situations,
appelées aléas de données, qui empêchent l'instruction suivante du
flux d'instruction de s'exécuter au cycle d'horloge qui lui est
affecté.
– 3 types aléas: structurels, données et de contrôle
– Par conséquent, les aléas réduisent la performance du pipeline
(accélération inférieure à 5)
Les aléas (ou dépendance) de données et de contrôle sont ceux qui
affectent l’accélération de 5 (typiquement entre 3.5 et 5 selon la
stratégie)
7
INF3610 Systèmes embarqués
Regardons plus en détail ces dépendances
•Dépendances de données
•aléas de type LAE (ADD démarre
avant que LD soit complété)
•antidépendances
•aléas de type EAL (à cause du
délai d’exécution de l’opération
DIV, LD est complété avant que
le DIV soit complété).
LD
F0, 0(R1)
ADDD
F4, F0, F2
SD
0(R1), F4
LD
F0, 0(R1)
DIV
F4, F0, F2
SD
0(R1), F4
LD
F0, 0(R1)
DIV
F4, F0, F2
SD
0(R1), F4
8
INF3610 Systèmes embarqués
Regardons plus en détail ces dépendances
•dépendances de sortie
•aléas de type EAE
(ADD termine avant DIV)
LD
F0, 0(R1)
DIV
F4, F0, F2
SD
0(R1), F4
LD
F0, 0(R1)
ADD
F4, F0, F2
SD
0(R1), F4
9
INF3610 Systèmes embarqués
Regardons plus en détail ces dépendances
•
•
•
LAE (lecture après écriture): j essaie de lire la source
avant que i ne l'ait écrite: j obtient alors l'ancienne
valeur. C'est l'aléas le plus fréquent.
EAL (écriture après lecture): j essaie d'écrire dans une
destination avant qu'elle ne soit lue par i. i obtient alors
par erreur la nouvelle valeur.
EAE (écriture après écriture): j essaie d'écrire une
opérande avant qu'il ne soit écrit par i. L'écriture se fait
alors dans le mauvais ordre, et laisse dans la destination
la valeur écrite par i plutôt que celle écrite par j.
10
INF3610 Systèmes embarqués
Regardons plus en détail ces dépendances
•Dépendances de contrôle
instruction1 possède une dépendance
de contrôle par rapport condition1
instruction2 possède une dépendance
de contrôle par rapport condition1
if (condition1)
instruction1;
else
instruction2;
if (condition3)
instruction3;
instruction3 possède une dépendance
de contrôle par rapport condition3
•Le compilateur doit analyser ces dépendances
11
INF3610 Systèmes embarqués
Regardons plus en détail ces dépendances
•Dépendances de contrôle
instruction1 possède une dépendance
de contrôle par rapport condition1
instruction2 possède une dépendance
de contrôle par rapport condition1
instruction3 possède une dépendance
de contrôle par rapport condition3
...
SUBI
R1,R1,#8
BEQZ
R1, sortie
LD
F6,0(R1)
ADDD
F8,F6,F2
SD
0(R1),F8
SUBI
R1,R1,#8
BEQZ
...
R1, sortie
sortie
•Le compilateur doit analyser ces dépendances
12
INF3610 Systèmes embarqués
Parallélisme d’instruction
• Parallélisme d’instructions (ILP)
Il faut trouver des séquences d’instructions
indépendantes qui se recouvriront dans le
pipeline.
• Très efficace au niveau du point flottant
• Exemple avec 2 techniques d’optimisation
• Ordonnancement simple
• Déroulage des boucles
for (i=1; i<=1000; i++)
x[i] = x[i] + s;
Latence
FP-ALU
LD
SD
Branch
2
1
0
1
Réf.: Computer Architecture, A Quantitative Approach, H&P, 1996. p228-251
13
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
Code DLX sans optimisation
B:
LD
ADDD
SD
SUBI
BNEZ
F0, 0(R1)
F4, F0, F2
0(R1), F4
R1, R1, #8
R1, B
;
;
;
;
;
chargement element vecteur
x[i] = x[i] + s;
ranger
pointeur (double-mot)
R1 <> 0
Analyse
B:
LD
F0, 0(R1)
suspension
ADDD
F4, F0, F2
suspension
suspension
SD
0(R1), F4
SUBI
R1, R1, #8
BNEZ
R1, B
suspension
1
2
3
4
5
6
7
8
9
1 itération =
9 cycles
1000 itérations = 9000 cycles
14
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
• On a donc un modèle pipeline avec une seule unité EX
qui peut jouer le rôle d’entier ou de flottante. Lorsqu’on
fait un ADDD (addition sur un double mot), ça demande
4 cycles dans l’unité EX alors que si on fait un ADD
(addition sur un entier) ça demande 1 cycle seulement.
15
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
• Notez également que les 3 étages du ADDD peut être
pipelinées si il n’y a pas de dépendances de données:
Exemple 1: ADDD et SD aux cycles 5 et 6 (page
précédente)
Exemple 2: Deux ADDD consécutifs (ADDD et ADDD aux
cycles 5, 6, 7, 8 et 9 de la page suivante)
16
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
• En résumé on aura:
Instruction produisant
le résultat
Instruction
Latence en cycles
utilisant le résultat d’horloge
ADDD
ADDD
3
ADDD
SD
2
LD sur un double
ADDD
1
LD sur un double
SD sur un double
0
17
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
• Schématiquement on aura:
18
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
Autres modèles possibles:
• Modèle pipeline sauf pour EX qui supporte à la fois les
opérations entières et flottantes.
• Modèle pipeline sauf pour EX qui supporte des
opérations entières et flottantes distinctes.
Réf.: Computer Architecture, A Quantitative Approach, H&P, 1996. p228-251
19
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
Ordonnancement
B:
LD
F0, 0(R1)
suspension
ADDD
F4, F0, F2
SUBI
R1, R1, #8
BNEZ
R1, B
SD
8(R1), F4
1
2
3
4
5
6
1 itération =
6 cycles
1000 itérations = 6000 cycles
A = 9000/6000
= 1.5
Réf.: Computer Architecture, A Quantitative Approach, H&P, 1996. p228-251
20
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
Déroulage de la boucle pour 4 itérations
B:
LD
ADDD
SD
F0, 0(R1)
F4, F0, F2
0(R1), F4
LD
ADDD
SD
F6, -8(R1)
F8, F6, F2
-8(R1), F8
LD
ADDD
SD
F10, -16(R1)
F12, F10, F2
-16(R1), F12
LD
ADDD
SD
F14, -24(R1)
F16, F14, F2
-24(R1), F16
SUBI
BNEZ
R1, R1, #32
R1, B
; retrait des SUBI et
; BNEZ à chaque
; itération
1 itération =
250 itérations =
A = 9000/6750
27 cycles
6750 cycles
= 1.33
Réf.: Computer Architecture, A Quantitative Approach, H&P, 1996. p228-251
21
INF3610 Systèmes embarqués
Technique d’optimisation pour le point flottant (suite)
Déroulage + Ordonnancement
B:
;
LD
LD
LD
LD
F0, 0(R1)
F6, -8(R1)
F10, -16(R1)
F14, -24(R1)
ADDD
ADDD
ADDD
ADDD
F4, F0, F2
F8, F6, F2
F12, F10, F2
F16, F14, F2
SD
SD
SD
SD
0(R1), F4
-8(R1), F8
-16(R1), F12
-24(R1), F16
SUBI
BNEZ
SD
R1, R1, #32
R1, B
8(R1), F16
1 itération =
250 itérations =
A = 9000/3500
14 cycles
3500 cycles
= 2.57
; 8 - 32 = -24
Réf.: Computer Architecture, A Quantitative Approach, H&P, 1996. p228-251
22
INF3610 Systèmes embarqués
Architectures pour ILP
(Superscalaire, SIMD, VLIW)
Idée: Exécuter plus d’une instruction par cycle
Impact: CPI < 1 !
Solutions:
Architecture superscalaire
plusieurs pipelines travaillent en parallèle sur
plusieurs instructions
Architecture VLIW (Very Long Instr. Word)
Une seule instruction effectue plusieurs traitements
23
INF3610 Systèmes embarqués
Exemple de superscalaire (ARM Cortex A8)
24
INF3610 Systèmes embarqués
Architecture superscalaire
Plusieurs pipelines en parallèle
•Ordonnancement dynamique selon le cours de l’exécution
Exemple 1:
25
INF3610 Systèmes embarqués
Architecture superscalaire
Plusieurs pipelines en parallèle
•Ordonnancement dynamique selon le cours de l’exécution
Pour 2 pipelines on aura:
INSTRUCTION
ENTIÈRE
FLOTTANT
ENTIÈRE
FLOTTANT
ENTIÈRE
FLOTTANT
LI
DI
EX
ME ER
LI
DI
E1
E2
E3
LI
DI
EX
ME ER
LI
DI
E1
E2
E3
LI
DI
EX
ME ER
LI
DI
E1
E2
…
En
ME ER
…
En
ME ER
…
En
E3
ME ER
26
INF3610 Systèmes embarqués
Architecture superscalaire
Exemple: Paralléliser:
B:
LD
ADDD
SD
SUBI
BNEZ
F0,0(R1)
F4,F1,F2
0(R1), F4
R1, R1, #8
R1, B
Problème:
Le microprocesseur ne peut pas résoudre tous les aléas
de données.
Solution:
Trouver un ordonnancement déroulé sans délai ni
suspension qu’on peut séparer sur 2 pipelines.
27
INF3610 Systèmes embarqués
Architecture superscalaire
Le calcul de l’addition se fait
en 3 cycles
Au moins 3 itérations doivent
être déroulées …
Pour 1000 éléments
(ou 200 itérations)
1 itération =
200 itérations =
A = 9000/3400
17 cycles
3400 cycles
= 2.65
B:
LD
LD
LD
LD
LD
ADDD
ADDD
ADDD
ADDD
ADDD
SD
SD
SD
SD
SUBI
BNEZ
SD
F0,0(R1)
F6,-8(R1)
F10,-16(R1)
F14,-24(R1)
F18,-32(R1)
F4,F0,F2
F8,F6,F2
F12,F10,F2
F16,F14,F2
F20,F18,F2
0(R1),F4
-8(R1),F8
-16(R1),F12
-24(R1),F16
R1, R1, #40
R1, B
8(R1),F16
28
INF3610 Systèmes embarqués
Architecture superscalaire
PIPELINE ENTIER
B:
LD
LD
LD
LD
LD
SD
SD
SD
SD
SUBI
BNEZ
SD
PIPELINE FLOTTANT
B:
F0,0(R1)
F6,-8(R1)
F10,-16(R1)
F14,-24(R1)
F18,-32(R1)
0(R1),F4
-8(R1),F8
-16(R1),F12
-24(R1),F16
R1, R1, #40
R1, B
8(R1),F16
ADDD
ADDD
ADDD
ADDD
ADDD
F4,F0,F2
F8,F6,F2
F12,F10,F2
F16,F14,F2
F20,F18,F2
1 itération =
200 itérations =
A = 9000/2400
12 cycles
2400 cycles
= 3.75
29
INF3610 Systèmes embarqués
En résumé:
4 modèles possibles pour une architecture (super) scalaire:
1. Modèle pipeline avec une seule unité EX (elle aussi
pipelinable) qui supporte à la fois les opérations entières
et flottantes (ref slide 15 à 18).
2. Modèle pipeline sauf pour EX (non pipelinable) qui
supporte à la fois les opérations entières et flottantes (ref
slide 19).
3. Modèle pipeline sauf pour EX (non pipelinable) qui
supporte des opérations entières et flottantes distinctes
(ref slide 19).
4. Modèle pipeline avec pour EX plusieurs pipelines en
parallèle (ref slide 25).
30
INF3610 Systèmes embarqués
Architecture VLIW
31
INF3610 Systèmes embarqués
Architecture VLIW
• Une architecture VLIW utilisent plusieurs unités
fonctionnelles indépendantes.
• Plutôt que d’essayer de lancer plusieurs instructions
indépendantes vers les unités, une VLIW met plusieurs
opérations dans une seule instruction très longue, d’où
son nom.
32
INF3610 Systèmes embarqués
VLIW
• Voir aussi:
http://marcel.developpez.com/cours/systeme/architectureordinateur/html/node222.html
33
INF3610 Systèmes embarqués
Architecture VLIW
Ordonnancement statique
le compilateur cherche plusieurs
instructions indépendantes et les encode en
une seule
Des unités spéciales exécutent chaque
d’instruction
Exemple:
LD F0,0(R1) || LD F6,-8(R1) || ADDD F10,F12,F16 ||
ADDD F11,F13,F17 || bnez r1,b || sub r2,r2,#1
34
INF3610 Systèmes embarqués
Architecture VLIW
UNITÉ TRANSFERT 1
UNITÉ TRANSFERT 2
LD F0,0(R1)
LD F10,-16(R1)
LD F18,-32(R1)
LD F6,-8(R1)
LD F14,-24(R1)
SD 0(R1),F4
SD -16(R1),F12
SD -32(R1),F20
UNITÉ EXÉCUTION 1
UNITÉ EXÉCUTION 2
ADDD F4,F0,F2
ADDD F12,F10,F2
ADDD F20,F18,F2
ADDD F8,F6,F2
ADDD F16,F14,F2
SD -8(R1),F8
SD -24(R1),F16
SUBI R1, R1, #40
BNEZ R1, B
suspension
1 itération =
200 itérations =
A = 9000/2000
UNITÉ ENTIÈRE
10 cycles
2000 cycles
= 4.5
35
INF3610 Systèmes embarqués
Exemple de
VLIW
(TMS320C6472)
36
INF3610 Systèmes embarqués
Attention il y a une limite à dérouler les boucles et à
vouloir tout paralléliser: parallélisme de boucle
L’itération 1 indépendante de
l’itération 2
A[i] de l’itération 2 dépend de
A[i+1] de l’itération 1
Parallélisme impossible car les
boucles doivent s’exécuter dans l’ordre
for (i=1; i<=1000; i++)
x[i] = x[i] + s;
for (i=1; i<=100; i++){
A[i+1]= A[i] + C[i];
B[i+1]= B[i] + A[i+1]; }
for (i=1; i<=100; i++){
B[i] de l’itération 2 dépend de
A[i] = A[i] + B[i];
B[i+1] de l’itération 1
B[i+1]= C[i] + D[i]; }
Sauf qu’il n’y a pas de dépendance circulaire…
37
INF3610 Systèmes embarqués
Il y aussi les dépendances de données à travers
les itérations de boucle: parallélisme de boucle
B[i] de l’itération 2 dépend de
B[i+1] de l’itération 1
Sauf qu’il n’y a pas de dépendance
circulaire…
Après transformation…
for (i=1; i<=100; i++){
A[i] = A[i] + B[i];
B[i+1]= C[i] + D[i]; }
A[1] = A[1] + B[1]
for (i=1; i<=99; i++){
B[i+1] = C[i] + D[i];
A[i+1] = A[i+1] + B[i+1];
}
B[101] = C[100]+D[100];
•Travail du compilateur : minimiser les dépendances
38
INF3610 Systèmes embarqués
Prédiction de branchement
• Prédiction statique
• Prédiction dynamique
• Délai de branchement
39
INF3610 Systèmes embarqués
Prédiction statique
• Hennessy et Patterson on amassé suffisamment de
statistiques pour affirmer que tous les processeurs ont une
fréquence d'instructions de branchement conditionnel de
11% à 17%, alors que la fréquence des instructions de
branchement inconditionnelles varie entre 2% et 8%.
• La plupart des branchements à partir du test de bit ne sont
pas effectués (trivial sur 32 ou 64 bits)
• Pour le DLX ils ont trouvé que:
– 53% des branchements cond. sont effectués.
– 75% des branchements exécutés sont des branchements avant
40
INF3610 Systèmes embarqués
Prédiction statique
• Par conséquent, à l'aide de ce genre de prédictions,
deux actions sont possibles:
1. Considérer que le branchement n'est pas effectué ou
2. Considérer que le branchement est effectué. L'adresse
de la destination doit être connue avant le résultat du
branchement.
• Remarque: dans les deux cas, si la prédiction
s'avère fausse, on "flush" le pipeline et on doit tout
remettre comme avant (dangereux si on fait des
écritures en mémoire).
41
INF3610 Systèmes embarqués
Prédiction dynamique (matérielle)
• On utilise un tampon de prédiction de branchement, c’està-dire une petite cache auquel on accède par l'adresse de
l'instruction à l'étage LI du pipeline ou par 2 bits attachés à
chaque bloc du cache instruction et lu avec l'instruction.
42
INF3610 Systèmes embarqués
Délai de branchement
• Soit un délai de branchement de n cycles :
Instruction de branchement
successeur 1 suivant
successeur 2 suivant
.
.
.
successeur n suivant
dest du branch si effectué
•
#on ajoute un ordonnancement de n
#instructions non dommageables
où les successeurs sont dans les délais de branchement. Ce sont des
instructions non dommageables et autant que possible utile, sinon on
peut utiliser des NOP (No Operation).
INF3610 Systèmes embarqués
43
Délai de branchement
• Il existe au moins 3 façons d'ordonnancer
un délai:
1. Avant le branchement
2. À partir de la cible
3. Après le branchement
44
INF3610 Systèmes embarqués
Délai de branchement
45
INF3610 Systèmes embarqués