Title: Speedup Prediction for Selective Compilation of Embedded Java Programs
1Speedup 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.
2Analyse du Byte-code Java par instrumentation
amélioration des performances par compilation
sélective
Sébastien Cros Mémoire dIngé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.
3Plan de la présentation
- Projet Expresso Java pour lembarqué
4Java
Interpreter
Java Native Interface
Data Area
Thread Area
JVM
Garbage Collector
Scheduler
Operating System
5Java embarqué
Native code
Java Native Interface
Data Area
Thread Area
JRTS
Memory Allocation
Synthesized Scheduler
Real Time Operating System
6Expresso
7Plan de la présentation
- Projet Expresso Java pour lembarqué
- Génération de code natif prédiction de
laccélération
8Génération de code natif
à la volée - JIT
statique - AOT
- Optimisations plus importantes
- Conserve le code compilé.
- Compilation du code
- résident et chargé
Avantages
- Utilisation de ressources
- CPU RAM
- Recompile à chaque exécution
Inconvénients
Expansion de la taille du code compilé
9TurboJ
- 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 à
lexécution (exécution mixte). - Compilation sélective par méthode.
10Compilation sélective
Application compilée
TurboJ
Liste des méthodes à compiler
11Technique 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.
12Sélection des méthodes triées sur le nombre de
Byte-codes exécutés.
Nb de Byte-codes exécutés
1
2
3
4
méthodes
Peut-on prédire laccélération ?
13(No Transcript)
14Plan de la présentation
- Projet Expresso Java pour lembarqué
- Génération de code natif
- Prédiction de laccélération
15Classification du Byte-code
Type de Byte-code
Accélération
Catégorie de Byte-code
manipulation pile, branchement, variables
(locales, d instances, classes), arithmétique,
convertion de type
Calcul
importante
new, newarray, anewarray, multianewarray,
athrow, checkcast, instanceof, moniterenter,
moniterexit
Forte interaction avec la machine virtuelle
faible
Appels de méthodes
Invokevirtual, invokeinterface, invokestatic,
invokespecial
variable
16Appel croisé
- Appel entre une méthode compilée et une méthode
interprétée ou native.
a
e
Interprétée
Interprétée
b
compilée
c
d
méthode
compilée
Native
17Coût des appels
Méthode Appelante / Appelée
Int / Cpl
Cpl / Int
Accélération
Int / Int
Cpl / Cpl
invokevirtual
5
0.3
0.6
1
invokeinterface
0.6
2.5
1
0.5
invokestatic
0.6
5
1
0.4
1
0.5
invokespecial
5
0.4
Appels croisés
Appels directs
18(No Transcript)
19Modèle d accélération
Byte-codes exécutés
Appels croisés
20(No Transcript)
21Plan de la présentation
- Projet Expresso Java pour lembarqué
- Génération de code natif
- Prédiction de laccélération
- Mise en œuvre
22Compilation sélective
Informations collectées
Application compilée
.class
Instrumentation de l application
Exécution typique
TurboJ
Analyse
Liste des méthodes à compiler
Byte-code Instrumenté
Analyse de l application
Compilation
23Graphe d appels
1537
T.j()
8
10
5
C.m()
D.m()
A.m()
24Appels de méthodes
- invokespecial et invokestatic
- gt Une méthode cible unique.
- invokevirtual et invokeinterface
- gt Polymorphisme Plusieurs cibles
potentielles.
25Cibles potentielles
Class A public String m()... Class B
extends A Class C extends B public
String m()... Class D extends B public
String m()...
-
- 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()
26Techniques mises en œuvre
- Analyse de la hiérarchie de classes
- gt retrouver les cibles potentielles de chaque
point d appels. - Parcours du flot d exécution
- gt retrouver la référence d un objet sur la
pile d opérande. - Analyse de type intra-procédurale
- gt réduire le nombre de compteurs d appels.
27Compilation sélective
Informations collectées
Application compilée
.class
Instrumentation de l application
Exécution typique
TurboJ
Analyse
Liste des méthodes à compiler
Byte-code Instrumenté
Analyse de l application
Compilation
28Algorithme glouton
Ens. des méthodes sélectionnées
a
a
5
5
b
b
1
1
Ens. des méthodes candidates
10
50
10
50
c
c
e
d
e
d
1
1
50
50
f
f
g
g
Évaluation du ratio pour chaque candidats
Sélection du candidat maximisant le ratio
29(No Transcript)
30Résultats
31Conclusions
- 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
32(No Transcript)