M1Info-ASE 1 Pipeline logiciel. M1Info-ASE 2 Pipeline logiciel Le déroulage de boucle a ses limites Approcher des perf optimales  facteurs de déroulage.

Slides:



Advertisements
Présentations similaires
GEF 435 Principes des systèmes d’exploitation
Advertisements

Premier programme en C :
Le Concept du programme enregistré
Architecture de machines Le microprocesseur
Chargé de recherches au CNRS
Objectif de l’exposé.
Parallélisme d’instructions
Le Concept du programme enregistré
Renommage et ILP Le compilateur mappe la mémoire sur les registres architecturaux. Les registres architecturaux étant peu nombreux, sont fortement réutilisés.
ALGEBRE DE BOOLE Mohamed Yassine Haouam
Section VI Structures répétitives (suite)
Chapitre 8 : L’architecture de base des ordinateurs
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Sémantique axiomatique
Résolution des Équations Différentielles
LE MICROPROCESSEUR 8086/8088 Architecture externe du 8086
Algorithmique et Programmation
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand.
Algorithme de Bellman-Ford
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Systèmes Pipeline – opérations multicycles Nous avons vu jusquà maintenant comment faire un.
Systèmes Superscalaires et VLIW
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Et maintenant, où allons-nous? Après toutes les techniques vues jusquici: Que peut-on faire.
IFT Complexité et NP-complétude
Théorie fractale Introduction à la géométrie fractale
Efficacité des algorithmes
Mise en oeuvre des MMCs L'utilisation des MMCs en reconnaissance des formes s'effectue en trois étapes : définition de la topologie de la chaîne de Markov,
Partie II Sémantique.
Programmation dynamique
Répéter dans un programme avec une Instruction itérative
GESTION DE PROJET
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
Gestion de projet Planification.
Cours n° 1 Présentation du langage C++
Programmation Système et Réseau
Problème de double digestion
Cours LCS N°4 Présenté par Mr: LALLALI
Optimisation pour la Conception de Systèmes Embarqués
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
PROJET CAPS Compilation, Architecture, Processeurs Superscalaires et Spécialisées.
MATHÉMATIQUES DISCRÈTES Chapitre 2 (section 2) François Meunier DMI.
OPTIMISATION DE LA PLANIFICATION
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
UE MAREP Cours 12 : Révisions
UE MAREP Cours 8 : La pile d’exécution (Fonctions imbriquées et fonctions récursives) Patricia Renault UPMC 2005/2006.
Patricia Renault UPMC 2005/2006
UE MAREP Cours 5 : Structures de contrôle représentées en assembleur
Patricia Renault UPMC 2005/2006
Introduction à la programmation (420-PK2-SL) cours 8
Post-optimisation, analyse de sensibilité et paramétrage
Pipeline 1 Amélioration des performances par la technique du pipeline.
La pile de crêpes.
Architecture et technologie des ordinateurs II
Chapitre 4 La représentation des nombres.
Semaine 5 Registres spéciaux et périphériques internes Projet initial en ingénierie informatique et travail en équipe INF1995 Jérôme Collin et al.
CHAPITRE 10 Les sous-programmes 1. Sous-programme Suite d’instructions appelée de manière répétitive Par un programme Par plusieurs programmes distincts.
Algorithmique Conditions et Itérations Cours de BTS/CPI 1ère année Algo – Prog CPI/BTS1 – M. Dravet – 17/09/2003 Dernière modification: 17/09/2003.
Philippe Gandy – 6 octobre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Algorithmique Boucles et Itérations
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
A. Lebrun. La base 2 Un nombre peut se représenter en base deux par une suite de 0 ou de 1. Chaque bit a un poids qui dépend de son rang Le format n impose.
Les bascules et registres
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
L ES INSTRUCTIONS DE L ECTURE, E CRITURE ET A FFECTATION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université.
Microarchitectures pipelinés
Transcription de la présentation:

M1Info-ASE 1 Pipeline logiciel

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.

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é

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.

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)

M1Info-ASE 6 1. Graphe de dépendance lf …,X(…) sf …,Y(…) multf … addf … a a addi …, 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

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

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

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

M1Info-ASE 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

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

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

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

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 …, 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

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]; }

M1Info-ASE 16 Graphe de dépendance lf …,X(…) sf …,Y(…) multf … addf … multf … a0 b b addi …, Chemin critique = 8 Boucle critique = 5 S1 S2 S4 S3 S5 S6

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; }

M1Info-ASE 18 Graphe de dépendance lf …,X(…) sf …,Y(…) multf … addf … multf … A’ B’ addi …, 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

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 Le motif de boucle va devoir contenir 2*5 kernels !

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)

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)

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; }

M1Info-ASE 23 Graphe de dépendance multf … addf … multf … dz addi …,4 u -3 multf … y z y1 addf … u1 dz z Chemin critique = 10 Boucle critique = 10

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]

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 …)

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.

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 !

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.

M1Info-ASE 29 Corrigés

M1Info-ASE 30 Exercice 2 : graphe de dépendances lf …,X(…) sf …,Y(…) multf … addf … multf … a0 b b addi …, Chemin critique = 8 Boucle critique = 5 S1 S2 S4 S3 S5 S6

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

M1Info-ASE 32 Exercice 3 : graphe de dépendances lf …,X(…) sf …,Y(…) multf … addf … multf … A’ B’ addi …, 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

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

M1Info-ASE 34 Exercice 4 : graphe de dépendances multf … addf … multf … dz addi …,4 u -3 multf … y z y1 addf … u1 dz z Chemin critique = 10 Boucle critique = 10 S1S1 S2S2 S3S3 S8S8 S7S7 S 10 S9S9 S4S4 S6S6 S5S5

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

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 … lf …,im (…) lf …,im+2W(…) lf …,im+W(…) S1S1 S2S2 S3S3 S4S4 S 10 S9S9 S8S8 S7S7 S6S6 S5S5 S 11 S 12 S 13 S 14 S 15 S 16

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

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 … lf …,im (…) lf …,im+2W(…) lf …,im+W(…) S1S1 S2S2 S3S3 S4S4 S7S7 S6S6 S5S5 S8S8 S 10 S9S9 S 11 S 12

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

M1Info-ASE 40 Exercice 5.3 : graphe de dépendance add …,4 1 1 sf …,Y(…) Chemin critique = 9 add … sub … add … mult … sub … lf …,im (…) lf …,im+2W(…) lf …,im+W(…) shl …,1 shl …, *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 …

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

M1Info-ASE 42 Exercice 5.4 : graphe de dépendance add …,4 1 1 sf …,Y(…) Chemin critique = 8 add … sub … add … sub … lf …,im (…) lf …,im+2W(…) lf …,im+W(…) 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 …

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

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