Eduardo Sanchez Laboratoire de Systèmes Logiques Ecole …lsl · Eduardo Sanchez Page 3 Ecole...

Post on 14-Apr-2018

219 views 5 download

Transcript of Eduardo Sanchez Laboratoire de Systèmes Logiques Ecole …lsl · Eduardo Sanchez Page 3 Ecole...

Eduardo SanchezLaboratoire de Systèmes Logiques

Ecole Polytechnique Fédérale de Lausanne

Le pipeline

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 2

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:

♦ Si le processus est décomposé en n étapes, chacune d’une durée Ts, alors:

Tt = mTp

Tt = mnTs

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 3

♦ Solution en pipeline:à chaque étape du processus est affectée une ressource indépendante, de façon à pouvoir exécuter plusieurs processus enparallèle, chacun à une étape différente

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

Ts

Tp

si m >> n alors Tt » m Ts

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 4

registre

étape 1

registre

étape n

registre

entrée

sortie

clock

• • •

Flowthrough time:temps pour produire lepremier résultat

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

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 5

♦ 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ésentetoutefois 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 SanchezEcole Polytechnique Fédérale de LausannePage 6

Exemple de pipeline arithmétique

+

1 0

+

1 0

+

1 0 1 0

0

0

00

0

AB

AxB

4

4

5

3

4

4

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 7

+

1 0

0

4

registre registre registre

4 3

4

4 4 4

CK

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 8

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 SanchezEcole Polytechnique Fédérale de LausannePage 9

♦ 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 SanchezEcole Polytechnique Fédérale de LausannePage 10

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 SanchezEcole Polytechnique Fédérale de LausannePage 11

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 SanchezEcole Polytechnique Fédérale de LausannePage 12

♦ Certaines phases sont inutiles pour certaines instructions, maistoutes 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 unearchitecture de Harvard)

♦ Le format unique d’instruction est avantageux

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 13

PC Mémoire ALUIMAR ← PC IR ← M[IMAR]PC ← PC + 4

A ← RS1B ← RS2load ou store:DMAR ← A + (partie du IR)MDR ← Bopération:ALUout ← A op (B ou (partie du IR))saut conditionnel:ALUout ← PC + (B ou (partie du IR))

cond ← RS1 op 0if (cond) load:PC ← ALUout MDR ← M[DMAR]

store:M[DMAR] ← MDR

opération:Rd ← ALUout

load:Rd ← MDR

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 14

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 SanchezEcole Polytechnique Fédérale de LausannePage 15

♦ Exemple:

ADD R1, R2, R3 R1 ← R2 + R3SUB R4, R1, R5 R4 ← R1 - R5

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

ADD

SUB

IF ID EX MEM WB

IF ID EX MEM WB

R1 ← R2 + R3

on a besoin ici de R1,dont la valeur est disponible

seulement deux coups d’horlogeplus tard

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 16

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 lesregistres a lieu pendant la première moitié de WB et la lecture des opérandes pendant la seconde moitié de ID

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 17

registres

trajectoiresde bypass

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 18

♦ Exemple:

LW R1, 32(R6) R1 ← M[R6 + 32]ADD R4, R1, R7 R4 ← R1 + R7SUB R5, R1, R8AND R6, R1, R7

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

LW

ADD

IF ID EX MEM WB

IF ID EX MEM WB

M[R6 + 32]

R1 est cherché ici pour le ADD

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 19

♦ 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 SanchezEcole Polytechnique Fédérale de LausannePage 20

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, avantque 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 SanchezEcole Polytechnique Fédérale de LausannePage 21

♦ 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:

♦ 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...

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

BRANCH IF ID EX WB

IF IF

MEM

ID EX WBMEM

IF ID EX WBMEM

t+6 t+7 t+8 t+9

i + 1

i + 2

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 22

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 SanchezEcole Polytechnique Fédérale de LausannePage 23

Branch prediction algorithm

Bra

nch

pred

icti

on a

ccur

acy

on S

PECi

nt9

2

40%

60%

65%

70%

75%

80%

85%

90%

95%

AlwaysNot Taken

AlwaysTaken

BTFN CompilerDirected

1-bitHistory

2-bitHistory

TwoLevel

Pentium Pro

21064A

21164PPC620UltraSparcPentium

21064

R8000

PPC601

MicroSparc-2

SuperSparc

486

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 24

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 soncompteur correspondant est égal à 1.

Eduardo SanchezEcole Polytechnique Fédérale de LausannePage 25

Dans la prédiction dynamique à deux niveaux il y a un BHT parbranchement. Et le compteur de chaque ligne est une indicationdu nombre de fois qu’une certaine séquence pris-non pris dubranchement 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 dansle cas contraire.

111010

111010

1110

0010

0111

•••

•••