11.2.3 : Impact du cycle de développement sur les optimisations



Le développement de fonctionnalités optimisées dans un programme implique que des développeurs spécialistes doivent passer plus de temps sur certaines fonctions. L'impact de ce processus sur le temps de développement du programme peut être réduit en focalisant cet effort sur les fonctions les plus coûteuses en temps (dite fonctions chaudes), qui sont généralement peu nombreuses.

Il est généralement admis qu'il n'est préférable d'optimiser un programme qu'une fois que ses résultats sont cohérents (donc après la phase de débogage), mais cette affirmation doit être nuancée dans la mesure où la conception du programme doit aussi permettre son optimisation.

En effet, si de mauvais choix ont été faits trop tôt dans la phase de développement, le programme ne pourra pas être optimisé, ou ne pourra être optimisé qu'au prix d'une réécriture quasi-totale. Dans ces conditions, le travail à fournir sera bien plus important que le temps de développement de la première version, ce qui n'est généralement pas envisageable vu la taille des programmes utilisés par les nouvelles expériences.

De plus, certaines modifications peuvent être lourdes de conséquences. Par exemple, le choix d'un format de données inadapté (voirsection 11.2.2.2), ne pourra être corrigé que par l'écriture d'un nouveau code d'analyse utilisant un format de données adapté, accompagné de convertisseurs qui serviront à mettre à jour les fichiers de données stockés dans l'ancien format. Dans ce cas, non seulement le temps de développement est conséquent, mais le temps de calcul lié aux conversions peut lui aussi être gigantesque.

Dans un autre cas de figure, si l'analyse dépend d'un algorithme qui ne passe pas à l'échelle noteOn dit qu'un algorithme ne passe pas à l'échelle quand son temps de calcul ne diminue pas de façon proportionnelle à la quantité de ressources matérielles (ex: cœurs processeurs) qui sont allouées au calcul., toute la partie qui dépend de cet algorithme devra être développée de nouveau en utilisant un nouvel algorithme plus performant. Cela peut conduire à des impasses.

Ce passage est peut-être un peu long par rapport à son utilité ?

L'échelle croissante des expériences a conduit naturellement les physiciens à travailler avec des informaticiens.

Les physiciens agissent en utilisateurs d'analyses et d'infrastructures afin d'obtenir des résultats de physiques, loin des considérations matérielles, logicielles, ou en rapport avec le stockage des données de leur analyse. Ce sont des utilisateurs exigeants, et c'est leur droit le plus strict.

Les informaticiens, quant à eux, doivent intervenir là où la complexité des problèmes à résoudre est importante, sans rendre le système incompréhensible pour ses utilisateurs.

Mais l'augmentation exponentielle du volume de données à traiter dans les expériences de physique implique que les informaticiens doivent répondre à des problématiques extrêmement complexes, en devenant de plus en plus experts de leurs domaines respectifs. Masquer la difficulté de la tâche aux yeux des utilisateurs devient donc plus difficile, mais aussi plus nécessaire que jamais.

De ce point de vue, le travail des informaticiens est bien plus important que précédemment et le sera davantage aux vu des défis de calcul liés aux nouvelles expériences.

Cette responsabilité va au-delà du fait de fournir des analyses efficaces et optimisées. En effet, le physicien qui doit lui-même développer une partie de son analyse de données s'inspirera des programmes qui lui sont fournis par les informaticiens. Donc, ces derniers doivent fournir des exemples irréprochables afin que les physiciens puissent partir d'une base saine.

Cette responsabilité pourrait s'étendre aux physiciens eux-mêmes, qui sont tenus de fournir des programmes corrects et performants à leurs pairs, par exemple, dans le cadre de la vérification d'un résultat ou de la poursuite d'une idée prometteuse.

Cette préoccupation de viser, non pas la solution en apparence simple et peu efficace à court terme, mais bien la solution la plus simple et efficace à long terme est le sujet de la formation IN2P3 Qualité : faire simple et utile[155]Qualité : faire simple et utile, Gautier SCHRODJ, Laurent PERILHON.

Le processus d'optimisation amène aussi à une relecture approfondie du code, qui peut amener à corriger des erreurs dans celui-ci et à entamer une réflexion approfondie sur la précision numérique requise. Par conséquent, contrairement à une idée reçue, un programme optimisé ne sera pas forcément moins précis que le programme optimisé (voir chapitre 11.8).

La prise en compte de ces différents conseils permettra aux physiciens et aux informaticiens de travailler plus efficacement ensemble.

Les physiciens pourront, sans s'engager dans un processus d'optimisation extrêmement poussé, obtenir d'ores et déjà des analyses plus rapides qu'ils n'en écrivent actuellement.

Les informaticiens spécialisés en optimisation seront chargés d'accélérer ces analyses d'un facteur $10$ à $20$ en se concentrant sur des problèmes difficiles, et non plus d'obtenir des programmes plusieurs centaines de fois plus rapides par une réécriture quasi-totale du code, car le code produit par les physiciens sera plus efficace d'emblée.

L'optimisation des programmes d'analyse est indispensable pour contenir la quantité de données des nouvelles expériences de physique additionnée à celles des expériences actuelles. Il existe de nombreuses manières d'optimiser une analyse : utilisation de bibliothèques HPC, changement d'algorithme, vectorisation et bien d'autres. Cependant, cette optimisation ne peut être efficace que si le format de données choisi permet le HPC.