La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Efficient Code Generation for Automatic Parallelization and

Présentations similaires


Présentation au sujet: "Efficient Code Generation for Automatic Parallelization and"— Transcription de la présentation:

1 Efficient Code Generation for Automatic Parallelization and
Efficient Code Generation for Automatic Parallelization and Optimization Cédric Bastoul Proposé par : Albert Cohen Présenté par : L.Landwerlin, J.Rahmé, M.Thiam Efficient Code Generation for Automatic Parallelization and Optimization

2 Intérêt Code efficace Génération automatique Processeurs complexes
pipelines MMX (Matrix Math eXtention), SSE (Streaming SIMD Extensions), Altivec, ... ... Génération automatique Langages de programmation ne permettant pas l'accès à ces fonctionnalitées Opération pénible Dépendant du matériel

3 Plan Introduction Représentation polyédrique Schéma de génération
Travaux antérieurs Génération 1.Algorithme de génération de code 2.Problèmes de génération IV.Expérimentations Implémentation Résultats V.Conclusion

4 Représentation polyèdrique
Un polyèdre est un solide délimité par des faces polygonales. Représentation d'une classe de boucles (for/while) “nids de boucles” par des -polyèdres paramètrés

5 Représentation polyèdrique
int i, j; for (i = 1 ; i < n ; i++) for (j = 1 ; j < n ; j++) if (i <= -j + n + 2) I1;

6 Représentation polyèdrique
Condition de modélisation par un polyèdre : limites et conditions doivent déprendre de : compteur d'une boucle englobante constante paramètres formels SCoP (Static Control Part)

7 Représentation polyèdrique
int i, j; for (i = 1 ; i < n ; i++) for (j = 1 ; j < n ; j++) if (i <= -j + n + 2) I1;

8 Schéma de génération Trouver Générer un nouvel Optimisations du code
Analyser Générer du code réordonnancé Optimisations locales Code Code optimisé Trouver un nouvel ordre d'exécution

9 Travaux antérieurs Méthode de Quilleré et al.
- Donne de bons résultats quand il faut générer un code pour plusieurs polyèdres - Possède plusieurs limitations : - la complexité - Génération de code avec pas unitaire seulement - Code non optimisé

10 Plan Introduction Représentation polyédrique Schéma de génération
Travaux antérieurs Génération 1.Algorithme de génération de code 2.Problèmes de génération IV.Expérimentations Implémentation Résultats V.Conclusion

11 Algorithme de génération de code (1)
Contexte Dimension Boucles imbriqués Entrées Sortie Liste des polyèdres - Liste des polyèdres transformés : - Contexte : l’ensemble des contraintes sur les paramètres globaux - Boucles imbriqués : qui implémentent l’ordre d’exécution de la fonction de ré-ordonnancement

12 Algorithme de génération de code (2)
Figure 1 Figure 2 Le polyèdre transformé de S1 qu’on doit parcourir Le polyèdre transformé de S2 qu’on doit parcourir

13 Algorithme de génération du code (3)
S1 et S2 S1 do i = 1  6 (pas = 2) do i = 7  n (pas = 2) do i = 1  6 (pas = 2) do j = 1  7-i S S2 Etapes : do j = 8-i  n S1 -Séparer les projections en polyèdres disjoints do i = 7  n (pas = 2) -Génération du code de parcours pour ‘i’ do j = 1  n S1 -Génération des boucles imbriqués

14 Boucles à pas non unitaires (1)
Polyèdre de départ Transformation : fonction de transformation ayant pour matrice T = [1 2] Il peut être parfois nécessaire de ne pas parcourir certaines valeurs dans certaines dimensions Problème survient : quand T est non uni-modulaire (dét ≠ 1 ) Les Trous : points avec des images rationnelles dans l’espace d’origine Efficient Code Generation for Automatic Parallelization and Optimization

15 Boucles à pas non unitaires (2)
Transformation en utilisant l’algorithme modifié par les auteurs Algorithme initial Algorithme modifié par les auteurs

16 Indépendance des degrés(1)
Définition Indépendance entre les compteurs utilisés par les instructions considérées ou à exécuter. Exemple 4 matrices A, B, C, D dans M[n,n]. On doit calculer E= A x B & F= C x D

17 Indépendance des degrés(2)
Exemple (suite1) pour t=1 à n Pour i=1 à n Pour j=1 à n E[i,j] += A[i,t] * B[t,j] F[i,j] += C[i,t] * D[t,j] Itérations: 2n3 + 2n2 + n Exemple (suite2) pour t=1 à n Pour i=1 à n Pour j=1 à n E[i,j] += A[i,t] * B[t,j] F[i,j] += C[i,t] * D[t,j] Itérations: 2n3 + n2 + n

18 Indépendance des degrés (3)
Exemple (Fin) pour t=1 à n Pour i=1 à n Pour j=1 à n E[i,j] += A[i,t] * B[t,j] F[i,j] += C[i,t] * D[t,j] Itérations: n3 + n2 + n

19 Plan Introduction Représentation polyédrique Schéma de génération
Travaux antérieurs Génération 1.Algorithme de génération de code 2.Problèmes de génération IV.Expérimentations Implémentation Résultats V.Conclusion

20 Implantation Sous le nom CLooG (Chunky Loop Generator)
Disponible sous licence GNU à ( Applicable à plusieurs systèmes Avoir au préalable PIP/PipLib

21 Tests Résultats Infos générales sur les données d’entrée
infos sur la forme des polyèdres Résultats

22 Résultats(1) Génération de code initial suboptimal dupliqué temps Apsi
Art Lucas Quake Comparaison entre ces deux colonnes nous donne un facteur de duplication de l’ordre de 3.4

23 Résultats(2) Résultats encourageants
Utilisation de la mémoire acceptable De même que le temps de génération du CC Autres expériences montrent son efficacité ~10 polyèdres Sans explosion Mémoire Temps

24 Conclusion Compilation : Optimisation, Parallélisme Solution
plusieurs méthodes(naïve, étude des polyèdres 1 à 1, …) meilleure méthode : polyèdre (Quilleri et al.) Apports de l’article Modèle de transformation générale Matrices quelconques, Pas non unitaires Fonctions de parcours non entière Montrer que la méthode donne des résultats optimaux avec des problèmes réels Perspectives Chevauchement des polyèdres complexité


Télécharger ppt "Efficient Code Generation for Automatic Parallelization and"

Présentations similaires


Annonces Google