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

24
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

Upload: cendrillon-joseph

Post on 04-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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;

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

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)

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

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

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

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

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

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é

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

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

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

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

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

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

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

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

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

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]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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é