Utilisation d'allocation de registre pour optimisation de calcul acoustique probabiliste Pierrick Brunet Encadré par Serge Guelton Etudiant à Télécom Bretagne Stage de fin d étude à Quiet Oceans Sixièmes rencontres de la compilation française 1
QO-Stat Présentation du problème o Contexte o Algorithme utilisé o Vers une approche langage Compilation du langage dédié o Résultats naïfs o Stratégie d amélioration Allocation de registre o K-Coloriage o Allocation par parcours linéaire Travaux futurs 2
Contexte Quonops Informations environnementales Génération de matrices 3D de champs sonores QO-Stat Scénarios: combinaison de champs sonores Génération d histogramme de bruit Matlab Génération de cartes de bruit 3
Contexte Quonops + QO-Stat 4
Contexte Quonops 4400 matrices 53Go de données correspondant à des situations ponctuelles QO-Stat Histogramme des scenarios correspondant à un nuage de situation Matlab Cartes synthétique compréhensible par un humain Statistiques permettant de comprendre et d anticiper l impact du projet 5
Contexte Quonops 4400 matrices 53Go de données correspondant à des situations ponctuelles QO-Stat Histogramme des scenarios correspondant à un nuage de situation Matlab Cartes synthétique compréhensible par un humain Statistiques permettant de comprendre et d anticiper l impact du projet 6
Algorithme utilisé AJOUTER L ALGORITHME 7
Algorithme utilisé AJOUTER L ALGORITHME 8
Algorithme utilisé AJOUTER L ALGORITHME 9
Algorithme utilisé AJOUTER L ALGORITHME 10
Algorithme utilisé AJOUTER L ALGORITHME 11
Algorithme utilisé AJOUTER L ALGORITHME 12
Algorithme utilisé AJOUTER L ALGORITHME 13
Langage de description SL = [ Selector("piling")(Technique="piling", Diameter_meter=2, Number_of_strokes=23000, Duration_hour=0.000277777778, Gain_dB=3), Selector("trafic") ( ), ] ZEA_ = [ ZEA ("ZEA0")(North=50, South=49, West=-5.2, East=-3.5, Top=0, Bottom=80), ZEA ("ZEA1")(North=49.5, South=47, West=-6.5, East=-0.5, Top=0, Bottom=7000), ] scenario = [ SCENARIO ("Scenario_01")( {"Technique":"trafic"}, {"Technique":"piling"}, ), ] 14
Chaîne de traitement Génération de code C++ à partir d un langage de description Langage de description Générateur de code.cpp g++ a.out Bibliothèque externe 15
Chaîne de traitement Génération de code C++ à partir d un langage de description Langage de description Générateur de code.cpp g++ a.out Bibliothèque externe 16
QO-Stat Compilation du langage dédié o Résultats naïfs o Stratégie d amélioration 17
Génération de code naïve Trace Valgrind Utilisation des ressources Utilisation Mémoire : 2 matrices (Quelques Mo) Temps d exécution : 2.5 min SLOC : 24 633 lignes Génération du code : 4.5 sec 18
Stratégie possible pour limiter les load/store Spécialiser l allocateur mémoire pour avoir une gestion de cache (Optimalité?) Effectuer les calculs en point à point. (Plusieurs milliers de fichiers ouverts en même temps) Allocation de registre 19
Stratégie possible pour limiter les load/store Spécialiser l allocateur mémoire pour avoir une gestion de cache (Optimalité?) Effectuer les calculs en point à point. (Plusieurs milliers de fichiers ouverts en même temps) Allocation de registre 20
QO-Stat Allocation de registre o K-Coloriage o Allocation par parcours linéaire 21
Graphe de flot de donnée de l algorithme 22
Graphe de flot de donnée de l algorithme K-coloriage du graphe Choix d un ordonnancement Déterminer la portée des matrices Construction du graphe d interférence K-Coloriage du graphe d interférence Allocation par parcours linéaires Choix d un ordonnancement Déterminer la portée des matrices Attribution des registres 23
K-Coloriage Matrice 1 Matrice 2 Matrice 8 Matrice 9 Matrice 3 Matrice 10 Matrice 4 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 24
K-Coloriage Matrice 1 Matrice 2 Matrice 8 Matrice 9 Matrice 3 Matrice 10 Matrice 4 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 25
K-Coloriage Matrice 1 Matrice 2 Matrice 8 Matrice 9 Matrice 3 Matrice 10 Matrice 4 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 26
K-Coloriage Matrice 1 Matrice 2 Matrice 8 Matrice 9 Matrice 3 Matrice 10 Matrice 4 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 27
K-Coloriage Matrice 1 Matrice 2 Matrice 8 Matrice 9 Matrice 3 Matrice 10 Matrice 4 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 28
K-Coloriage Matrice 1 Matrice 2 Matrice 8 Matrice 9 Matrice 3 Matrice 10 Matrice 4 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 29
K-Coloriage Matrice 1 Matrice 2 Matrice 8 Matrice 9 Matrice 3 Matrice 10 Matrice 4 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 30
K-Coloriage Matrice 1 Matrice 2 Matrice 8 Matrice 9 Matrice 3 Matrice 10 Matrice 4 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 31
K-Coloriage Matrice 1 Matrice 2 Matrice 3 Matrice 4 Matrice 8 Matrice 9 Matrice 10 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 Matrice 1 Matrice 3 Matrice 2 Matrice 4 Matrice 5 Matrice 8 Matrice 10 32
K-Coloriage Matrice 1 Matrice 2 Matrice 3 Matrice 4 Matrice 8 Matrice 9 Matrice 10 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 Matrice 1 Matrice 3 Matrice 2 Matrice 4 Matrice 5 Matrice 8 Matrice 10 33
K-Coloriage Matrice 1 Matrice 2 Matrice 3 Matrice 4 Matrice 8 Matrice 9 Matrice 10 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 Matrice 1 Matrice 3 Matrice 2 Matrice 4 Matrice 5 Matrice 8 Matrice 10 34
Graphe de flot de donnée de l algorithme K-coloriage du graphe Choix d un ordonnancement Déterminer la portée des matrices Construction du graphe d interférence K-Coloriage du graphe d interférence Allocation par parcours linéaires Choix d un ordonnancement Déterminer la portée des matrices Attribution des registres 35
Allocation par parcours linéaires Matrice 1 Matrice 2 Matrice 3 Matrice 4 Matrice 8 Matrice 9 Matrice 10 Matrice 11 Matrice 6 Matrice 5 Matrice 12 Matrice 13 Matrice 7 Matrice 1 Matrice 3 Matrice 2 Matrice 4 Matrice 5 Matrice 8 Matrice 10 36
K-Coloriage du graphe d interférence Allocation par K-Coloriage Calcul du graphe d interférence très lent Gains sur la taille mémoire nécessaire trop peu important Utilisation des ressources Utilisation Mémoire : 735 matrices SLOC : 7750 lignes Génération du code : 17 sec 37
Allocation par parcours linéaire Allocation par parcours linéaire Calcul des portées de toutes les matrices Allocation de registre linéaire Nombre de registre nécessaire plus important Résultats Utilisation Mémoire : 735 matrices Temps d exécution : 18 sec LOC : 7650 lignes Génération du code : 4 sec 38
Conclusion QO-Stat QO-Stat est un programme de réduction et de transformation des données Application d algorithme d allocation de registre dans un autre contexte Gain de temps significatif en gérant correctement l allocation de nos matrices Performances intéressante de l utilisation de l allocation par parcours linéaire Maintenant Eviter le «spilling» Fusion d opérateur Calcul d histogramme Pierrick.brunet@telecom-bretagne.eu Serge.guelton@telecom-bretagne.eu 39
Combinaison des N champs sonores «50% de chance de trouver un niveau sonore supérieur ou égal à 100dB ref 1µPa²» 95 db «courbe S» 100 db 105 db 110 db 40