Comment produire du code plus efficient et moins énergivore ?

Publié le 18 mars 2024
  • Face à des applications de plus en plus gourmandes en calcul, produire un code plus efficient et moins énergivore est l’enjeu qui a donné le point de départ de notre collaboration avec le CNES.

    Découvrez comment ce travail conjoint a permis d’obtenir des gains conséquents sur deux applications logicielles de traitement d’images satellites s’exécutant sur les serveurs du CNES.

Point de départ de cette collaboration

Dans le cadre d’études menées sur l’évolution de l’environnement et du climat à l’aide de l’étude des images provenant de satellites, le Centre National d’Études spatiales (CNES) est amené à développer de nombreux algorithmes de traitement d’images permettant d’analyser ces données.

Un objectif qui amène donc le CNES à explorer de nouvelles technologies et opportunités. Mais, avec un engagement fort en termes de responsabilité environnementale et des objectifs environnementaux ambitieux, il va de soi que le CNES tient à s’assurer que les algorithmes développés ont un impact maîtrisé sur l’environnement.

Inscrit dans la politique RSE de l’établissement, les équipes avec lesquelles nous avons collaboré ont le souhait de réduire l’empreinte environnementale des logiciels développés et utilisés.

Dans ce contexte, l’étude réalisée a été portée sur l’interrogation du potentiel de gains sur la consommation sur serveurs de deux applications logicielles de traitement d’images satellites s’exécutant sur les serveurs du CNES.

Comment répondre à cette problématique ?

Ce qui rend notre expertise spécifique est la manière dont nous allons explorer un code source afin de comprendre son organisation et la structure des données en lien avec la cible matérielle sur laquelle il va être exécuté.

Cette association nous permet d’identifier si le potentiel de cette dernière est pleinement exploité par rapport aux objectifs et, en lien avec tout une gamme de techniques d’optimisation, de repérer ce qui pourrait être optimisé.

Cette phase de diagnostic permet de chiffrer un potentiel de gain, de sélectionner là où l’effort d’optimisation doit être placé et d’engager ensuite l’optimisation. Évidemment, nous prenons en considération les caractéristiques de la compilation mise en œuvre pour proposer uniquement des techniques d’optimisation qui ne seraient pas déjà réalisées par le compilateur du client.

Mise en œuvre du diagnostic et résultat

Nous avons travaillé sur des applications logicielles s’exécutant sur les clusters de calculs HAL et TREX du CNES possédant des processeurs de type x86-64 (jeu d’instructions AVX512 avec SIMD 512 bits).

3 grandes analyses ont été lancées sur les deux logiciels de traitement d’images satellites :

  • Une analyse de la performance
  • Une vérification de l’intégrité des données
  • Une analyse de l’efficience

➡️ Je veux en savoir plus sur les analyses lancées

Plusieurs pistes d’optimisation ont été détectées, 9 au total. En se concentrant sur le cœur de calculs en C++, les techniques d’optimisations mises en place sur les deux logiciels ont offert des gains unitaires en temps d’exécution plutôt conséquents.

Vers l’implémentation des techniques d’optimisation

A l’issue de la phase d’optimisation, ce sont des gains moyens de 46% et 50% en temps d’exécution sur le code C++ qui ont été obtenus sur les deux applications.

Plusieurs techniques d’optimisation ont été mises en œuvre :

  • Inlining de fonctions
  • Écriture d’opérations min/max
  • Fatorisation
  • Déroulage de boucles
  • Single Instruction Multiple Date (SIMD)
  • ….

➡️ En savoir plus sur les techniques d’optimisation mises en œuvre

Quels enseignements en tirer ?

Cette collaboration a été la première pour WedoLow sur des applications logicielles hébergées sur serveurs. Un gros challenge pour l’équipe, car dans notre souhait d’avoir un réel impact sur la consommation énergétique et les émissions de gaz à effet de serre liées au numérique, travailler sur des logiciels sur serveurs était un élément clé. Nous avons pu valider notre apport et les gains sur serveurs.

Nous avons pu également valider que certaines techniques d’optimisation détectées sur des logiciels embarqués pouvaient aussi apporter des gains sur les logiciels hébergés.

Enfin, nous avons constaté le coût énergétique du Python par rapport à du C++ !

Appréciez les gains obtenus et les techniques d’optimisations mises en place dans un cas client disponible en téléchargement ici.