Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parDenise Lapierre Modifié depuis plus de 9 années
1
M1Info-ASE 1 Pipeline logiciel
2
M1Info-ASE 2 Pipeline logiciel Le déroulage de boucle a ses limites Approcher des perf optimales facteurs de déroulage élevés Taille de code trop importante pour être acceptable … Idée : recouvrir l’exécution de plusieurs itérations Mais sans dérouler la boucle ! C’est ce qu’on appelle le pipeline logiciel. Fonctionnement À un instant donné, on aura plusieurs itérations en cours d’exécution par la machine. On commencera éventuellement l’exécution de l’itération i+1 avant que les opération de l’itération i n’aient été terminées. Mise en œuvre Il faut trouver un motif de calcul couvrant plusieurs itérations, et dont l’exécution peut-être répétée.
3
M1Info-ASE 3 Pipeline logiciel : exemple Déroulage x12 de l’exemple précédent Slot 1 (integer/branch) Slot 2 (integer/load) Slot 3 (load/store) Slot 4 (float) Slot 5 (float /mult) noplf f1,X+400(r2)nop add r2,r2,4lf f1,X+400(r2)nop Nop add r2,r2,4lf f1,X+400(r2)nopNopmultf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)nopNopmultf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)nopNopmultf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)nopaddf f3,f31,f2multf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)nopaddf f3,f31,f2multf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)sf f3,Y+400(r2)addf f3,f31,f2multf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)sf f3,Y+404(r2)addf f3,f31,f2multf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)sf f3,Y+408(r2)addf f3,f31,f2multf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)sf f3,Y+412(r2)addf f3,f31,f2multf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)sf f3,Y+416(r2)addf f3,f31,f2multf f2,f30,f1 add r2,r2,4lf f1,X+400(r2)sf f3,Y+420(r2)addf f3,f31,f2multf f2,f30,f1 sf f7,Y+448(r2)addf f3,f31,f2multf f2,f30,f1 sf f8,Y+452(r2)addf f3,f31,f2multf f2,f30,f1 sf f7,Y+456(r2)addf f3,f31,f2 sf f8,Y+460(r2)addf f3,f31,f2 sf f8,Y+464(r2)addf f3,f31,f2 sf f7,Y+468(r2) On observe un motif de calcul répété
4
M1Info-ASE 4 Pipeline logiciel : définitions Une réalisation de pipeline logiciel est composée de Un Prologue: pour l’amorçage du pipeline Un Motif (Kernel): code répété Une Epilogue: pour le vidage du pipeline Une réalisation de pipeline logiciel est caractérisée par Son Initiation Interval (noté II) : c’est l’intervalle séparant le début d’exécution de deux itérations de la boucle. Sa latence : c’est l’intervalle (en cycles) séparant le début d’exécution d’une itération de sa fin.
5
M1Info-ASE 5 Pipeline logiciel : réalisation On découpe le travail en plusieurs étapes 1.Construction du graphe de dépendances de données, (GDD) en incluant les dépendances inter-itérations. 2.Ordonnancement des opérations du GDD sur les ressources de calcul (en respectant dépendances et latences d’exécution) 3.Allocation de registres aux différentes opérations en respectant la durée de vie des données. 4.Génération de code (prologue, motif/kernel, épilogue)
6
M1Info-ASE 6 1. Graphe de dépendance lf …,X(…) sf …,Y(…) multf … addf … a a addi …,4 3 2 2 1 1 Chemin critique = 8 Boucle critique = 1 b b float x[100],y[100],a,b; for (i=0; i<100; i++) { y[i]=a*x[i]+b; } Dépendance inter-itération
7
M1Info-ASE 7 2. Ordonnancement On place les opérations sur les ressources de la machine Slot 1slot2Slot 3Slot 4Slot 5 addi …, …,4 lf …,X(…) addi …, …,4lf …,X(…)multf …,f31,… addi …, …,4lf …,X(…)multf …,f31,… addi …, …,4lf …,X(…)multf …,f31,… addi …, …,4lf …,X(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)sf …,Y(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)sf …,Y(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)sf …,Y(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)sf …,Y(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)sf …,Y(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)sf …,Y(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)sf …,Y(…)addf …,…,…multf …,f31,… addi …, …,4lf …,X(…)sf …,Y(…)addf …,…,…multf …,f31,… lf …,X(…)sf …,Y(…)addf …,…,… sf …,Y(…)addf …,…,… sf …,Y(…)addf …,…,… sf …,Y(…) lf …,X(…) Latence= 8 cycles II = 1 cycle
8
M1Info-ASE 8 3. Allocation de registres Allocation de registres Slot 1slot2Slot 3Slot 4Slot 5 addi r1,r1,4 lf f1,X(r1) addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2 sf f3,Y(…)addf f3,f30,f2 sf f3,Y(…)addf f3,f30,f2 sf f3,Y(…) Latence= 8 cycles II = 1 cycle
9
M1Info-ASE 9 4. Génération de code Génération de code Slot 1slot2Slot 3Slot 4Slot 5 addi r1,r1,4 lf f1,X(r1) addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2 sf f3,Y(…)addf f3,f30,f2 sf f3,Y(…)addf f3,f30,f2 sf f3,Y(…) Kernel = 1 itération prologue epilogue Remarque : en pratique, il faudrait dérouler le kernel pour pouvoir également gérer les branchements par bnez
10
M1Info-ASE 10 4. Génération de code (bis) Pour gérer le saut conditionnel, on modifie le kernel : On va le dérouler par un facteur 2, pour pouvoir y placer l’instruction de saut conditionnel Remarque : Dans la suite, par soucis de simplicité, on omettra souvent de gérer ces sauts conditionnels. Slot 1slot2Slot 3Slot 4Slot 5 bnez r1,looplf f1,X(r1)sf f3,Y(r1)addf f3,f30,f2multf f2,f31,f1 addi r1,r1,8lf f1,X+4(r1)sf f3,Y+4(r1)addf f3,f30,f2multf f2,f31,f1 Kernel = 2 itération On exploite le cycle de delay-slot associé à l’instruction bnez de la machine VLIW-DLX
11
M1Info-ASE 11 Allocation de registres et gestion des aléas Sur le VLIW-DLX = aléas de données non gérés Ex: l’inst. 4.6 utilise la valeur de f2 produite en 5.3, pas celle produite en 5.5. On peut donc réutiliser f2 dès 5.4. Sur une machine gérant les aléas, il aurait fallu utiliser 3 registres distincts pour stocker les résultats de 5.3, 5.4 et 5.5 Slot 1slot2Slot 3Slot 4Slot 5 1addi r1,r1,4 2 lf f1,X(r1) 3addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 4addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 5addi r1,r1,4lf f1,X(r1)multf f2,f31,f1 6addi r1,r1,4lf f1,X(r1)addf f3,f30,f2multf f2,f31,f1 7addi r1,r1,4lf f1,X(r1)addf f3,f30,f2multf f2,f31,f1 8addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 9addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1 10addi r1,r1,4lf f1,X(r1)sf f3,Y(…)addf f3,f30,f2multf f2,f31,f1
12
M1Info-ASE 12 Allocation de registres et gestion des aléas Allocation de registres (machine avec gestion des aléas) Slot 1slot2Slot 3Slot 4Slot 5 addi r1,r1,4 lf f1,X(r1) addi r1,r1,4lf f2,X(r1)multf f4,f31,f1 addi r1,r1,4lf f3,X(r1)multf f5,f31,f2 addi r1,r1,4lf f1,X(r1)multf f6,f31,f3 addi r1,r1,4lf f2,X(r1)addf f7,f30,f4multf f4,f31,f1 addi r1,r1,4lf f3,X(r1)addf f8,f30,f5multf f5,f31,f2 addi r1,r1,4lf f1,X(r1)sf f7,Y(…)addf f9,f30,f6multf f6,f31,f3 addi r1,r1,4lf f2,X(r1)sf f8,Y(…)addf f7,f30,f4multf f4,f31,f1 addi r1,r1,4lf f3,X(r1)sf f9,Y(…)addf f8,f30,f5multf f5,f31,f2 addi r1,r1,4lf f1,X(r1)sf f7,Y(…)addf f9,f30,f6multf f6,f31,f3 addi r1,r1,4lf f2,X(r1)sf f8,Y(…)addf f7,f30,f4multf f4,f31,f1 addi r1,r1,4lf f3,X(r1)sf f9,Y(…)addf f8,f30,f5multf f5,f31,f2 addi r1,r1,4lf f1,X(r1)sf f7,Y(…)addf f9,f30,f6multf f6,f31,f3 addi r1,r1,4lf f2,X(r1)sf f8,Y(…)addf f7,f30,f4multf f4,f31,f1 lf f3,X(r1)sf f9,Y(…)addf f8,f30,f5 sf f7,Y(…)addf f9,f30,f6 sf f8,Y(…)addf f7,f30,f4 sf f9,Y(…) sf f7,Y(…) Latence= 8 cycles II = 1 cycle
13
M1Info-ASE 13 Allocation de registres et gestion des aléas Génération de code Slot 1slot2Slot 3Slot 4Slot 5 addi r1,r1,4 lf f1,X(r1) addi r1,r1,4lf f2,X(r1)multf f4,f31,f1 addi r1,r1,4lf f3,X(r1)multf f5,f31,f2 addi r1,r1,4lf f1,X(r1)multf f6,f31,f3 addi r1,r1,4lf f2,X(r1)addf f7,f30,f4multf f4,f31,f1 addi r1,r1,4lf f3,X(r1)addf f8,f30,f5multf f5,f31,f2 lf f1,X(r1)sf f7,Y(…)addf f9,f30,f6multf f6,f31,f3 bnez r1,looplf f2,X(r1)sf f8,Y(…)addf f7,f30,f4multf f4,f31,f1 addi r1,r1,12lf f3,X(r1)sf f9,Y(…)addf f8,f30,f5multf f5,f31,f2 lf f3,X(r1)sf f9,Y(…)addf f8,f30,f5 sf f7,Y(…)addf f9,f30,f6 sf f8,Y(…)addf f7,f30,f4 sf f9,Y(…) sf f7,Y(…) Kernel = 3 itération prologue epilogue Le code généré a une plus grande taille
14
M1Info-ASE 14 Exercice Reprendre l’exercice précédent mais en ciblant cette fois-ci le processeur DLX pipeliné du chapitre 6 On s’arrêtera après l’allocation de registres lf …,X(…) sf …,Y(…) multf … addf … a a addi …,4 3 3 2 1 1 Chemin critique = 9 Boucle critique = 1 b b float x[100],y[100],a,b; for (i=0; i<100; i++) { y[i]=a*x[i]+b; } Dépendance inter-itération
15
M1Info-ASE 15 Exercice Proposez un mise en œuvre avec pipeline logiciel du code ci-dessous sur le VLIW-DLX simplifié On suppose que les registres f30 et f31 sont initialisés avec les valeurs de a0 et b; et que f20 contient y[0]. Comment peut-on modifier l’algorithme pour le rendre plus efficace ? float x[100],y[100],a0,b; for (i=1; i<100; i++) { y[i]=a0*y[i-1]+b*x[i]; }
16
M1Info-ASE 16 Graphe de dépendance lf …,X(…) sf …,Y(…) multf … addf … multf … a0 b b addi …,4 3 3 2 2 1 1 1 Chemin critique = 8 Boucle critique = 5 S1 S2 S4 S3 S5 S6
17
M1Info-ASE 17 Exercice On modifie l’algorithme précédent en injectant l’expression de y[i-1] dans le calcul de y[i]. f29 à f31 sont initialisés avec les valeurs de a,b et c; float x[100],y[100],a,b,c; for (i=1; i<100; i++) { tmp1= a*y[i-2]; tmp1= b*x[i]; tmp3= c*x[i]; y[i]=tmp1+tmp2+tmp3; }
18
M1Info-ASE 18 Graphe de dépendance lf …,X(…) sf …,Y(…) multf … addf … multf … A’ B’ addi …,4 3 3 2 2 1 2 1 Chemin critique = 10 Boucle critique = 5/2 multf … addf … 3 C’ 2 Y[i] Y[i-2] 1 S1 S2 S3 S4 S5 S6 S7 S8 f 29 f 30 f 31
19
M1Info-ASE 19 Pipeline logiciel Slot 1slot2Slot 3Slot 4Slot 5 S 1 :r 1 =r 1 +4 S 2 :f 10 =X(r 1 ) S 1 :r 2 =r 1 +4S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 2 )S 3 :f 3 =f 29 *f 11 S 6 :f 20 =f 31 *f 20 S 1 :r 3 =r 2 +4S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 3 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 6 :f 21 =f 31 *f 21 S 1 :r 4 =r 3 +4S 7 :f 20 =f 4 +f 20 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 4 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y(r 1 )=f 20 S 6 :f 20 =f 31 *f 20 S 1 :r 5 =r 4 +4S 7 :f 21 =f 4 +f 21 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 5 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y(r 2 )=f 21 S 6 :f 21 =f 31 *f 21 S 1 :r 1 =r 5 +4S 7 :f 20 =f 4 +f 20 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 1 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y(r 3 )=f 20 S 6 :f 20 =f 31 *f 20 Dans cette exemple on a une rotation sur r 1-5 et f 20-21 Le motif de boucle va devoir contenir 2*5 kernels !
20
M1Info-ASE 20 Pipeline logiciel Slot 1slot2Slot 3Slot 4Slot 5 S 1 :r 1 =r 1 +4 S 2 :f 10 =X(r 1 ) S 1 :r 1 =r 1 +4S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 1 )S 3 :f 3 =f 29 *f 11 S 6 :f 20 =f 31 *f 20 S 1 :r 1 =r 1 +4S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 2 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 6 :f 21 =f 31 *f 21 S 1 :r 1 =r 1 +4S 7 :f 20 =f 4 +f 20 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 3 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y-12(r 1 )=f 20 S 6 :f 20 =f 31 *f 20 S 1 :r 1 =r 1 +4S 7 :f 21 =f 4 +f 21 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 4 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y-12(r 1 )=f 21 S 6 :f 21 =f 31 *f 21 S 1 :r 1 =r 1 +4S 7 :f 20 =f 4 +f 20 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 1 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y-12(r 1 )=f 20 S 6 :f 20 =f 31 *f 20 On évite la rotation de registre r 1-5 avec un décalage On décale l’adresse utilisée dans S 8 de trois itérations (i.e. -12)
21
M1Info-ASE 21 Pipeline logiciel Slot 1slot2Slot 3Slot 4Slot 5 S 1 :r 1 =r 1 +4 S 2 :f 10 =X(r 1 ) S 1 :r 1 =r 1 +4S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 1 )S 3 :f 3 =f 29 *f 11 S 6 :f 20 =f 31 *f 20 S 1 :r 1 =r 1 +4S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 2 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 6 :f 21 =f 31 *f 21 S 1 :r 1 =r 1 +4S 7 :f 20 =f 4 +f 20 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 3 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y-12(r 1 )=f 20 S 6 :f 20 =f 31 *f 20 S 1 :r 1 =r 1 +4S 7 :f 21 =f 4 +f 21 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 4 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y-12(r 1 )=f 21 S 6 :f 21 =f 31 *f 21 S 1 :r 1 =r 1 +4S 7 :f 20 =f 4 +f 20 S 4 :f 2 =f 30 *f 10 S 2 :f 10 =X(r 1 )S 5 :f 4 =f 2 +f 3 S 3 :f 3 =f 29 *f 11 S 8 :Y-12(r 1 )=f 20 S 6 :f 20 =f 31 *f 20 On évite la rotation de registre r 1-5 avec un décalage On décale l’adresse utilisée dans S 8 de trois itérations (i.e. -12)
22
M1Info-ASE 22 Exercice Proposez une version pipelinée du code ci-dessous float z1,z,u1,u,y1,y,dz; for (i=0; i<100; i++) { z1 = z + dz; u1 = u – (3*z*u*dz) – (3*y*dz); y1 = y + (u*dz); z = z1; u = u1; y = y1; }
23
M1Info-ASE 23 Graphe de dépendance multf … addf … multf … dz addi …,4 u -3 multf … y z y1 addf … u1 dz z1 32 3 3 3 2 2 2 3 Chemin critique = 10 Boucle critique = 10
24
M1Info-ASE 24 Exercice 5 : détection de contours for (i = 1; i < W-1; i++){ for (i = 1; i < H-1; i++){ O[i][j] = 3*im[i-1][j-1]-3*im[i-1][j+1]+ 3*im[i+1][j-1]-3*im[i+1][j+1]+ 10*im[i][j-1]-10*im[i][j+1]; } [wikipedia]
25
M1Info-ASE 25 Exercice 5 On utilise une version du VLIW-DLX dans laquelle il n’y a que des slots pour de l’arithmétique entière. Le multiplieur est séquentiel, on ne peut relancer un opération de multiplication que tous les trois cycles. Pour simplifier, on ignorera la gestion de la boucle (pas besoin de bnez …)
26
M1Info-ASE 26 Exercice 5 : détection de contours Question 1 Proposez un ordonnancement pipeliné pour la boucle interne de l’algorithme de détection de contours code. Question 2 Exploitez les transformations de distributivité et d’associativité, pour proposer un ordonnancement plus efficace. Question 3 Comment peut-on exploiter le fait que les multiplications de l’algorithme sont en fait des multiplications par des constantes ? Proposez un ordonnancement plus efficace.
27
M1Info-ASE 27 Limites du pipeline logiciel La difficulté réside dans la régénération du code Le prologue et l’épilogue peuvent-être très longs (en général ils sont plus long que la boucle elle-même) Le cœur de boucle peut nécessiter un déroulage partiel à cause de l’allocation de registres. La donnée stockée dans un registre peut avoir une durée de vie plus grande qu’une itération de boucle Au final, on obtient de très bonnes performances, mais on a un coup en taille de code qui peut-être très important. Le pipeline logiciel n’est pas toujours efficace ! Parfois les contraintes de ressources empêchent de trouver un motif de calcul optimal (il faut alors dérouler partiellement). Souvent c’est le nombre de registres de la machine qui est le facteur limitant !
28
M1Info-ASE 28 Conclusion Trouver un ordonnancement efficace est rapidement difficile à faire manuellement. Cette étape est donc généralement automatisée dans de nombreux compilateurs (surtout pour machines VLIW) Dans les chapitres suivants nous verrons comment cette automatisation fonctionne.
29
M1Info-ASE 29 Corrigés
30
M1Info-ASE 30 Exercice 2 : graphe de dépendances lf …,X(…) sf …,Y(…) multf … addf … multf … a0 b b addi …,4 3 3 2 2 1 1 1 Chemin critique = 8 Boucle critique = 5 S1 S2 S4 S3 S5 S6
31
M1Info-ASE 31 Exercice 2 : ordonnancement La boucle critique limite l’efficacité du pipeline Slot 1slot2Slot 3Slot 4Slot 5 S1 S2 S3 S4 S1 S2 S5 S3 S6S4 S1 S2 S5 S3 S6S4 S1 S2 S5 S3 S6S4 II = 5 cycles latence = 10 cycles
32
M1Info-ASE 32 Exercice 3 : graphe de dépendances lf …,X(…) sf …,Y(…) multf … addf … multf … A’ B’ addi …,4 3 3 2 2 1 2 1 Chemin critique = 10 Boucle critique = 5/2 multf … addf … 3 C’ 2 Y[i] Y[i-2] 1 S1 S2 S3 S4 S5 S6 S7 S8 f 29 f 30 f 31
33
M1Info-ASE 33 Exercice 4 : ordonnancement On va plus vite avec plus d’instructions !!! Slot 1slot2Slot 3Slot 4Slot 5 S1 S2 S1S4 S2S3 S6 S2S4 S2S5S3 S6 S2S7S4 S2S5S3 S8S6 S1S7S4 S2S5S3 S8S6 S2S7S4 S2S5S3 S8S6 S2S7S4 S2S3 S8S6 II = 3 cycles latence = 11 cycles
34
M1Info-ASE 34 Exercice 4 : graphe de dépendances multf … addf … multf … dz addi …,4 u -3 multf … y z y1 addf … u1 dz z1 32 3 3 3 2 2 2 3 Chemin critique = 10 Boucle critique = 10 S1S1 S2S2 S3S3 S8S8 S7S7 S 10 S9S9 S4S4 S6S6 S5S5
35
M1Info-ASE 35 Exercice 4 : ordonnancement Slot 1slot2Slot 3Slot 4Slot 5 S9S1S4 S2 S3 S6S5 S7 S8 S10 S9S1S2 S4 S3 S6S5 S7 S8 S10 S9S1S2 S4 S3 S6S5 II = 6 cycles
36
M1Info-ASE 36 Exercice 5.1 add …,4 1 1 sf …,Y(…) 3 3 Chemin critique = 18 mult … sub … mult … add … mult … sub … mult … add … mult … sub … 10 11 3 33 3 3 3 1 1 1 1 lf …,im (…) lf …,im+2W(…) lf …,im+W(…) 222 2 S1S1 S2S2 S3S3 S4S4 S 10 S9S9 S8S8 S7S7 S6S6 S5S5 S 11 S 12 S 13 S 14 S 15 S 16
37
M1Info-ASE 37 Exercice 5.1 : ordonnancement Slot 1slot2Slot 3Slot 4Slot 5 S2 S3 S4 S10 S9 S8 S11 S7 S12 S6 S13 S5 S14 S2 S3 S10 S4 S15 S16 S9 II = 18 cycles Latence = 24 cycles
38
M1Info-ASE 38 Exercice 5.2 : graphe de dépendances add …,4 1 1 sf …,Y(…) 10 Chemin critique = 9 mult … sub … add … mult … sub … 3 3 2 1 3 1 3 1 2 1 1 lf …,im (…) lf …,im+2W(…) lf …,im+W(…) 2 2 2 2 S1S1 S2S2 S3S3 S4S4 S7S7 S6S6 S5S5 S8S8 S 10 S9S9 S 11 S 12
39
M1Info-ASE 39 Exercice 5.2 : ordonnancement Slot 1slot2Slot 3Slot 4Slot 5 S1S2 S3 S4 S7 S6 S5S8 S1 S2 S9 S3 S4 S7 S10 S6 S5S8 S1S11S2 S9 S3S12 S4 S7 S10 S6 S5S8 S1S11S2 S9 S3S12 S4 S7 S10 S6 S5S8 II = 6 cycles Latence = 14 cycles
40
M1Info-ASE 40 Exercice 5.3 : graphe de dépendance add …,4 1 1 sf …,Y(…) Chemin critique = 9 add … sub … add … mult … sub … 3 3 2 2 1 1 1 3 1 2 1 1 lf …,im (…) lf …,im+2W(…) lf …,im+W(…) 2 2 2 2 shl …,1 shl …,3 1 1 10*x= 2*x+8*x = (x<<1)+(x<<3); S1S1 S2S2 S3S3 S4S4 S7S7 S6S6 S5S5 S 10 S 12 S 11 S 13 S 14 S9S9 S8S8 On remplace la multiplication x10 par une suite d’additions et de décalages bit à bit vers la gauche …
41
M1Info-ASE 41 Exercice 5.3 : ordonnancement Slot 1slot2Slot 3Slot 4Slot 5 S4 S3 S1S7S2 S8S6 S9S5 S11 S10 S12 S4 S13 S12 S4S14 S12 S14 S10 Ordonnancement II = 4 cycles Latence = 13 cycles
42
M1Info-ASE 42 Exercice 5.4 : graphe de dépendance add …,4 1 1 sf …,Y(…) Chemin critique = 8 add … sub … add … sub … 2 2 3 1 1 1 1 2 1 1 lf …,im (…) lf …,im+2W(…) lf …,im+W(…) 2 2 2 2 shl …,2 1 3*x= 2*x+x = (x<<1)+x; S1S1 S2S2 S3S3 S4S4 S7S7 S6S6 S5S5 S8S8 S 10 S9S9 S 12 S 13 S 11 mult … 10 1 On remplace la multiplication x3 par une suite d’additions et de décalages bit à bit vers la gauche …
43
M1Info-ASE 43 II = 3 cycles Exercice 5.4 : ordonnancement Slot 1slot2Slot 3Slot 4Slot 5 S2 S3 S5S4 S6 S1S8S7 S10 S9 S11 S12 S13 Ordonnancement Latence = 10 cycles
44
M1Info-ASE 44 Pipeline logiciel Génération de code Slot 1slot2Slot 3Slot 4Slot 5 lf f1,X(…) multf f1,f31,f1 multf f2,f30,f20 lf f1,X(…)addf f20,f2,f1 addi r1,r1,4multf f1,f31,f1 sf f20,Y(…)multf f2,f30,f20 bnez r1,lopp lf f1,X(…)addf f20,f2,f1 addi r1,r1,4multf f1,f31,f1 sf f20,Y(…)multf f2,f30,f20 addf f20,f2,f1 Kernel = 1 itération prologue epilogue
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.