Expresso - emsoft02

publicité
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]
Téléchargement