Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parCendrillon Joseph Modifié depuis plus de 10 années
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é
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.