Speedup Prediction for Selective Compilation of Embedded Java Programs V. Colin de Verdiere, S. Cros, C. Fabre, R. Guider Silicomp Research Institute S. Yovine Verimag "Workshop on Embedded Software, EMSOFT'02". Grenoble, October 7-9, 2002. LNCS 2491.
Mémoire d’Ingénieur C.N.A.M. en Informatique Analyse du Byte-code Java par instrumentation : amélioration des performances par compilation sélective Sébastien Cros Mémoire d’Ingénieur C.N.A.M. en Informatique Grenoble, 2 juillet 2002 Travaux réalisés du 1er Février 2001 au 31 Janvier 2002 au sein de l’équipe compilation du Silicomp Research Institute, sous la direction de M. Sergio Yovine du laboratoire VERIMAG.
Plan de la présentation Projet Expresso – Java pour l’embarqué (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Java Interpreter Data Area Java Native Interface Thread Area Garbage JVM Garbage Collector Scheduler Operating System (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Real Time Operating System Java embarqué Native code Data Area Java Native Interface Thread Area JRTS Memory Allocation Synthesized Scheduler Real Time Operating System (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Expresso (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Plan de la présentation Projet Expresso – Java pour l’embarqué Génération de code natif – prédiction de l’accélération (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Génération de code natif « à la volée » - JIT « statique » - AOT Compilation du code résident et chargé Optimisations plus importantes Conserve le code compilé. Avantages Utilisation de ressources CPU & RAM Recompile à chaque exécution Sacrifie la portabilité Inconvénients Expansion de la taille du code compilé (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
TurboJ Compilateur java AOT Du bytecode vers le code natif. Utilisation du C comme langage intermédiaire. Compile une fois, conserve le code compilé. Optimisations globales. Cohabitation du bytecode et du code natif à l’exécution (exécution mixte). Compilation sélective par méthode. (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Compilation sélective Instrumentation de l ’application .class Informations collectées Exécution typique Analyse Byte-code Instrumenté Analyse de l ’application Compilation Application compilée TurboJ Liste des méthodes à compiler (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Technique naïve de partitionnement Hypothèses : Accélération constante quelque soit le type de Byte-code compilé. Nombre de Byte-codes exécutés par une méthode reflète son temps d ’exécution. Sélectionner les méthodes qui exécutent le plus grand nombre de Byte-code. (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Sélection des méthodes triées sur le nombre de Byte-codes exécutés. Nb de Byte-codes exécutés Sélection 1 2 3 4 méthodes Peut-on prédire l’accélération ? (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
(c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Plan de la présentation Projet Expresso – Java pour l’embarqué Génération de code natif Prédiction de l’accélération (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Classification du Byte-code Catégorie de Byte-code Type de Byte-code Accélération manipulation pile, branchement, variables (locales, d ’instances, classes), arithmétique, convertion de type « Calcul » importante « Forte interaction avec la machine virtuelle » new, newarray, anewarray, multianewarray, athrow, checkcast, instanceof, moniterenter, moniterexit faible « Appels de méthodes » Invokevirtual, invokeinterface, invokestatic, invokespecial variable (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Appel croisé Appel entre une méthode compilée et une méthode interprétée ou native. a e Appel Croisé Interprétée Interprétée b Appel Direct compilée c d méthode Native compilée (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Coût des appels Méthode Appelante / Appelée Accélération invokevirtual Int / Int Int / Cpl Cpl / Int Cpl / Cpl invokevirtual 1 0.3 0.6 5 invokeinterface 1 0.5 0.6 2.5 invokestatic 1 0.4 0.6 5 invokespecial 1 0.4 0.5 5 Appels croisés Appels directs (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
(c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Modèle d ’accélération Byte-codes exécutés Appels croisés Nb Byte-codes exécutés compilés Nb appels croisés R = (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
(c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Plan de la présentation Projet Expresso – Java pour l’embarqué Génération de code natif Prédiction de l’accélération Mise en œuvre (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Compilation sélective Informations collectées Application compilée .class Instrumentation de l ’application Exécution typique Analyse TurboJ Liste des méthodes à compiler Byte-code Instrumenté Analyse de l ’application Compilation (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Graphe d ’appels 1537 T.j() 8 10 5 A.m() C.m() D.m() (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Appels de méthodes invokespecial et invokestatic => Une méthode cible unique. invokevirtual et invokeinterface => Polymorphisme : Plusieurs cibles potentielles. (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Invokevirtual A.getId()I Cibles potentielles Class A { public String m(){...} } Class B extends A { Class C extends B { Class D extends B { Invokevirtual A.getId()I public Int getId(){ return 0;} public Int getId(){ return 1;} public Int getId(){ return 2;} public Int getId(){ return 3;} Invokevirtual A.toString()V T.j() ?.m() T.j() C.m() D.m() A.m() (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Techniques mises en œuvre Analyse de la hiérarchie de classes => retrouver les cibles potentielles de chaque point d ’appels. Parcours du flot d ’exécution => retrouver la référence d ’un objet sur la pile d ’opérande. Analyse de type intra-procédurale => réduire le nombre de compteurs d ’appels. (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Compilation sélective Informations collectées Application compilée .class Instrumentation de l ’application Exécution typique Analyse TurboJ Liste des méthodes à compiler Byte-code Instrumenté Analyse de l ’application Compilation (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Algorithme glouton Évaluation du ratio pour chaque candidats Ens. des méthodes sélectionnées a a 5 5 b 1 b 1 Ens. des méthodes candidates 10 50 10 50 c c e d e d 1 1 50 f 50 f g g Évaluation du ratio pour chaque candidats Sélection du candidat maximisant le ratio (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
(c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Résultats (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
Conclusions Outil: 13000 lignes de Java, 80 classes Axes d’évolution : d ’instrumentation « Tprofiler » : Collecte le graphe d ’appels Outil d ’analyse « Tselect » : Heuristique gloutonne Axes d’évolution : Analyse : sélection initiale des méthodes Modèle : raffiner la classification du Byte-code (c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr
(c) Sergio Yovine - VERIMAG - Sergio.Yovine@imag.fr