EXPRESSO 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. EXPRESSO 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. 3 EXPRESSO Plan de la présentation • Projet Expresso – Java pour l’embarqué (c) Sergio Yovine - VERIMAG - [email protected] 4 EXPRESSO Java Interpreter JVM Data Area Garbage Collector Java Native Interface Operating System (c) Sergio Yovine - VERIMAG - [email protected] Thread Area Scheduler 5 EXPRESSO Java embarqué Native code JRTS Data Area Memory Allocation Java Native Interface Thread Area Synthesized Scheduler Real Time Operating System (c) Sergio Yovine - VERIMAG - [email protected] 6 EXPRESSO Expresso (c) Sergio Yovine - VERIMAG - [email protected] 7 EXPRESSO 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 - [email protected] 8 Génération de code natif EXPRESSO Inconvénients Avantages « à la volée » - JIT • Compilation du code résident et chargé • Utilisation de ressources CPU & RAM • Recompile à chaque exécution « statique » - AOT • Optimisations plus importantes • Conserve le code compilé. • Sacrifie la portabilité Expansion de la taille du code compilé (c) Sergio Yovine - VERIMAG - [email protected] 9 EXPRESSO 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 - [email protected] 10 Compilation sélective EXPRESSO Informations collectées .class Instrumentation Exécution de l ’application typique Analyse TurboJ Liste des méthodes à compiler Byte-code Instrumenté Analyse de l ’application (c) Sergio Yovine - VERIMAG - [email protected] Application compilée Compilation 11 EXPRESSO 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 - [email protected] Sélection des méthodes triées sur le nombre de Byte-codes exécutés. Nb de Byte-codes exécutés EXPRESSO Sélection 1 2 3 4 méthodes Peut-on prédire l’accélération ? (c) Sergio Yovine - VERIMAG - [email protected] 12 13 EXPRESSO (c) Sergio Yovine - VERIMAG - [email protected] 14 EXPRESSO 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 - [email protected] 15 Classification du Byte-code EXPRESSO Catégorie de Byte-code « Calcul » « Forte interaction avec la machine virtuelle » « Appels de méthodes » (c) Sergio Yovine - VERIMAG - [email protected] Type de Byte-code manipulation pile, branchement, variables (locales, d ’instances, classes), arithmétique, convertion de type new, newarray, anewarray, multianewarray, athrow, checkcast, instanceof, moniterenter, moniterexit Invokevirtual, invokeinterface, invokestatic, invokespecial Accélération importante faible variable 16 Appel croisé EXPRESSO Appel entre une méthode compilée et une méthode interprétée ou native. a e Appel Croisé Interprétée b Interprétée Appel Direct compilée d c Native compilée (c) Sergio Yovine - VERIMAG - [email protected] méthode 17 Coût des appels EXPRESSO Méthode Appelante / Appelée Accélération 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 (c) Sergio Yovine - VERIMAG - [email protected] Appels directs 18 EXPRESSO (c) Sergio Yovine - VERIMAG - [email protected] 19 EXPRESSO Modèle d ’accélération Byte-codes exécutés Appels croisés Nb Byte-codes exécutés compilés R = Nb appels croisés (c) Sergio Yovine - VERIMAG - [email protected] 20 EXPRESSO (c) Sergio Yovine - VERIMAG - [email protected] 21 EXPRESSO 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 - [email protected] 22 Compilation sélective EXPRESSO Informations collectées .class Instrumentation Exécution de l ’application typique Analyse TurboJ Liste des méthodes à compiler Byte-code Instrumenté Analyse de l ’application (c) Sergio Yovine - VERIMAG - [email protected] Application compilée Compilation 23 EXPRESSO Graphe d ’appels 1537 T.j() 8 10 5 A.m() (c) Sergio Yovine - VERIMAG - [email protected] C.m() D.m() 24 Appels de méthodes EXPRESSO invokespecial et invokestatic => Une méthode cible unique. invokevirtual et invokeinterface => Polymorphisme : Plusieurs cibles potentielles. (c) Sergio Yovine - VERIMAG - [email protected] 25 Cibles potentielles EXPRESSO Class A { public String m(){...} Invokevirtual A.getId()I public Int getId(){ return 0;} } Class B extends A { public Int getId(){ return 1;} Invokevirtual A.toString()V T.j() } Class C extends B { public String m(){...} ?.m() T.j() public Int getId(){ return 2;} } Class D extends B { public String m(){...} public Int getId(){ return 3;} } (c) Sergio Yovine - VERIMAG - [email protected] A.m() C.m() D.m() 26 Techniques mises en œuvre EXPRESSO • 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 - [email protected] 27 Compilation sélective EXPRESSO Informations collectées .class Instrumentation Exécution de l ’application typique Analyse TurboJ Liste des méthodes à compiler Byte-code Instrumenté Analyse de l ’application (c) Sergio Yovine - VERIMAG - [email protected] Application compilée Compilation 28 Algorithme glouton EXPRESSO Ens. des méthodes sélectionnées a a 5 b 1 Ens. des méthodes candidates c b 1 10 50 c e d 1 10 50 e d 1 f 50 g Évaluation du ratio pour chaque candidats (c) Sergio Yovine - VERIMAG - [email protected] 5 f 50 g Sélection du candidat maximisant le ratio 29 EXPRESSO (c) Sergio Yovine - VERIMAG - [email protected] 30 EXPRESSO Résultats (c) Sergio Yovine - VERIMAG - [email protected] 31 Conclusions EXPRESSO • Outil: 13000 lignes de Java, 80 classes – 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 - [email protected] 32 EXPRESSO (c) Sergio Yovine - VERIMAG - [email protected]