efficient code generation for automatic parallelization and optimization cédric bastoul proposé...
TRANSCRIPT
Efficient Code Generation for Automatic Parallelization and Optimization
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
2Efficient Code Generation for Automatic Parallelization and
Optimization
Code efficace Processeurs complexes
pipelines MMX (Matrix Math
eXtention), SSE (Streaming SIMD Extensions), Altivec, ...
...
Intérêt
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
3Efficient Code Generation for Automatic Parallelization and
Optimization
Plan
I. Introduction
1. Représentation polyédrique
2. Schéma de génération
II. Travaux antérieurs
III.Génération
1.Algorithme de génération de code
2.Problèmes de génération
IV.Expérimentations
1. Implémentation
2. Résultats
V.Conclusion
4Efficient Code Generation for Automatic Parallelization and
Optimization
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
5Efficient Code Generation for Automatic Parallelization and
Optimization
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;
6Efficient Code Generation for Automatic Parallelization and
Optimization
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)
7Efficient Code Generation for Automatic Parallelization and
Optimization
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;I1
8Efficient Code Generation for Automatic Parallelization and
Optimization
Schéma de génération
AnalyserGénérerdu code
réordonnancé
Optimisationslocales
Code
Code optimisé
Trouverun nouvel
ordred'exécution
9Efficient Code Generation for Automatic Parallelization and
Optimization
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é
10Efficient Code Generation for Automatic Parallelization and
Optimization
PlanI. Introduction
1. Représentation polyédrique
2. Schéma de génération
II. Travaux antérieurs
III.Génération
1.Algorithme de génération de code
2.Problèmes de génération
IV.Expérimentations
1. Implémentation
2. Résultats
V.Conclusion
11Efficient Code Generation for Automatic Parallelization and
Optimization
Algorithme de génération de code (1)
Liste des polyèdresAlgorithme de génération
de CodeContexte
Dimension
Boucles imbriqués
Entrées Sortie
- 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
12Efficient Code Generation for Automatic Parallelization and
Optimization
Algorithme de génération de code (2)
Le polyèdre transformé de S1 qu’on doit parcourir
Figure 1 Figure 2
Le polyèdre transformé de S2 qu’on doit parcourir
13Efficient Code Generation for Automatic Parallelization and
Optimization
Algorithme de génération du code (3)
-Séparer les projections en polyèdres disjoints-Génération du code de parcours pour ‘i’ -Génération des boucles imbriqués
S1 et S2
S1 do i = 1 6 (pas = 2)
do i = 7 n (pas = 2)
do i = 1 6 (pas = 2)
do i = 7 n (pas = 2)
do j = 1 7-i S1 S2
do j = 1 n S1
Etapes : do j = 8-i n S1
14Efficient Code Generation for Automatic Parallelization and
Optimization
Boucles à pas non unitaires (1)
Efficient Code Generation for Automatic Parallelization and Optimization
Polyèdre de départ Transformation
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
: fonction de transformation ayant pour matrice T = [1 2]
15Efficient Code Generation for Automatic Parallelization and
Optimization
Boucles à pas non unitaires (2)
Transformation en utilisant l’algorithme modifié par les auteurs
Algorithme initial Algorithme modifié par les auteurs
16Efficient Code Generation for Automatic Parallelization and
Optimization
Indépendance des degrés(1)
DéfinitionIndépendance entre les compteursutilisés par les instructions considéréesou à exécuter.
Exemple 4 matrices A, B, C, D dans M[n,n]. On doit calculer E= A x B & F= C x D
17Efficient Code Generation for Automatic Parallelization and
Optimization
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]
Pour i=1 à n
Pour j=1 à n
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]
Pour j=1 à n
F[i,j] += C[i,t] * D[t,j]
Itérations: 2n3 + n2 + n
18Efficient Code Generation for Automatic Parallelization and
Optimization
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
19Efficient Code Generation for Automatic Parallelization and
Optimization
PlanI. Introduction
1. Représentation polyédrique
2. Schéma de génération
II. Travaux antérieurs
III.Génération
1.Algorithme de génération de code
2.Problèmes de génération
IV.Expérimentations
1. Implémentation
2. Résultats
V.Conclusion
20Efficient Code Generation for Automatic Parallelization and
Optimization
Implantation
Sous le nom CLooG (Chunky Loop Generator)
Disponible sous licence GNU à (http://www.prism.uvsq.fr)
Applicable à plusieurs systèmes
Avoir au préalable PIP/PipLib
21Efficient Code Generation for Automatic Parallelization and
Optimization
Tests
ScoPstous riche Paramétrique
apsi 109 80 80(14)art 62 28 27(8)
lucas 11 4 4(13)quake 40 20 14(7)
Domaine d'itérationtous point rectangle prisme autre
apsi 2192 1156 1036 0 0art 499 331 142 0 0
lucas 2070 317 1753 0 0quake 639 367 216 9 0
Génération de codesuboptimal dupliqué temps
apsi 1 9118 58art 0 623 2
lucas 1 6832 127quake 0 740 8
Infos générales sur les données
d’entrée
infos sur la forme des polyèdres
Résultats
22Efficient Code Generation for Automatic Parallelization and
Optimization
Résultats(1)
Génération de code
initial suboptimal dupliqué temps
Apsi
Art
Lucas
Quake
2192 1 9118 58
499 0 623 2
2070 1 6832 127
639 0 740 8
Comparaison entre ces deux colonnes nous donne un facteur de duplication de l’ordre de 3.4
23Efficient Code Generation for Automatic Parallelization and
Optimization
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
24Efficient Code Generation for Automatic Parallelization and
Optimization
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é