top of page

Nous nous sommes maintenant assuré que le code fonctionne correctement et donne des résultats satisfaisants. Une dernière étape consiste à chercher à optimiser au mieux chacune des routines qui composent le code. Pour cela, nous avons utilisé notre propre méthode pour afficher la contribution en temps de chaque routine (gprof peu pratique compte tenu du parallélisme déjà mis en place). Voici un exemple ci-après :

Grâce à cela, nous avons pu comparer les différents éléments du code et se concentrer sur les parties coûtant le plus de temps afin de réduire au mieux le temps global de calcul. Cette partie d'optimisation s'est principalement portée sur le Gradient Conjugué et sur l'équation de Transport. A partir de là, nous avons amélioré le code sur plusieurs points :

  1. Optimisation de la routine de résolution de l'équation de Transport

  2. Meilleure initialisation du Gradient Conjugué

  3. Meilleur choix du critère d'arrêt du Gradient Conjugué

Pour l'amélioration du Transport, les méthodes de splitting mis en places dans un premier temps demandaient trop de temps de calculs. La réécriture plus simple de la résolution du transport à permis de diminuer le temps de calcul nécessaire pour cette partie.

Pour la partie Gradient Conjugué, nous avons initialisé l'inconnue par rapport à la solution calculée au temps précédent ce qui permet de démarrer la routine avec une solution suffisamment proche du critère souhaitée pour réduire le nombre d'itération du Gradient. De plus, nous avons testé la précision du volume de la tumeur en fonction du critère d'arrêt du Gradient Conjugué et constaté qu'un critère d'arrêt de l'ordre de 0.01 était suffisant pour conserver une précision décente. De ce fait, nous avons pu drastiquement réduire une nouvelle fois le nombre d'itérations du Gradient. Seul le premier pas de temps du Gradient Conjugué est alors vraiment long étant donné qu'il ne peu démarrer qu'à partir d'une solution choisie arbitrairement.

Voici un récapitulatif des différents temps de calculs de chaque routine après chacune des étapes d'optimisation :

Cette étape d'optimisation a été capitale puisqu'elle a permis de diminuer le temps de calcul global par environ 5. Les simulations traitée par le code ne nécessite alors plus que quelques minutes pour plusieurs centaines de pas de temps. L'objectif fixé au début à propos du temps de calcul global est alors validé.

bottom of page