Sie sind auf Seite 1von 25

Le pipeline

Eduardo Sanchez
Laboratoire de Systèmes Logiques

Ecole Polytechnique Fédérale de Lausanne


Le pipelining

♦ Technique utilisée pour optimiser le temps d’exécution d’un


processus répétitif.
♦ Si le temps d’exécution d’un processus est Tp, l’exécution
séquentielle de m processus prend un temps Tt:
Tt = mTp
♦ Si le processus est décomposé en n étapes, chacune d’une durée
Ts, alors:
Tt = mnTs

Eduardo Sanchez
Page 2 Ecole Polytechnique Fédérale de Lausanne
♦ Solution en pipeline:
à chaque étape du processus est affectée une ressource
indépendante, de façon à pouvoir exécuter plusieurs processus en
parallèle, chacun à une étape différente
Ts

Tt = Tp + (m-1)Ts
= n Ts + (m-1) Ts
= (m+n-1) Ts

Tp

si m >> n alors Tt » m Ts

Eduardo Sanchez
Page 3 Ecole Polytechnique Fédérale de Lausanne
entrée clock

registre
Flowthrough time:
temps pour produire le
étape 1 premier résultat

registre
Clock cycle time:
••• temps entre deux résultats
(période d’une étape plus le
retard du registre)
étape n
Déterminé par l’étape la plus longue

registre

sortie

Eduardo Sanchez
Page 4 Ecole Polytechnique Fédérale de Lausanne
♦ Logiquement, un meilleur résultat est obtenu en augmentant le
nombre d’étapes: elles seront plus simples et la fréquence
d’horloge pourra ainsi être plus élevée. Cette approche présente
toutefois plusieurs problèmes:
∗ la décomposition fine est très difficile
∗ chaque nouvelle étape ajoute un nouveau retard de registre, augmentant
ainsi le flowthrough time
∗ l’indépendance entre les étapes est plus difficile à obtenir
∗ la vitesse de lecture des entrées et d’écriture des résultats augmente en
conséquence

Eduardo Sanchez
Page 5 Ecole Polytechnique Fédérale de Lausanne
Exemple de pipeline arithmétique
A
4 B
0 0

1 0 0 1 0

4 3

0
+

1 0
4

0
+

1 0
4

Eduardo Sanchez
Page 6 AxB Ecole Polytechnique Fédérale de Lausanne
4 4 3

1 0

+
4

registre registre registre CK


4 4 4

Eduardo Sanchez
Page 7 Ecole Polytechnique Fédérale de Lausanne
Pipeline des instructions d’un processeur

t t+1 t+2 t+3 t+4 t+5 t+6 t+7 t+8


i

i+1

i+2

i+3

i+4

Eduardo Sanchez
Page 8 Ecole Polytechnique Fédérale de Lausanne
♦ Utilisé depuis le CDC 6600
♦ Un pipeline parfait conduit à exécuter une instruction par cycle
♦ Pour une technologie donnée, la fréquence est plus élevée si le
nombre de niveaux (pas, phases, étapes) du pipeline augmente
♦ Il est tout à fait naturelle d’avoir un pipeline à trois phases: fetch,
decode, execute

Eduardo Sanchez
Page 9 Ecole Polytechnique Fédérale de Lausanne
Aléas d’un pipeline
♦ Aléas de structure:
l’implémentation empêche une certaine combinaison d’opérations
♦ Aléas de données:
le résultat d’une opération dépend de celui, pas encore produit,
d’une instruction précédente
♦ Aléas de contrôle:
l’exécution d’un saut est réalisée avec un certain retard
♦ Si un aléa est détecté, la solution la plus simple est d’arrêter le
pipeline (stall): les instructions qui précédent celle qui produit l’aléa
peuvent continuer, mais toutes les autres sont arrêtées jusqu’à la
disparition de l’aléa

Eduardo Sanchez
Page 10 Ecole Polytechnique Fédérale de Lausanne
Exemple: le processeur MIPS
♦ Phase IF:
recherche de l’instruction (fetch)
♦ Phase ID:
décodage de l’instruction et lecture des registres opérandes
♦ Phase EX:
exécution de l’opération ou calcul de l’adresse de mémoire
♦ Phase MEM:
accès de la mémoire ou écriture dans le PC de l’adresse de saut (la
condition a besoin du résultat de l’opération)
♦ Phase WB:
écriture dans un registre du résultat de l’opération (write back).
Ne suit pas la phase EX pour prévoir le cas d’un LOAD

Eduardo Sanchez
Page 11 Ecole Polytechnique Fédérale de Lausanne
♦ Certaines phases sont inutiles pour certaines instructions, mais
toutes les instructions ont une durée de 5 cycles
♦ Le PC doit pouvoir être incrémenté à chaque cycle
♦ On doit lire une instruction à chaque cycle
♦ On doit pouvoir lire une donnée à chaque cycle
♦ On doit disposer de deux MAR (memory address register), un pour
les données et un autre pour les instructions (avantage pour une
architecture de Harvard)
♦ Le format unique d’instruction est avantageux

Eduardo Sanchez
Page 12 Ecole Polytechnique Fédérale de Lausanne
PC Mémoire ALU
IMAR ← PC IR ← M[IMAR]
PC ← PC + 4
A ← RS1
B ← RS2
load ou store:
DMAR ← A + (partie du IR)
MDR ← B
opération:
ALUout ← A op (B ou (partie du IR))
saut conditionnel:
ALUout ← PC + (B ou (partie du IR))
cond ← RS1 op 0
if (cond) load:
PC ← ALUout MDR ← M[DMAR]
store:
M[DMAR] ← MDR
opération:
Rd ← ALUout
load:
Rd ← MDR

Eduardo Sanchez
Page 13 Ecole Polytechnique Fédérale de Lausanne
Aléas de données

♦ Deux instructions contigües, i et j, peuvent présenter trois types


d’aléa de données:
∗ RAW (read after write):
j essaie de lire une source avant que i ne l’ait modifiée
∗ WAR (write after read):
j essaie de modifier une destination avant que i ne l’ait utilisée comme
source (cas impossible dans MIPS)
∗ WAW (write after write):
j essaie d’écrire dans une destination avant que i ne l’ait fait: l’ordre normal
d’écriture est modifié (cas impossible dans MIPS)

Eduardo Sanchez
Page 14 Ecole Polytechnique Fédérale de Lausanne
♦ Exemple:

ADD R1, R2, R3 R1 ← R2 + R3


SUB R4, R1, R5 R4 ← R1 - R5

t t+1 t+2 t+3 t+4 t+5


ADD IF ID EX MEM WB

SUB IF ID EX MEM WB

R1 ← R2 + R3
on a besoin ici de R1,
dont la valeur est disponible
seulement deux coups d’horloge
plus tard

Eduardo Sanchez
Page 15 Ecole Polytechnique Fédérale de Lausanne
Solution: forwarding ou bypassing

♦ On cherche les opérandes à la sortie de l’ALU, sans attendre leur


écriture dans les registres
♦ On doit empiler n résultats à la sortie de l’ALU, où n est le nombre
de cycles où l’aléa peut être présent (3 dans l’exemple précédent)
♦ Le nombre de cycles peut être réduit de 1 si l’écriture dans les
registres a lieu pendant la première moitié de WB et la lecture des
opérandes pendant la seconde moitié de ID

Eduardo Sanchez
Page 16 Ecole Polytechnique Fédérale de Lausanne
registres

trajectoires
de bypass

Eduardo Sanchez
Page 17 Ecole Polytechnique Fédérale de Lausanne
♦ Exemple:

LW R1, 32(R6) R1 ← M[R6 + 32]


ADD R4, R1, R7 R4 ← R1 + R7
SUB R5, R1, R8
AND R6, R1, R7

t t+1 t+2 t+3 t+4 t+5


LW IF ID EX MEM WB

ADD IF ID EX MEM WB

M[R6 + 32]

R1 est cherché ici pour le ADD

Eduardo Sanchez
Page 18 Ecole Polytechnique Fédérale de Lausanne
♦ Le registre d’un LOAD ne peut pas être utilisé comme source d’une
opération postérieure, et cela pendant un certain nombre de
cycles: c’est un delayed LOAD
♦ Le nombre de cycles où le registre ne peut pas être utilisé est la
pénalité du LOAD (load delay ou load slot)
♦ Le forwarding n’apporte pas de solution à ce cas. La solution la plus
simple est ici le stall ou interlock: le pipeline est arrêté jusqu’à ce
que l’aléa disparaisse (un cycle dans notre exemple)
♦ Le compilateur peut empêcher que ces cas arrivent, ajoutant des
NOPs après le LOAD, dans le pire des cas

Eduardo Sanchez
Page 19 Ecole Polytechnique Fédérale de Lausanne
Aléas de contrôle
♦ Le pipeline doit chercher une nouvelle instruction avant que la
présente soit exécutée.
♦ Si l’instruction présente est un branchement conditionnel, avant
que l’adresse de saut soit calculée d’autres instructions ont été
cherchées.
♦ Pour notre exemple, la pénalité de branchement est de 3 cycles.
Elle augmente avec la profondeur du pipeline.
♦ Si le processeur est superscalaire à n voies, la pénalité de
branchement peut être multipliée par n.
♦ En moyenne, on trouve un branchement chaque 4-6 instructions...

Eduardo Sanchez
Page 20 Ecole Polytechnique Fédérale de Lausanne
♦ Le blocage du pipeline est possible seulement après le décodage de
l’instruction de saut, quand l’instruction suivante a déjà été
cherchée. Pour notre exemple:

t t+1 t+2 t+3 t+4 t+5 t+6 t+7 t+8 t+9


BRANCH IF ID EX MEM WB
i+1 IF IF ID EX MEM WB
i+2 IF ID EX MEM WB

♦ Une autre solution est celle de laisser régler le problème au


compilateur, comme dans le cas des LOADs
♦ Bien entendu, le traitement des interruptions complique encore les
choses...

Eduardo Sanchez
Page 21 Ecole Polytechnique Fédérale de Lausanne
Prédiction des sauts
♦ Prédiction statique:
∗ 486: par défaut le branchement n’est pas pris
∗ MicroSparc et HP-PA: les branchement en arrière sont pris
∗ MIPS et PowerPC: le compilateur peut choisir le sens
♦ Prédiction dynamique:
∗ la prédiction pour un même branchement peut changer en cours d’exécution,
d’après l’histoire du comportement du branchement
∗ solution simple: prendre le même comportement que la dernière fois. Solution
adoptée par l’Alpha et le K5.
∗ le Pentium utilise une Branch History Table (BHT) pour garder trace du
nombre de fois où le branchement a été pris
∗ le Pentium Pro est le premier processeur à employer une prédiction
dynamique à deux niveaux. Une mauvaise prédiction a une pénalité de 15
cycles au minimum

Eduardo Sanchez
Page 22 Ecole Polytechnique Fédérale de Lausanne
Pentium Pro
95%

90% 21064A
Branch prediction accuracy on SPECint92

21164
85%
PPC620
21064
UltraSparc
80%
Pentium
PPC601
75%
R8000

70%
MicroSparc-2
65%
SuperSparc
60%

486
40%

Always Always BTFN Compiler 1-bit 2-bit Two


Not Taken Taken Directed History History Level

Branch prediction algorithm

Eduardo Sanchez
Page 23 Ecole Polytechnique Fédérale de Lausanne
Le BHT possède une ligne par branchement.
Et chaque ligne est un compteur-décompteur à deux bits:
si le branchement est pris, on incrémente (avec arrêt à 3),
on décrémente autrement (avec arrêt à 0).
Un branchement est pris si le bit de poids fort de son
compteur correspondant est égal à 1.

Eduardo Sanchez
Page 24 Ecole Polytechnique Fédérale de Lausanne
Dans la prédiction dynamique à deux niveaux il y a un BHT par
branchement. Et le compteur de chaque ligne est une indication
du nombre de fois qu’une certaine séquence pris-non pris du
branchement a eu lieu: le pointeur de ligne est un registre à
décalage qui reçoit un 1 si le branchement est pris et un 0 dans
le cas contraire.

11
111010 10

•••
00
10 111010
•••
01
11

Eduardo Sanchez
Page 25 Ecole Polytechnique Fédérale de Lausanne

Das könnte Ihnen auch gefallen