- 2 -
EXERCICE :
OPTIMISATION
DE
PROGRAMME
POUR
UN
PROCESSEUR
PIPE-LINE
Le processeur utilisé est caractérisé par :
formats : mot mémoire de 32 bits, adresses 32 bits, traitant des entiers codés
sur 32 bits et des flottants codés sur 64 bits
registres : 16 registres pour valeurs entières R0, ..., R15, avec R0 = 0
16 registres pour valeurs codées en flottant : F0, ..., F15
modes d'adressage Registre Ri
Avec déplacement par rapport à un registre Radr : depl(Radr)
Relatif au compteur programme pour les branchements
jeu LDW Rdest, depl(Radr) Rdest := Mém(Radr+depl)
LDL Fdest, depl(Radr) Fdest := Mém(Radr+depl)
d'instructions STW Rsrc , depl(Radr) Mém(Radr+depl) := Rsrc
STL Fsrc , depl(Radr) Mém(Rsrc+depl) := Fsrc
opint Rdest, Rsrc1, Rsrc2 Rdest := Rsrc1 opint Rsrc2
opflo Fdest, Fsrc1 Fsrc2 Fdest := Fsrc1 opflo Fsrc2
Bcc Rscr, label branchement à label si Rsrc remplit
la condition indiquée par cc (z ou nz)
Soit un programme qui ajoute une valeur flottante fixe (stockée dans F0) à un tableau de n
nombres flottants T(1 : n) dont l'adresse est dans R1 (adresse de T(1)).
ADDint R2, R0, n
boucle: LDL F1, 0(R1)
ADDflo F2, F1, F0
STL F2, 0(R1)
ADDint R1, R1, 8
SUBint R2, R2, 1
BNE R2, boucle
Le processeur étant pipe-line, une instruction peut être lue et son exécution peut commencer à
chaque période d'horloge, en l'absence de conflits et de dépendances. On suppose les conflits
matériels résolus ; il reste le problème des dépendances, d'autant plus important que les
opérations en flottant s'exécutent en plusieurs cycles, sur des opérateurs qui sont eux-mêmes
pipe-line (on peut lancer une opération en flottant à chaque cycle, mais le résultat n'est pas
immédiatement disponible).
Le nombre de cycles d'attente entre 2 instructions dépendantes qui se succèdent (instruction i
et instruction i+1) est donné dans le tableau suivant :