• Aucun résultat trouvé

Le prol de performance et son usage sont décrits Section 5.3.1. Un modèle théorique simple est ensuite proposé Section 5.3.2 an d'observer l'impact du coût d'intégration via JNI sur les prols de performances.

5.3.1 Dénition et usage

La quantité de calcul eectuée par une routine peut être variable ou constante par appel. Si elle est variable, alors elle dépend de paramètres entrants qualiés de facteurs d'échelle. Les facteurs d'échelle interviennent également dans l'écriture de la complexité algorith-mique. Plus précisément, l'évolution asymptotique de la quantité de calcul en fonction des facteurs d'échelle est donnée par la complexité algorithmique. Les routines considérées sont toutes de complexité linéaire.

On appel prol de performance d'une routine, la fonction représentant ses performances en fonction de la quantité de calcul eectuée par appel de cette routine. La variation de la quantité de calcul est obtenue en faisant varier la valeur des facteurs d'échelle qui se réduisent pour les routines considérées à la taille des données d'entrée et de sortie.

L'utilisation des prols de performance est proposée an de déterminer, parmi dié-rentes implémentations d'une routine, quelle est la meilleure sur l'intervalle des quantités de calcul considéré dans l'application.

Le prol de performance permet notamment d'identier les points croisement entre implé-mentations JNI et impléimplé-mentations Java pouvant provenir du coût d'intégration via JNI (cf. Section 5.3.2). Par ailleurs certaines optimisations comme la vectorisation sont égale-ment sensibles aux facteurs d'échelle ; leur augégale-mentation provoquant des eets de cache et atténuant les performances. Dans ce cas, le prol de performance permet d'observer cette inuence et ainsi de caractériser les routines.

Les prols de performance sont calculés pour une implémentation donnée en utilisant des micro-benchmarks selon la méthodologie décrite Chapitre 3.3.

Les prols de performance considérés sont unidimensionnels ce qui permet de simplier leur mesure et leur représentation. En théorie, la dimension du prol de performance est égale au nombre de facteurs d'échelle. Au delà d'une dimension les points de mesure augmentent de manière exponentielle ce qui peut nécessiter l'utilisation de techniques d'interpolation plus poussées pour couvrir les performances sur tous les domaines d'intérêt.

5.3.2 Impact théorique du coût d'intégration via JNI

Les notions de coût constant, coût constant propre et coût asymptotique sont dénis Section 5.3.2.1 puis, Section 5.3.2.2, un modèle descriptif simple basé sur une hypothèse de linéarité est proposé pour décrire l'impact du coût d'intégration via JNI.

5.3.2.1 Coût constant et coût asymptotique

Le coût d'intégration via JNI se manifeste par un coût constant élevé (cf. Section 5.2). Le coût constant désigne le temps d'exécution des opérations constantes, systématique-ment exécutées à chaque appel de routine et dont l'occurrence ne dépend pas de la valeur

des facteurs d'échelle. Il s'oppose au coût asymptotique composé des opérations dont le nombre d'exécution par appel dépend des facteurs d'échelle. Par exemple les instructions contenues dans une boucle dont la taille dépend des paramètres d'entrée participent au coût asymptotique, alors que le coût d'initialisation de la boucle participent au coût constant. On distingue le coût constant propre à la routine qui ne considère pas le coût d'intégration via JNI et le coût constant qui considère également le coût d'intégration via JNI.

5.3.2.2 Modèle descriptif

Un modèle simple pour décrire l'impact du coût constant sur les performances est donné par la formule

P =Pasympt× q

C+q

oùP est la performance (en nombre d'opérations pas seconde), q est la quantité de calcul variable (en nombre d'opérations) et C est le nombre d'opérations constantes (de même dimension queq). L'équation est obtenue en faisant l'hypothèse que le temps d'exécution est une fonction linéaire du nombre d'opérations, la valeur en zéro étant le coût constant. An de visualiser l'impact deC sur les performances, on utilise la performance normalisée donnée par :

Pasympt

P =

q

C+q

La performance normalisée fonction de la quantité de calcul q est représentée Figure 5.2 pour diérentes valeurs de C. Comme on peut l'observer, plus le coût constant est élevé, plus l'impact sur les performances pour de faibles quantités de calcul est important.

Pour les implémentations Java, les routines calculatoires sont implémentées sous forme de méthodes statiques qui peuvent être inlinées. Le coût constant des implémentations Java étant bien inférieur aux implémentations JNI, pour des faibles quantités de calcul, les implémentations Java peuvent s'avérer plus performantes malgré des optimisations asymptotiques moins bonnes que les implémentations JNI. On peut alors observer un point de croisement comme montré Figure 5.3. L'implémentation la plus performante dépend donc de la quantité de calcul par appel. Un des objectifs proposé est ainsi de quantier ce point de croisement pour des routines calculatoires applicatives. L'hypothèse de linéarité eectuée pour obtenir la formule reste une approximation an d'observer de manière isoler l'impact du coût constant. En pratique les performances peuvent dépendre de la quantité de calcul de manière non linéaire. On observera notamment sur des routines avec une intensité calculatoire constante une baisse de performance lorsque la quantité de calcul augmente du fait des eets de cache.

20 21 22 23 24 25 26 27 28 29 210 211 212

Quantité de calcul par appel (log2)

0.0 0.2 0.4 0.6 0.8 1.0 Performance normalisée

Coût constant par appel C=1 C=2 C=4 C=8 C=16

Fig. 5.2: Performance normalisée en fonction de la quantité de calcul. On observe l'impact sur les performances pour diérentes valeurs du coût constant par appel C : plus il est élevé, plus les performances sont faibles lorsque les quantités de calcul par appel diminuent