• Aucun résultat trouvé

Dans une implémentation exploratoire en COMMONLISP, qui ne vise pas particulièrement l’efficacité et dans laquelle sont effectuées de nombreuses statistiques inutiles pour une implémentation réelle, les temps de calcul sont décrits par les tables suivantes. Chaque colonne représente une étape et indique le temps (en secondes) et le nombre de garbage collection effectuées. La colonne “total” ne considère pas la première étape (“read”). Les expérimentations ont été effectuées, suivant le cas (en haut à gauche des tableaux) sur un Pentium à 833 MHz ou à 1,8 GHz.

La grande variabilité des temps mesurés impose une certaine prudence : on constate en particulier que la même étape peut prendre du simple au double suivant le contexte. Pour la phase de lecture, c’est encore pire puisque le rapport peut aller de 1 à 50. Le plus gros fichier de benchmark fait 8 M-octets et 172000 symboles, ce qui provoque des coûts à la fois du côté du système (montage de fichiers distants) et pour la gestion mémoire de LISP. Néanmoins, lorsqu’on lisse les résultats en additionnant plusieurs étapes successives, on aboutit à une plus grande statibilité.

Coloration de classes

Les temps de la coloration de classes sont décrits dans une première figure, pour des heuristiques du choix du maximal qui reposent sur le poids des sous-classes (1, 6 ou 9) et sans bipartition préalable.

Malgré l’imprécision de la mesure, on peut constater que la coloration elle-même ne dépasse pas quelques secondes (coloration uni et bidirectionnelles sont équivalentes). Il faut aussi préciser que 3 étapes relativement coûteuses ne sont pas utiles à la coloration : les colonnes “double” et “dvi” mesurent le temps pris par le calcul d’un ensemble dominant les arêtes du graphe de conflit et de la dévirtualisation [Ducour-nau, 2002a], et la colonne “c2c” concerne le calcul des composantes 2-connexes qui ne sont pas utilisées par les heuristiques.

Les autres heuristiques de choix de maximaux (A, B) ont un coût supérieur car elles imposent de parcourir les couleurs libres et les conflits futurs.

Quant à la bipartition préalable, sa complexité théorique est importanteO(n3)mais elle beaucoup plus faible en pratique, l’implémentation étant basée sur une propagation des changements de partie, qui sont beaucoup moins nombreux que les absences de changement.

Finalement, l’étape la plus coûteuse est celle de l’inversion des composantes biparties des heuristiques 3*** et 6*** : lorsqu’il y a itération jusqu’à stabilité (6***) le surcoût est réellement très important, surtout dans le cas unidirectionnel. Dans le cas bidirectionnel, comme l’amélioration apportée par l’heuristique est assez faible, il est sans doute préférable de s’en passer.

Performance des heuristiques 53

Heuristique 0167

P4 1800 MHz read init conflict double dvi unicolor bicolor total

dylan 0.2 0 0.3 1 0.1 0 0.0 0.0 0.2 0 0.1 0 0.8 1

harlequin 0.3 0 0.1 0 0.1 0 0.1 0.0 0.1 0 0.1 0 0.5 0

vortex3 0.7 1 0.2 1 0.1 0 0.1 0.1 0.3 1 0.3 0 1.1 2

MI-jdk1.3.1 5.5 1 0.7 2 0.5 0 0.1 1.1 1.1 1 1.1 0 4.7 3

MI-Orbix 0.7 0 0.2 0 0.1 0 0.0 0.2 0.3 0 0.3 0 1.1 0

MI-Orbacus 1.1 1 0.2 1 0.1 0 0.0 0.1 0.2 0 0.2 0 0.9 1 MI-IBM-XML 0.1 0 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.1 0 IBM-SF 10.6 3 1.6 6 5.7 0 3.2 4.6 4.5 2 5.9 2 25.8 12 MI-HotJava 0.2 0 0.1 0 0.1 1 0.0 0.0 0.1 0 0.1 0 0.4 1

MI-Corba 0.2 0 0.1 0 0.1 0 0.0 0.1 0.2 0 0.2 0 0.8 0

Java-a 0.0 0 0.0 0 0.0 0 0.0 0.0 0.0 0 0.1 1 0.1 1

JDK.1.0.2 0.6 1 0.1 0 0.0 0 0.0 0.0 0.1 0 0.1 0 0.2 0

Java-1.18 0.1 0 0.1 0 0.1 0 0.0 0.0 0.2 0 0.2 0 0.7 0

Java-1.22 0.3 1 0.4 1 0.3 1 0.1 0.4 0.6 0 0.6 0 2.4 2

Java-1.30 0.5 3 0.5 1 0.3 1 0.1 0.6 0.8 0 0.8 0 3.2 2

IDL 0.0 0 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.0 0

Unidraw 0.1 0 0.1 1 0.0 0 0.0 0.0 0.1 0 0.1 0 0.3 1

Lov-obj-ed 0.2 1 0.1 0 0.1 0 0.0 0.0 0.1 0 0.1 0 0.5 0

Geode 0.6 1 0.4 1 0.4 1 0.3 0.3 0.7 0 0.7 1 2.7 3

SmartEiffel 0.2 1 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.1 0

Eiffel 0.1 2 0.4 1 0.4 0 0.2 0.2 0.8 1 0.7 0 2.7 2

Laure 0.0 0 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.1 0

Self 0.3 3 0.5 1 0.1 0 0.1 0.1 0.2 0 0.4 1 1.3 2

Cecil 0.1 2 0.1 0 0.0 0 0.0 0.0 0.1 0 0.1 0 0.4 0

Total 23.0 21 6.3 17 8.5 4 4.4 8.1 10.9 5 12.2 5 51.0 33 Heuristique 0164

P4 1800 MHz read init conflict double dvi unicolor bicolor total

dylan 0.2 0 0.3 1 0.1 0 0.0 0.0 0 0.2 0 0.1 0 0.8 1

harlequin 0.3 0 0.1 0 0.1 0 0.1 0.0 0 0.1 0 0.1 0 0.5 0

vortex3 0.7 1 0.2 1 0.1 0 0.1 0.1 0 0.3 1 0.3 0 1.1 2

MI-jdk1.3.1 5.5 1 0.7 2 0.4 0 0.1 1.1 0 1.1 1 1.1 0 4.6 3 MI-Orbix 0.7 0 0.2 1 0.1 0 0.0 0.2 0 0.3 0 0.3 0 1.2 1 MI-Orbacus 1.1 1 0.2 1 0.1 0 0.0 0.1 0 0.2 0 0.2 0 0.9 1 MI-IBM-XML 0.1 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.1 0 IBM-SF 10.6 3 1.7 7 5.6 0 3.2 4.6 0 4.5 2 5.8 3 25.6 13 MI-HotJava 0.2 0 0.1 0 0.0 0 0.0 0.0 0 0.2 1 0.1 0 0.4 1 MI-Corba 0.2 0 0.1 0 0.1 0 0.0 0.1 0 0.2 0 0.2 0 0.8 0

Java-a 0.0 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.1 0

JDK.1.0.2 0.6 1 0.1 1 0.0 0 0.0 0.0 0 0.1 0 0.1 0 0.3 1 Java-1.18 0.1 0 0.1 0 0.1 0 0.0 0.0 0 0.2 0 0.2 0 0.7 0 Java-1.22 0.3 1 0.4 1 0.2 0 0.1 0.4 0 0.6 0 0.6 0 2.4 2 Java-1.30 0.5 3 0.6 1 0.3 0 0.1 0.7 1 0.8 0 0.8 0 3.2 2

IDL 0.0 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0

Unidraw 0.1 0 0.0 0 0.0 0 0.0 0.0 0 0.1 0 0.1 1 0.3 1

Lov-obj-ed 0.2 1 0.1 0 0.1 0 0.0 0.0 0 0.1 0 0.1 0 0.5 0

Geode 0.6 1 0.4 1 0.4 1 0.3 0.3 0 0.6 0 0.7 1 2.7 3

SmartEiffel 0.2 1 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.1 0

Eiffel 0.1 2 0.4 1 0.4 0 0.2 0.2 0 0.7 0 0.8 1 2.7 2

Laure 0.0 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.1 0

Performance des heuristiques 54

Heuristique 02A1

P4 1800 MHz read init conflict c2c double dvi unicolor biparti bicolor total

dylan 0.2 0 0.1 0 0.2 1 0.0 0.0 0 0.0 0 0.2 0 0.0 0 0.1 0 0.8 1

harlequin 0.3 0 0.1 0 0.0 0 0.0 0.1 0 0.0 0 0.2 0 0.1 0 0.2 0 0.6 0 vortex3 0.7 1 0.2 1 0.1 0 0.0 0.1 0 0.1 0 0.3 0 0.1 0 0.3 0 1.2 1 MI-jdk1.3.1 5.5 1 0.7 2 0.1 0 0.1 0.1 0 1.2 0 1.2 0 0.2 1 1.3 0 5.1 3 MI-Orbix 0.7 0 0.3 1 0.0 0 0.0 0.0 0 0.2 0 0.3 0 0.0 0 0.3 0 1.2 1 MI-Orbacus 1.1 1 0.1 0 0.0 0 0.0 0.0 0 0.1 0 0.3 0 0.1 0 0.3 0 1.0 1 IBM-XML 0.1 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.1 0 IBM-SF 10.6 3 1.4 4 0.6 0 3.1 2.8 0 4.7 1 8.9 3 0.8 0 11.3 3 33.9 11 MI-HotJava 0.2 0 0.1 0 0.0 0 0.0 0.0 0 0.0 0 0.1 0 0.0 0 0.1 0 0.5 0 MI-Corba 0.2 1 0.1 0 0.0 0 0.0 0.0 0 0.1 0 0.2 0 0.0 0 0.4 1 1.1 1 Java-a 0.0 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.1 0 JDK.1.0.2 0.6 0 0.1 0 0.0 0 0.0 0.0 0 0.0 0 0.1 0 0.0 0 0.1 0 0.2 0 Java-1.18 0.1 1 0.1 0 0.0 0 0.0 0.0 0 0.0 0 0.2 0 0.0 0 0.2 0 0.7 0 Java-1.22 0.3 1 0.4 1 0.1 0 0.0 0.1 0 0.4 0 0.6 0 0.1 0 0.7 1 2.6 2 Java-1.30 0.5 3 0.4 0 0.1 0 0.1 0.1 0 0.6 0 0.9 1 0.1 0 0.9 0 3.4 1

IDL 0.0 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0

Unidraw 0.1 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.1 0 0.0 0 0.1 0 0.2 0 Lov-obj-ed 0.2 1 0.1 0 0.0 0 0.0 0.0 0 0.1 1 0.2 0 0.1 0 0.2 0 0.7 1

Geode 0.6 1 0.4 1 0.2 0 0.1 0.3 0 0.3 0 1.0 0 0.3 0 1.0 1 3.4 2

SmartEiffel 0.2 1 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.1 0 Eiffel 0.1 1 0.2 0 0.1 0 0.2 0.3 1 0.2 0 1.1 0 0.2 0 1.0 1 3.5 2

Laure 0.0 0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.1 0

Self 0.3 3 0.3 0 0.0 0 0.0 0.1 0 0.1 0 0.4 0 0.1 0 0.4 0 1.8 1

Cecil 0.1 2 0.1 0 0.0 0 0.0 0.0 0 0.0 0 0.1 0 0.0 0 0.1 0 0.5 0

Total 22.9 21 5.3 10 1.8 1 3.8 4.1 1 8.2 2 16.5 4 2.2 1 19.1 7 62.9 28 Heuristique 62A1

P4 1800 MHz read init conflict c2c double dvi unicolor biparti bicolor total

dylan 0.3 0 0.1 0 0.0 0.0 0.0 0.0 0.5 1 0.0 0.1 0 0.9 1

harlequin 0.5 1 0.1 1 0.0 0.0 0.1 0.0 1.5 0 0.1 0.6 0 2.5 1

vortex3 0.8 0 0.2 1 0.1 0.0 0.1 0.1 2.0 0 0.1 1.1 1 3.8 2

MI-jdk1.3.1 7.0 1 0.7 1 0.1 0.2 0.1 1.2 4.0 1 0.2 2.1 1 8.9 3

MI-Orbix 1.2 1 0.2 0 0.0 0.0 0.0 0.2 0.4 0 0.0 0.4 1 1.4 1

MI-Orbacus 1.3 0 0.1 0 0.0 0.0 0.0 0.1 0.9 0 0.1 0.4 0 1.8 0

IBM-XML 0.2 0 0.0 0 0.0 0.0 0.0 0.0 0.1 1 0.0 0.1 0 0.2 1

IBM-SF 14.9 3 1.5 4 0.8 3.2 3.1 4.8 39.4 4 0.9 24.5 3 78.7 12

MI-HotJava 0.3 1 0.2 1 0.0 0.0 0.0 0.0 0.4 0 0.0 0.2 0 1.0 1

MI-Corba 0.3 0 0.1 0 0.0 0.0 0.0 0.2 0.4 0 0.0 0.4 0 1.4 0

Java-a 0.1 0 0.0 0 0.0 0.0 0.0 0.0 0.0 0 0.0 0.0 0 0.1 0

JDK.1.0.2 0.7 1 0.1 0 0.0 0.0 0.0 0.0 0.1 0 0.0 0.1 0 0.3 0

Java-1.18 0.2 0 0.2 0 0.0 0.0 0.0 0.0 0.4 0 0.0 0.4 0 1.2 0

Java-1.22 0.4 1 0.4 1 0.1 0.0 0.1 0.5 1.2 0 0.1 1.0 0 3.5 1

Java-1.30 0.8 3 0.5 0 0.1 0.1 0.1 0.7 2.1 1 0.2 1.4 0 5.2 1

IDL 0.1 0 0.0 0 0.0 0.0 0.0 0.0 0.0 0 0.0 0.0 0 0.0 0

Unidraw 0.2 0 0.0 0 0.0 0.0 0.0 0.0 0.1 0 0.0 0.1 0 0.2 0

Lov-obj-ed 0.3 0 0.2 1 0.0 0.0 0.1 0.0 1.3 0 0.1 0.4 0 2.2 1

Geode 0.8 1 0.4 1 0.2 0.1 0.3 0.3 28.7 2 0.3 5.2 0 35.5 3

SmartEiffel 0.3 1 0.0 0 0.0 0.0 0.0 0.0 0.1 0 0.0 0.0 0 0.2 0

Eiffel 0.1 2 0.4 1 0.1 0.2 0.2 0.2 6.0 1 0.3 3.8 1 11.5 3

Laure 0.1 0 0.0 0 0.0 0.0 0.0 0.0 0.1 0 0.0 0.1 0 0.2 0

Self 0.5 3 0.7 0 0.1 0.0 0.1 0.1 1.3 0 0.1 0.7 1 3.1 1

Cecil 0.2 2 0.1 0 0.0 0.0 0.0 0.0 0.5 0 0.0 0.3 0 1.1 0

Total 31.7 21 6.4 12 1.9 3.9 4.4 8.5 91.7 11 2.4 43.6 8 164.8 32

Performance des heuristiques 55

Heuristique 31A1

P4 1800 MHz read init conflict c2c double dvi unicolor bicolor total

dylan 0.2 0 0.3 1 0.0 0 0.0 0.0 0.0 0 0.2 0 0.1 0 0.8 1

harlequin 0.3 0 0.1 0 0.0 0 0.0 0.1 0.0 0 0.4 0 0.2 0 0.8 0

vortex3 0.6 0 0.2 1 0.1 0 0.0 0.1 0.1 0 0.8 0 0.3 0 1.6 1

MI-jdk1.3.1 5.5 2 0.7 2 0.1 0 0.1 0.1 1.1 0 1.7 0 1.2 0 5.3 3 MI-Orbix 0.7 0 0.2 0 0.1 1 0.0 0.0 0.2 0 0.4 0 0.3 0 1.3 1 MI-Orbacus 1.1 1 0.1 0 0.0 0 0.0 0.0 0.1 0 0.4 0 0.4 1 1.2 1

IBM-XML 0.1 0 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.0 0 0.1 0

IBM-SF 10.6 3 1.4 4 0.7 0 3.0 2.7 4.5 1 11.8 3 13.6 3 38.0 11 MI-HotJava 0.2 0 0.1 0 0.0 0 0.0 0.0 0.0 0 0.2 0 0.1 0 0.5 0 MI-Corba 0.2 1 0.2 1 0.0 0 0.0 0.0 0.2 0 0.4 0 0.3 0 1.1 1

Java-a 0.0 0 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.0 0 0.1 0

JDK.1.0.2 0.6 0 0.1 0 0.0 0 0.0 0.0 0.0 0 0.1 0 0.1 0 0.2 0 Java-1.18 0.1 1 0.1 0 0.0 0 0.0 0.0 0.0 0 0.3 1 0.2 0 0.8 1 Java-1.22 0.3 1 0.3 0 0.1 0 0.0 0.1 0.4 0 0.9 1 0.6 0 2.7 1 Java-1.30 0.5 3 0.5 1 0.1 0 0.1 0.1 0.7 0 1.1 0 0.8 0 3.6 1

IDL 0.0 0 0.1 1 0.0 0 0.0 0.0 0.0 0 0.0 0 0.0 0 0.1 1

Unidraw 0.1 0 0.0 0 0.0 0 0.0 0.0 0.0 0 0.1 0 0.1 0 0.2 0

Lov-obj-ed 0.2 1 0.1 0 0.0 0 0.0 0.0 0.0 0 0.4 0 0.2 0 0.8 0

Geode 0.6 1 0.4 1 0.2 0 0.1 0.3 0.3 0 3.4 1 1.2 0 5.8 2

SmartEiffel 0.2 1 0.0 0 0.0 0 0.0 0.0 0.0 0 0.1 0 0.0 0 0.2 0

Eiffel 0.1 1 0.4 1 0.1 0 0.2 0.2 0.2 0 2.5 1 0.8 0 4.6 2

Laure 0.0 1 0.0 0 0.0 0 0.0 0.0 0.0 0 0.1 0 0.0 0 0.1 0

Self 0.3 3 0.8 1 0.0 0 0.0 0.1 0.1 0 0.7 0 0.4 0 2.1 1

Cecil 0.1 2 0.1 0 0.0 0 0.0 0.0 0.0 0 0.2 0 0.1 0 0.6 0

Total 22.9 22 6.2 14 1.6 1 3.7 3.9 8.1 1 26.3 7 21.2 4 72.6 28 Heuristique 0267

P4 1800 MHz read init conflict double dvi unicolor biparti bicolor total

dylan 0.3 0 0.3 1 0.1 0.0 0.0 0 0.2 0 0.0 0 0.1 0 0.8 1

harlequin 0.4 0 0.1 0 0.1 0.1 0.0 0 0.1 0 0.2 0 0.1 0 0.7 0

vortex3 0.7 1 0.2 1 0.1 0.1 0.1 0 0.3 1 0.2 0 0.3 0 1.3 2

MI-jdk1.3.1 6.1 1 0.7 2 0.4 0.1 1.1 0 1.2 1 0.4 0 1.2 1 13.5 4

MI-Orbix 0.8 0 0.2 0 0.1 0.0 0.2 0 0.4 1 0.1 0 0.3 0 1.3 1

MI-Orbacus 1.2 1 0.1 0 0.1 0.0 0.1 0 0.2 0 0.2 0 0.3 1 1.1 1 MI-IBM-XML 0.1 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.1 0 IBM-SF 13.5 3 1.6 6 5.6 3.1 4.7 1 5.0 3 35.2 0 2.9 2 58.3 12 MI-HotJava 0.3 0 0.1 0 0.0 0.0 0.0 0 0.1 0 0.1 0 0.1 0 0.5 0

MI-Corba 0.3 0 0.1 0 0.1 0.0 0.1 0 0.2 0 0.2 0 0.2 0 1.1 1

Java-a 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.1 0

JDK.1.0.2 0.7 1 0.1 0 0.0 0.0 0.0 0 0.1 0 0.0 0 0.1 0 0.2 0

Java-1.18 0.1 0 0.2 1 0.1 0.0 0.0 0 0.2 0 0.0 0 0.2 0 0.8 1

Java-1.22 0.4 1 0.4 1 0.2 0.1 0.4 0 0.6 0 0.2 0 0.7 1 2.7 2

Java-1.30 0.7 3 0.5 1 0.3 0.1 0.6 0 0.8 0 0.4 1 0.8 0 3.5 2

IDL 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0

Unidraw 0.1 0 0.0 0 0.0 0.0 0.0 0 0.1 0 0.0 0 0.1 0 0.2 0

Lov-obj-ed 0.3 1 0.1 0 0.1 0.0 0.0 0 0.2 1 0.2 0 0.1 0 0.8 1

Geode 0.6 1 0.4 1 0.4 0.3 0.3 0 0.8 1 1.6 0 0.5 0 4.2 2

SmartEiffel 0.2 1 0.1 1 0.0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.3 1

Eiffel 0.1 2 0.3 0 0.4 0.2 0.3 1 0.8 0 1.0 0 0.9 1 4.0 2

Laure 0.0 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.0 0 0.0 0 0.1 0

Performance des heuristiques 56

Coloration de méthodes et d’attributs

Les tableaux suivants donnent le détail des temps d’exécution des heuristiques de coloration de mé-thodes (et d’attributs).

Heuristique 0167

P4 1800 MHz read init conflict double dvi subobj table unicolor bicolor total

dylan 0.3 1 0.1 0 0.1 0.0 0.0 0 0.2 0 0.5 1 0.3 0 0.2 0 1.4 1

harlequin 0.4 0 0.1 1 0.1 0.1 0.0 0 0.1 0 0.3 0 0.2 0 0.2 0 1.0 1

vortex3 0.7 0 0.3 1 0.1 0.1 0.1 0 0.3 1 1.6 0 0.4 0 0.4 0 3.2 2

MI-jdk1.3.1 5.7 1 1.0 1 0.4 0.1 1.3 0 0.8 2 2.9 0 1.7 1 1.6 0 9.8 4

MI-Orbix 0.8 1 0.3 1 0.1 0.0 0.2 0 0.2 0 0.9 0 0.5 0 0.6 1 2.8 2

MI-Orbacus 0.9 0 0.1 0 0.1 0.0 0.1 0 0.1 0 0.5 0 0.4 1 0.3 0 1.8 1 MI-IBM-XML 0.1 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.1 0 0.0 0 0.0 0 0.2 0 IBM-SF 13.3 5 1.7 4 6.3 3.4 5.6 1 1.7 2 7.9 1 5.0 2 6.8 2 38.8 12 MI-HotJava 0.3 0 0.1 0 0.0 0.0 0.0 0 0.1 0 0.3 0 0.2 0 0.2 0 0.9 0

MI-Corba 0.3 1 0.2 1 0.1 0.0 0.2 0 0.2 0 0.6 0 0.3 0 0.3 0 1.9 1

JDK.1.0.2 0.7 1 0.1 0 0.0 0.0 0.0 0 0.2 1 0.3 0 0.1 0 0.1 0 0.8 1

Unidraw 0.1 0 0.0 0 0.0 0.0 0.0 0 0.0 0 0.2 0 0.1 0 0.1 0 0.5 0

Lov-obj-ed 0.3 1 0.1 0 0.1 0.0 0.0 0 0.1 0 0.4 0 0.2 0 0.2 0 1.1 0

Geode 0.7 1 0.4 1 0.4 0.3 0.4 1 0.2 0 5.7 0 1.0 1 0.8 0 9.2 3

SmartEiffel 0.2 1 0.0 0 0.0 0.0 0.0 0 0.0 0 0.4 0 0.1 0 0.1 0 0.7 0

Self 0.5 4 0.5 1 0.1 0.1 0.1 0 0.1 0 5.7 1 0.6 0 0.7 0 7.8 2

Cecil 0.1 2 0.1 0 0.0 0.0 0.0 0 0.1 0 0.5 0 0.7 1 0.2 0 1.8 1

Total 25.5 19 5.2 11 8.0 4.2 8.1 2 4.4 6 28.8 3 11.7 6 12.7 3 83.7 31 Heuristique 0267

P3 833 MHz read init conflict c2c double dvi subobj table unicolor biparti bicolor total

dylan 0.4 0 0.2 0 0.0 0.0 0.0 0.0 0 0.3 1 0.8 0 0.7 1 0.1 0 0.4 0 2.8 2

harlequin 0.5 0 0.1 0 0.1 0.0 0.1 0.0 0 0.3 1 0.5 0 0.4 0 0.1 0 0.4 0 2.0 1

vortex3 1.1 1 1.3 1 0.1 0.0 0.1 0.2 0 0.3 0 1.9 0 0.9 1 0.2 0 0.8 0 6.0 2

MI-jdk1.3.1 8.0 1 1.3 1 0.2 0.1 0.2 2.1 0 1.4 2 4.9 0 3.4 1 0.4 0 3.6 1 18.3 5 MI-Orbix 1.3 1 0.4 0 0.0 0.0 0.0 0.4 0 0.9 1 1.5 0 0.9 0 0.1 0 1.4 1 5.8 2 MI-Orbacus 1.2 0 0.2 0 0.1 0.0 0.1 0.3 0 0.2 0 0.9 0 1.0 1 0.1 0 0.7 0 3.7 1

IBM-XML 0.2 0 0.0 0 0.0 0.0 0.0 0.0 0 0.0 0 0.1 0 0.1 0 0.0 0 0.1 0 0.4 0

IBM-SF 19.6 4 3.7 3 1.4 1.8 5.9 9.0 1 3.6 3 10.9 0 10.8 2 2.1 0 6.8 1 57.5 11 MI-HotJava 0.3 0 0.1 0 0.0 0.0 0.0 0.0 0 0.6 1 0.5 0 0.6 0 0.1 0 0.3 0 2.4 1 MI-Corba 0.6 1 0.2 0 0.1 0.0 0.1 0.3 0 0.2 0 1.0 0 1.0 1 0.1 0 0.6 0 3.7 1 JDK.1.0.2 1.0 1 0.1 0 0.0 0.0 0.0 0.0 0 0.1 0 0.4 0 0.2 0 0.0 0 0.5 0 1.4 0

Unidraw 0.2 1 0.1 0 0.0 0.0 0.0 0.0 0 0.1 0 0.4 0 0.2 0 0.0 0 0.2 0 1.0 0

Lov-obj-ed 0.4 0 0.1 0 0.1 0.0 0.1 0.1 0 0.5 1 0.5 0 0.6 0 0.2 0 0.4 0 2.5 1

Geode 1.4 2 1.1 1 0.5 0.1 0.7 0.4 0 0.4 0 4.4 0 2.2 1 0.8 0 3.2 1 14.1 3

SmartEiffel 0.5 0 0.1 0 0.0 0.0 0.0 0.0 0 0.0 0 0.4 0 0.2 0 0.0 0 0.2 0 1.1 0

Self 0.8 4 0.5 0 0.1 0.0 0.1 0.1 0 0.2 0 5.3 1 1.1 0 0.3 0 1.2 0 9.1 1

Cecil 0.3 2 0.2 0 0.0 0.0 0.0 0.0 0 0.1 0 0.8 0 0.4 0 0.3 1 0.4 0 2.4 1

Total 37.8 18 9.8 6 2.8 2.2 7.6 13.0 1 9.3 10 35.2 1 24.6 8 4.9 1 21.0 4 134.2 32 Heuristique 0164

P4 1800 MHz read init conflict double dvi subobj table unicolor bicolor total SmartEiffel 0.5 0 0.2 2 0.0 0 0.0 0.0 0.1 1 0.6 1 0.3 2 0.2 1 1.5 7 JDK.1.0.2 0.3 2 0.1 0 0.0 0 0.0 0.0 0.1 1 0.6 1 0.2 0 0.2 0 1.1 2 Unidraw 0.1 0 0.0 0 0.0 0 0.0 0.0 0.1 1 0.4 0 0.1 0 0.1 0 0.9 1 Lov-obj-ed 0.2 1 0.1 1 0.1 0 0.1 0.0 0.1 1 0.6 0 0.2 0 0.2 0 1.4 3 Geode 0.3 4 0.4 4 0.5 1 0.3 0.3 0.3 2 6.2 2 1.0 2 0.9 1 9.8 12 Total 1.3 7 0.7 7 0.6 1 0.4 0.3 0.6 6 8.3 4 1.8 4 1.7 2 14.6 25

Performance des heuristiques 57

Heuristique 0264

P4 1800 MHz read init conflict double dvi subobj table unicolor biparti bicolor total SmartEiffel 0.5 0 0.2 2 0.0 0 0.0 0 0.0 0.1 1 0.6 1 0.3 2 0.0 0 0.2 1 1.5 7 JDK.1.0.2 0.3 2 0.1 1 0.0 0 0.0 0 0.0 0.0 0 0.6 1 0.2 0 0.0 0 0.2 1 1.1 3 Unidraw 0.1 0 0.0 0 0.0 0 0.0 0 0.0 0.1 1 0.4 0 0.1 0 0.0 0 0.1 0 0.9 1 Lov-obj-ed 0.1 1 0.1 1 0.1 0 0.0 0 0.0 0.1 1 0.6 0 0.2 1 0.3 0 0.2 0 1.7 3 Geode 0.3 4 0.4 4 0.5 1 0.3 1 0.3 0.3 2 6.2 1 1.1 2 2.4 1 0.9 1 12.2 13 Total 1.3 7 0.7 8 0.6 1 0.4 1 0.3 0.6 5 8.3 3 1.9 5 2.7 1 1.6 3 17.3 27

On constate que la coloration de méthodes et d’attributs n’augmente pas significativement le coût de la coloration de classes : c’est une heureuse conséquence de l’heuristique choisie, dont la complexité dé-pend plus du nombre de classes que du nombre de méthodes ou d’attributs. Comme pour la coloration de classes, les étapes les plus coûteuses ne sont pas utiles à la coloration : outre les colonnes “double” et “dvi, les colonnes “subobjects” et “table” effectuent toutes les statisques sur les attributs et les méthodes qui permettent de simuler les diverses implémentations par sous-objets [Ducournau, 2002a].

Conclusion

Les performances temporelles des heuristiques sont tout à fait raisonnables si l’on vise une compilation globale, non incrémentale. Au total, une implémentation optimisée et dédiée à la coloration bidirectionnelle descendrait certainement au-dessous de la seconde pour les plus grosses hiérarchies, à l’exception peut-être de IBM-SF dont la taille est vraiment colossale.

Bien entendu, si l’on souhaite une technique incrémentale, par exemple pour le test de sous-typage, le temps de calcul de la coloration est sans doute prohibitif.

1eroctobre 2003

Chapitre 8

Documents relatifs