• Aucun résultat trouvé

Résultat d'exécution d'une distribution polymorphique

4.3 Résultats et analyse des performances

4.3.4 Résultat d'exécution d'une distribution polymorphique

Les états stables pour les distributions dont le nombre de types impliqués est au moins de 3 sont les états polymorphiques à savoir : l'état polymorphique-domination, qui est un état optimisé ; les états avec dispatch à savoir soit dispatch-virtuel, soit le dispatch-d'interface. Ces états sont tous naux (cf. Figure 4.4).

4.3.4.1 Dispatch virtuel VS. dispatch d'interface

Quelque soit les distributions exécutées, l'état dispatch-d'interface soure d'un écart de performance quasi-constant par rapport à l'état dispatch-virtuel. Cet écart est en moyenne de -20% sur les distributions considérées et provient de la diérence de nature entre invokevirtual et invokeinterface (cf. Section 4.2.2.6). La mesure considère le cas ou l'index de l'interface dans la itable est 0 (dispatch-d'interface-0).

En eet, la performance de l'état dispatch-d'interface dépend des indexes de l'interface dans les itable des types composant la distribution. La Figure 4.16 montre la performance en fonction de cet index dans le cas d'une distribution monomorphique. La performance est maximale pour l'index 0, car plus l'index est grand, plus la durée d'exécution est longue du fait de la recherche itérative de l'interface dans la itable. Les écarts de performance par rapport à l'index 0 sont résumés Table 4.6. Comme la recherche de l'interface correspond à l'exécution d'une boucle dont le nombre d'itérations est égal à l'index, la performance quand l'index croit tend théoriquement vers 0 avec une pente convexe (la durée d'exécution tend linéairement vers+∞). En pratique il est très rare qu'une classe implémente plus de 5 interfaces, même si les spécications limitent le nombre à 65535 [60]. L'index dans la itable de la classe implémentant l'interface correspond à la position de l'interface qui suit le mot clef implements dans la dénition de cette classe.

Index dans la itable Écart de performance (en %) par rapport à l'index 0 0 0% 1 -9% 2 -21% 3 -31% 4 -37%

Tab. 4.6: Impact de l'index de l'interface dans la itable sur la performance : écart par rapport à l'index 0

4.3.4.2 Impact de la grandeur du polymorphisme

La Figure 4.17 montre les performances des états polymorphiques en fonction de la grandeur du polymorphisme. Les distributions considérées sont les distributions aléatoires équirépartie. Par exemple pour une grandeur du polymorphisme de 4 la distribution

consi-Distribution monomorphique

0

100

200

300

400

500

Performance [Mop/s]

État du site d'appel

Dispatch d'interface-0 Dispatch d'interface-1 Dispatch d'interface-2 Dispatch d'interface-3 Dispatch d'interface-4

Fig. 4.16: Performance du dispatch d'interface en fonction de l'index de l'interface dans la itable. L'état dispatch-d'interface-X indique que l'index est X. L'index correspond à la position de l'interface derrière le mot clef implements dans la dénition de la classe (la numérotation commençant à 0)

dérée est Al. 25-25-25-25 (cf. Section 4.3.1).

Pour les états de dispatch (dispatch-virtuel et dispatch-d'interface-0), comme le code généré ne contient pas de branchements conditionnels, la complexité du code exécuté est la même quelque soit la distribution. Les écarts de performance observés sont dues à la prédiction de branchement. La diminution des performances pour les états polymorphiques lorsque la grandeur du polymorphisme augmente est résumée Table 4.7. Ces écarts sont mesurés par rapport à la performance pour une distribution monomorphique (grandeur du polymor-phisme égale à 1). Sur l'architecture considérée, la diminution est signicative à partir de 2 (supérieur à 50%) et se stabilise au delà autour de 75% pour des distributions aléatoires équiréparties.

1 2 3 4 5 6

Grandeur du polymorphisme

pour des distributions aléatoires équiréparties

0

100

200

300

400

500

Performance [Mop/s]

État du site d'appel

Polymorphique domination (dispatch virtuel)

Dispatch virtuel Dispatch d'interface-0

Fig. 4.17: Impact de la grandeur du polymorphisme sur les performances des états stables pour des distributions aléatoires équiréparties

Grandeur du

polymorphisme Polymorphique-domination Dispatch-virtuel Dispatch-d'interface

1 (monomorphique) 0% 0% 0% 2 (bimorphique) -48% -60% -63% 3 -72% -70% -70% 4 -76% -71% -73% 5 -79% -72% -74% 6 -80% -73% -75%

Tab. 4.7: Impact de la grandeur du polymorphisme pour des distributions aléatoires équi-réparties : écart de performance par rapport à une distribution monomorphique

4.3.4.3 Tri d'une distribution

La Figure 4.18 montre les performances des distributions 4-Polymorphiques périodiques dont la taille des paquets varie. Pour chaque état la complexité du code exécuté est la même quelque soit la distribution. Les variations de performance observées proviennent donc de la prédiction de branchement. Pour une taille de paquet de 1 la prédiction de branchement permet de maintenir un bon niveau de performance. Les performances plongent néanmoins pour les tailles de paquet supérieur puis remontent progressivement quand la taille des pa-quets augmente. La taille des distributions considérée étant de 2048, une taille de paquet de 512 correspond à un tableau ordonné par type. Cette distribution garantie une bonne prédiction de branchement et permet d'améliorer les performances par rapport à une dis-tribution aléatoires. La Table 4.8 montre le facteur d'accélération obtenu pour des distribu-tions équiréparties ordonnées par rapport à des distribudistribu-tions équiréparties aléatoires. Cette observation montre qu'un tri par type d'une distribution polymorphique avant l'exécution intensive par un site d'appel est une piste d'optimisation possible.

1 2 4 8 16 32 64 128 256 512

Taille des paquets de distributions 4-polymorphiques périodiques

0

100

200

300

400

500

Performance [Mop/s]

État du site d'appel

Polymorphique domination (dispatch virtuel)

Dispatch virtuel Dispatch d'interface-0

Fig. 4.18: Impact de la taille des paquets (cf. Section 4.3.1.1) sur les performances des états polymorphiques pour des distributions 4-polymorphiques périodiques

Grandeur du

polymorphisme Polymorphique-domination Dispatchvirtuel Dispatchd'interface

2 ×2,80 ×2,80 ×2,80

4 ×1,05 ×2,70 ×3,80

8 ×3,80 ×4,90 ×4,60

Tab. 4.8: Facteurs d'accélération des états polymorphiques observés après le tri de distri-butions aléatoires équiréparties

4.3.4.4 État polymorphique-domination

L'état polymorphique-domination (cf. Section 4.2.2.5) est un état polymorphique, op-timisé pour améliorer la performance de l'exécution de distributions possédant un type dominant. Pour cela, le type du receveur est comparé au type prolé dominant. Si le test est vrai le code exécute la méthode correspondant au type dominant, si il est faux, il exé-cute la branche de dispatch qui correspond à un état polymorphique avec dispatch (état dispatch-virtuel pour invokevirtuel et dispatch-d'interface pour invokeinterface). Il est généré lorsque la distribution prolée est polymorphique avec un type présent au delà du seuil xé par le paramètre -XX:TypeProfileMajorReceiverPercent de HotSpot qui vaut par défaut 90%. Néanmoins, cet état permet d'obtenir de meilleures performances que les états de dispatch également pour des proportions inférieures. Par ailleurs, l'état étant nal, il peut également être moins performant si la proportion lors de l'exécution du type prolé dominant est trop faible. La Table 4.9 montre le facteur d'accélération de l'état polymorphique-domination (avec dispatch virtuel) par rapport à l'état dispatch-virtuel pour diérentes proportions du type prolé dominant et diérentes grandeurs du polymor-phisme. Les résultats montrent que le seuil de 90% peut être abaissé sans risque comme même une proportion de 10% entraîne un gain par rapport à l'état dispatch-virtuel.

Grandeur du

polymorphisme 100% 90% 50% 10% 0%

1 ×1,45 N/A N/A N/A ×0,74

2 N/A ×1,72 ×1,52 ×1,27 ×0,80

3 N/A ×1,62 ×1,62 ×1,12 ×0,95

4 N/A ×1,60 ×1,50 ×1,11 ×0,97

Tab. 4.9: Facteur d'accélération de l'état polymorphique-domination par rapport à l'état dispatch-virtuel pour diérentes grandeurs du polymorphisme en fonction de la proportion du type prolé dominant. Les distributions considérées sont aléatoirement réparties, les autres types composant la distribution sont présents en même proportion. Par défaut, l'état polymorphique-domination est émit seulement si la proportion du type dominant est au moins de 90%