42
Développement Orienté Aspect et Optimisation Pierre Schweitzer Mardi 4 Juin 2013 LIMOS UMR CNRS 6158 Clermont Université - Université Blaise Pascal LPC UMR CNRS 6533 Clermont Université - Université Blaise Pascal

Développement Orienté Aspect et Optimisation

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Développement Orienté Aspect et Optimisation

Développement Orienté Aspect et Optimisation

Pierre Schweitzer

Mardi 4 Juin 2013

LIMOS UMR CNRS 6158

Clermont Université - Université Blaise Pascal

LPC UMR CNRS 6533Clermont Université - Université Blaise Pascal

Page 2: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Introduction

Insuffisance de l’objetNotion d’aspectGarder un code simpleAdapter un code selon l’aspectFocus sur le C++

1 / 24Développement Orienté Aspect et Optimisation 1/24

N

Page 3: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Plan

1 Programmation Orientée Aspect

2 Utilisation de l’aspect en C++

3 Optimisation

4 Conclusion

2 / 24Développement Orienté Aspect et Optimisation 2/24

N

Page 4: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Plan

1 Programmation Orientée Aspect

2 Utilisation de l’aspect en C++

3 Optimisation

4 Conclusion

3 / 24Développement Orienté Aspect et Optimisation 3/24

N

Page 5: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Problématiques

Comment gérer simplement...La concurrence ?L’authentification ?La trace d’exécution ?La sécurité d’exécution ?...

4 / 24Développement Orienté Aspect et Optimisation 4/24

N

Page 6: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Programmation Orientée Aspect

Notion d’aspectSurcouche à la notion d’objet déjà existanteDonne un contexte d’exécution au codePas (ou peu) besoin de modifier le code pour utiliser l’aspectFonctionnalités supplémentaires

Surcouche à l’objet ?

L’aspect peut être présent sur du code non objet

5 / 24Développement Orienté Aspect et Optimisation 5/24

N

Page 7: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Programmation Orientée Aspect

Notion d’aspectSurcouche à la notion d’objet déjà existanteDonne un contexte d’exécution au codePas (ou peu) besoin de modifier le code pour utiliser l’aspectFonctionnalités supplémentaires

Surcouche à l’objet ?

L’aspect peut être présent sur du code non objet

5 / 24Développement Orienté Aspect et Optimisation 5/24

N

Page 8: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

L’aspect, une longue existence

Implémentation en CVia le préprocesseur et les annotationsLes pragmas permettent de modifier le codeÉgalement certains mot-clés du langage

Exemple en C

1 #pragma pack(2)2 static const int a = 2;

6 / 24Développement Orienté Aspect et Optimisation 6/24

N

Page 9: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

L’aspect, une longue existence

Implémentation en CVia le préprocesseur et les annotationsLes pragmas permettent de modifier le codeÉgalement certains mot-clés du langage

Exemple en C

1 #pragma pack(2)2 static const int a = 2;

6 / 24Développement Orienté Aspect et Optimisation 6/24

N

Page 10: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Plan

1 Programmation Orientée Aspect

2 Utilisation de l’aspect en C++

3 Optimisation

4 Conclusion

7 / 24Développement Orienté Aspect et Optimisation 7/24

N

Page 11: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Approches naïves

Variadic macrosPermet d’encapsuler des fonctionsNéanmoins, lourdeur de développementNécessite de modifier l’appel des fonctions

Variadic templatesPermet également d’encapsuler des fonctionsPlus facile d’utilisation que les macrosCode plus complexe à écrireFait appel à des notions très spécifiques du C++11

Limitation des normes

Ceci n’est possible qu’avec C++11Ou C99 pour les macros

8 / 24Développement Orienté Aspect et Optimisation 8/24

N

Page 12: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Approches naïves

Variadic macrosPermet d’encapsuler des fonctionsNéanmoins, lourdeur de développementNécessite de modifier l’appel des fonctions

Variadic templatesPermet également d’encapsuler des fonctionsPlus facile d’utilisation que les macrosCode plus complexe à écrireFait appel à des notions très spécifiques du C++11

Limitation des normes

Ceci n’est possible qu’avec C++11Ou C99 pour les macros

8 / 24Développement Orienté Aspect et Optimisation 8/24

N

Page 13: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Approches naïves

Variadic macrosPermet d’encapsuler des fonctionsNéanmoins, lourdeur de développementNécessite de modifier l’appel des fonctions

Variadic templatesPermet également d’encapsuler des fonctionsPlus facile d’utilisation que les macrosCode plus complexe à écrireFait appel à des notions très spécifiques du C++11

Limitation des normes

Ceci n’est possible qu’avec C++11Ou C99 pour les macros

8 / 24Développement Orienté Aspect et Optimisation 8/24

N

Page 14: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 1/5

Idées directricesUtilisation des pointeurs de fonctionAppel de l’aspect qui appelle la fonction

Démonstration avec un aspect simpleObjectif : afficher la valeur de chaque argument de la fonctionAppel de l’aspect qui appelle la fonction AspectDisplayArgs()Affichage effectif dans AspectpDisplayArgs()

9 / 24Développement Orienté Aspect et Optimisation 9/24

N

Page 15: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 1/5

Idées directricesUtilisation des pointeurs de fonctionAppel de l’aspect qui appelle la fonction

Démonstration avec un aspect simpleObjectif : afficher la valeur de chaque argument de la fonctionAppel de l’aspect qui appelle la fonction AspectDisplayArgs()Affichage effectif dans AspectpDisplayArgs()

9 / 24Développement Orienté Aspect et Optimisation 9/24

N

Page 16: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 2/5

Fonction de l’aspect

1 template<typename FunctionType, typename... ArgsType>2 auto AspectDisplayArgs(FunctionType ∗ Function, const

ArgsType&... FunctionArgs) −> decltype(Function(FunctionArgs...))

3 {4 AspectpDisplayArgs(0, FunctionArgs...);5 return Function(FunctionArgs...);6 }

10 / 24Développement Orienté Aspect et Optimisation 10/24

N

Page 17: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 3/5

Affichage effectif des arguments

1 template<typename ArgType, typename... ArgsType>2 void AspectpDisplayArgs(unsigned int Count, const ArgType&

FunctionArg, const ArgsType& ... FunctionArgs)3 {4 std::cout << "Arg " << Count << ": " << FunctionArg

<< std::endl;5 AspectpDisplayArgs(++Count, FunctionArgs...);6 }

Fin de récurrence

1 void AspectpDisplayArgs(unsigned int Count) {2 }

11 / 24Développement Orienté Aspect et Optimisation 11/24

N

Page 18: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 3/5

Affichage effectif des arguments

1 template<typename ArgType, typename... ArgsType>2 void AspectpDisplayArgs(unsigned int Count, const ArgType&

FunctionArg, const ArgsType& ... FunctionArgs)3 {4 std::cout << "Arg " << Count << ": " << FunctionArg

<< std::endl;5 AspectpDisplayArgs(++Count, FunctionArgs...);6 }

Fin de récurrence

1 void AspectpDisplayArgs(unsigned int Count) {2 }

11 / 24Développement Orienté Aspect et Optimisation 11/24

N

Page 19: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 4/5

Fonction de test

1 int Add(int a, int b) {2 return a + b;3 }

Appel de l’aspect

1 Res = AspectDisplayArgs(&Add, 9, 11);2 std::cout << "Sum of 9 and 11 is: " << Res << std::

endl;

12 / 24Développement Orienté Aspect et Optimisation 12/24

N

Page 20: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 4/5

Fonction de test

1 int Add(int a, int b) {2 return a + b;3 }

Appel de l’aspect

1 Res = AspectDisplayArgs(&Add, 9, 11);2 std::cout << "Sum of 9 and 11 is: " << Res << std::

endl;

12 / 24Développement Orienté Aspect et Optimisation 12/24

N

Page 21: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 5/5

Sortie

1 Arg 0: 92 Arg 1: 113 Sum of 9 and 11 is: 20

Inconvénients

Forte dépendance à C++11Concepts assez peu maîtrisés

Code complet et commentairesDisponible sur http://www.pschweitzer.fr/?p=23

13 / 24Développement Orienté Aspect et Optimisation 13/24

N

Page 22: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 5/5

Sortie

1 Arg 0: 92 Arg 1: 113 Sum of 9 and 11 is: 20

Inconvénients

Forte dépendance à C++11Concepts assez peu maîtrisés

Code complet et commentairesDisponible sur http://www.pschweitzer.fr/?p=23

13 / 24Développement Orienté Aspect et Optimisation 13/24

N

Page 23: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation des templates 5/5

Sortie

1 Arg 0: 92 Arg 1: 113 Sum of 9 and 11 is: 20

Inconvénients

Forte dépendance à C++11Concepts assez peu maîtrisés

Code complet et commentairesDisponible sur http://www.pschweitzer.fr/?p=23

13 / 24Développement Orienté Aspect et Optimisation 13/24

N

Page 24: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation d’un préprocesseur

But du préprocesseurParsera le codeEffectuera des ajouts de code à des points de coupure ("pointcuts")Utilise sa propre syntaxe / son propre codeNécessite une compilation du code généré ensuite

OutilsAspectC++Outils développés en interne

14 / 24Développement Orienté Aspect et Optimisation 14/24

N

Page 25: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Utilisation d’un préprocesseur

But du préprocesseurParsera le codeEffectuera des ajouts de code à des points de coupure ("pointcuts")Utilise sa propre syntaxe / son propre codeNécessite une compilation du code généré ensuite

OutilsAspectC++Outils développés en interne

14 / 24Développement Orienté Aspect et Optimisation 14/24

N

Page 26: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

AspectC++

Le préprocesseur"Imitation" de AspectJ (Java)Projet de recherche de Olaf SpinczykLogiciel open source et gratuit

UtilisationDéfinition de pointcuts (expressions régulières)Implémentation de l’aspect (advices) dans un fichierParsing du code source avec l’aspect (recherche des join points)Compilation du rendu final

15 / 24Développement Orienté Aspect et Optimisation 15/24N

Page 27: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

AspectC++

Le préprocesseur"Imitation" de AspectJ (Java)Projet de recherche de Olaf SpinczykLogiciel open source et gratuit

UtilisationDéfinition de pointcuts (expressions régulières)Implémentation de l’aspect (advices) dans un fichierParsing du code source avec l’aspect (recherche des join points)Compilation du rendu final

15 / 24Développement Orienté Aspect et Optimisation 15/24N

Page 28: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Plan

1 Programmation Orientée Aspect

2 Utilisation de l’aspect en C++

3 Optimisation

4 Conclusion

16 / 24Développement Orienté Aspect et Optimisation 16/24

N

Page 29: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Profiling avec AspectC++

Règle d’orNe jamais optimiser sans avoir profilé !Profiling : récupération des informations de performanceIdentification des zones lentes et critiques du logiciel

Outils de profilingCallgrind (via valgrind)gprof (via gcc/g++)

Limites des outils existant

Absence du véritable support de JNI (valgrind)Output peu lisible (gprof)

17 / 24Développement Orienté Aspect et Optimisation 17/24

N

Page 30: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Profiling avec AspectC++

Règle d’orNe jamais optimiser sans avoir profilé !Profiling : récupération des informations de performanceIdentification des zones lentes et critiques du logiciel

Outils de profilingCallgrind (via valgrind)gprof (via gcc/g++)

Limites des outils existant

Absence du véritable support de JNI (valgrind)Output peu lisible (gprof)

17 / 24Développement Orienté Aspect et Optimisation 17/24

N

Page 31: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Profiling avec AspectC++

Règle d’orNe jamais optimiser sans avoir profilé !Profiling : récupération des informations de performanceIdentification des zones lentes et critiques du logiciel

Outils de profilingCallgrind (via valgrind)gprof (via gcc/g++)

Limites des outils existant

Absence du véritable support de JNI (valgrind)Output peu lisible (gprof)

17 / 24Développement Orienté Aspect et Optimisation 17/24

N

Page 32: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Implémentation d’un aspect TProfiler 1/4

Lignes directricesUtilisation de pointcuts sur toutes les fonctionsImplémentation d’un before & d’un afterRequête des données de performancesUtilisation des ticks et du temps CPUHooking sur main() pour avoir ses propres paramètresCode dans un fichier séparé, compilable sans aspect

Génération de graphes d’appelPour fournir des données cohérentes en sortiePermet de visualiser le fonctionnement du programmeUtilisable avec kcachegrind

18 / 24Développement Orienté Aspect et Optimisation 18/24

N

Page 33: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Implémentation d’un aspect TProfiler 1/4

Lignes directricesUtilisation de pointcuts sur toutes les fonctionsImplémentation d’un before & d’un afterRequête des données de performancesUtilisation des ticks et du temps CPUHooking sur main() pour avoir ses propres paramètresCode dans un fichier séparé, compilable sans aspect

Génération de graphes d’appelPour fournir des données cohérentes en sortiePermet de visualiser le fonctionnement du programmeUtilisable avec kcachegrind

18 / 24Développement Orienté Aspect et Optimisation 18/24

N

Page 34: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Implémentation d’un aspect TProfiler 2/4

Déclaration de l’aspect

1 aspect TProfiler {2 pointcut functions() = "% ...::%(...)";3 pointcut mainargs() = "% main(int, char**)";4 pointcut profiler() = "% TProfiler::%(...)";

Implémentation des fonctionnalités

1 advice execution(functions() && !profiler()) : before() {}2 advice execution(functions() && !profiler()) : after() {}

Implémentation complètehttps://github.com/HeisSpiter/acprof

19 / 24Développement Orienté Aspect et Optimisation 19/24

N

Page 35: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Implémentation d’un aspect TProfiler 2/4

Déclaration de l’aspect

1 aspect TProfiler {2 pointcut functions() = "% ...::%(...)";3 pointcut mainargs() = "% main(int, char**)";4 pointcut profiler() = "% TProfiler::%(...)";

Implémentation des fonctionnalités

1 advice execution(functions() && !profiler()) : before() {}2 advice execution(functions() && !profiler()) : after() {}

Implémentation complètehttps://github.com/HeisSpiter/acprof

19 / 24Développement Orienté Aspect et Optimisation 19/24

N

Page 36: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Implémentation d’un aspect TProfiler 2/4

Déclaration de l’aspect

1 aspect TProfiler {2 pointcut functions() = "% ...::%(...)";3 pointcut mainargs() = "% main(int, char**)";4 pointcut profiler() = "% TProfiler::%(...)";

Implémentation des fonctionnalités

1 advice execution(functions() && !profiler()) : before() {}2 advice execution(functions() && !profiler()) : after() {}

Implémentation complètehttps://github.com/HeisSpiter/acprof

19 / 24Développement Orienté Aspect et Optimisation 19/24

N

Page 37: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Implémentation d’un aspect TProfiler 3/4

Sortie

1 Function: double Madhava(unsigned int) (functions.cpp:31),calls: 1, total ticks: 1270000, total user time: 576000ms,total kernel time: 696000ms

2 Function: double Pow(double,double) (functions.cpp:7), calls:999999, total ticks: 730000, total user time: 328000ms,total kernel time: 424000ms

3 Function: double Sqrt(double) (functions.cpp:3), calls:1999997, total ticks: 1280000, total user time: 852000ms,total kernel time: 328000ms

4 Function: int main(int,char ∗∗) (main.cpp:4), calls: 1, totalticks: 6900000, total user time: 700000ms, total kerneltime: 218000ms

5 Function: unsigned int AskMax(const std::basic_string<char>&) (functions.cpp:44), calls: 5, total ticks: 0, total

user time: 0ms, total kernel time: 0ms

20 / 24Développement Orienté Aspect et Optimisation 20/24

N

Page 38: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Implémentation d’un aspect TProfiler 4/4

Inconvénients

Impossibilité de définir un pointcut sur les bibliothèquesC++11 & CUDA non supportésImpossibilité de définir un pointcut sur des fonctions avec templateLogiciel encore en cours de développement

21 / 24Développement Orienté Aspect et Optimisation 21/24

N

Page 39: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Plan

1 Programmation Orientée Aspect

2 Utilisation de l’aspect en C++

3 Optimisation

4 Conclusion

22 / 24Développement Orienté Aspect et Optimisation 22/24

N

Page 40: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Conclusions

AspectNombreux avantages à l’utilisation de l’aspectSouvent utilisé en entrepriseNéanmoins peu aisé d’utilisation en C++

OptimisationMaître mot : profilingOutils dédiés pour çaPossibilité de le faire en aspect

23 / 24Développement Orienté Aspect et Optimisation 23/24

N

Page 41: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Conclusions

AspectNombreux avantages à l’utilisation de l’aspectSouvent utilisé en entrepriseNéanmoins peu aisé d’utilisation en C++

OptimisationMaître mot : profilingOutils dédiés pour çaPossibilité de le faire en aspect

23 / 24Développement Orienté Aspect et Optimisation 23/24

N

Page 42: Développement Orienté Aspect et Optimisation

Introduction Programmation Orientée Aspect Utilisation de l’aspect en C++ Optimisation Conclusion

Des questions ?

Merci pour votre attention !

24 / 24Développement Orienté Aspect et Optimisation 24/24

N