Thèse soutenue

Compilation et optimisations pour l'arithmétique à virgule flottante en précision variable : du langage et des bibliothèques à la génération de code
FR  |  
EN
Accès à la thèse
Auteur / Autrice : Tiago Trevisan Jost
Direction : Frédéric PétrotAlbert Henri CohenChristian Fabre
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance le 02/07/2021
Etablissement(s) : Université Grenoble Alpes
Ecole(s) doctorale(s) : École doctorale mathématiques, sciences et technologies de l'information, informatique (Grenoble ; 199.-....)
Partenaire(s) de recherche : Laboratoire : Laboratoire d'intégration des systèmes et des technologies (Gif-sur-Yvette, Essonne ; 2001-....) - Techniques de l’informatique et de la microélectronique pour l’architecture des systèmes intégrés (Grenoble ; 1994-....)
Equipe de recherche : System Level Synthesis
Jury : Président / Présidente : David Monniaux
Examinateurs / Examinatrices : Sebastian Hack, Nathalie Revol
Rapporteurs / Rapporteuses : Philippe Clauss, Erven Rohou

Résumé

FR  |  
EN

Les unités de calcul à virgule flottante (FP) prennent en charge un sous-ensemble de formats définis par la norme IEEE 754, ainsi que quelques formats qui leur sont spécifiques (le format de 80 bits sur de l’architecture x86, et le format 128 bit propriétaire des PowerPC). De fait, les langages et les compilateurs optimisants utilisés en calcul intensif sont limités par les formats supportés sur les machines cibles. Cependant, la recherche de l’efficacité et de la stabilité des applications a conduit les numériciens à explorer d’autres tailles pour les exposants et les parties fractionnaires afin de trouver un bon équilibre entre la précision des résultats, le temps d’exécution et l’énergie consommée. C’est le cas pour les calculs numériques qui font appel à des solveurs itératifs dont l’erreur résiduelle est une fonction des données d’entrée, ou ceux pour lesquels une précision adaptable dynamiquement peut accélérer la convergence. Les numériciens doivent recourir à des conversions explicites et prévoir plusieurs versions du code, ce qui entraîne un accroissement de la taille de ce dernier au détriment de sa lisibilité Peu d’attention a été accordée au support d’autre formats flottants dans les langages et à leur compilation, ainsi qu’à leurs conséquences sur le processus d’analyse numérique. Le calcul en précision variable est un paradigme récent qui propose de faire varier les formats à l’exécution et d’en analyser les effets. Les travaux que nous présentons visent à surmonter les limites actuelles des langages et de leur compilation en y ajoutant le support aux formats à précision variable, et en abordant certains des problèmes que ces formats font apparaître à la jonction de la compilation et de l’arithmétique à précision variable. Pour cela nous proposons une extension du système de types du langage C permettant de représenter de manière générique les formats flottants et leurs opérations, aussi bien en précision statique que dynamique. Nous avons mis en œuvre un flot de compilation qui implémente ce système de type jusqu’à la génération de code vers des jeux d’instructions ou des bibliothèques supportant de tels formats. Notre solution basée sur LLVM a démontré son efficacité en tirant parti des puissantes optimisations de LLVM, notamment l’optimisation de nids de boucles par Polly. Nous proposons un support pour deux générateurs de code : un premier pour le jeu d’instruction d’un coprocesseur arithmétique à précision variable, et un deuxième ciblant la bibliothèque MPFR de virgule flottante en multi précision. Ce support démontre les avantages de productivité de notre modèle de programmation intuitif et sa capacité à tirer parti d’une chaîne de compilation existante. Les expérimentations réalisées sur deux suites de référence en calcul à haute performance ont permis d’obtenir de fortes accélérations aussi bien pour nos cibles logicielles que matérielles. Nous présentons également des résultats intéressants sur l’utilisation de la précision variable pour des noyaux d’algèbre linéaire.