Solution retenue
Finalement, c'est l'approche utilisant le module Multiprocessing de Python qui est retenue pour paralléliser la maquette logiciel. Toutefois, pour améliorer la performance la méthode native de Python, cette solution est couplée avec le module Threading de Python. Bien qu'elle ne permette pas une véritable solution multithreading, la classe Thread permet d'empêcher le sleeping des threads des processeurs.
Cette solution permet à la fois un gain de performances, dépendant du nombre de processeurs à disposition, et aussi la conservation de l'implémentation Python de la maquette logiciel. Ce choix de langage empêche les gain de performances sur les tâches limités justement par le CPU, à cause de sont interpréteur. Une autre solution plus radicale a aussi été proposée à l'issue de ce projet. Elle consiste à un portage du code en C++. D'une part, c'est un langage orienté objet, donc adapté au cahier des charges, qui est de surcroît la langage d'origine de la bibliothèque ROOT. D'autre part, c'est un langage de plus bas niveau qui permet du parallélisme de type multithreading avec OpenMP par exemple.
Gain de performance
Après avoir effectué les changements nécessaires pour mettre en œuvre cette solution dans le logiciel, les performances issue de ce refactoring ont pu être évaluée. Ces résultats ont été obtenus pour la configuration suivante :
- 6 CPU disponibles, génération i7 pour une fréquence de 2.60 GHz,
- 16 Go de RAM pour un processeur x64.
Les performances ont été évaluées en terme d'efficacité et de speed-up pour chacun des deux modules retouchés, à savoir le module Ray Tracing pour l'échantillonnage des points sur les surfaces de la géométrie et le module Integration réalisant l'intégration numérique pour le calcul des facteurs de vue.
Figure 5. Efficacité en fonction du nombre de processeurs pour le module Ray Tracing effectuant l'échantillonnage sur la géométrie.
Figure 7. Efficacité en fonction du nombre de processeurs pour le module d'intégration numérique pour le calcul des facteurs de vue.
Figure 6. Speed-up en fonction du nombre de processeurs pour le module Ray Tracing effectuant l'échantillonnage sur la géométrie.
Figure 8. Speed-up en fonction du nombre de processeurs pour le module d'intégration numérique pour le calcul des facteurs de vue.
Malgré le fait que Python ne soit pas un langage performant pour réaliser des tâches en parallèle, une efficacité de près de 60% a été maintenue pour un speed-up de 3.7 concernant le premier module et avec 6 processeurs. Etant donné que c'est le module qui prend le plus de temps, car c'est dans ce module que la géométrie est discrétisée, ces performances ont été jugée satisfaisantes. Concernant le module d'intégration numérique, un speed-up de 4.2 a été atteint sur 6 processeurs tout en ayant maintenu une efficacité de 70%.
Cependant, nous avons pu remarquer que les performances semblait optimales pour 4 processeurs. Le taux d'accroissement du speed-up est plus faible au delà de ce nombre de processeurs. Par ailleurs, alors que l'efficacité décroît linéairement sur le module Ray Tracing, celle du module d'intégration reste acceptable jusqu'à 4 processeurs avant de décroître linéairement au-delà. Pour 4 processeurs, l'efficacité du module d'échantillonnage est de 77% pour un speed-up de 3.1 et l'efficacité du module d'intégration numérique est de 85% pour un speed-up de 3.4.
Créez votre propre site internet avec Webador