efficient code generation for automatic parallelization and optimization cédric bastoul proposé...

Post on 04-Apr-2015

105 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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é

top related