Projet ANR-13-INSE-0007 – MetaLibm : Générateurs de code pour les fonctions mathématiques et les filtres
Programme : Ingénierie Numérique et Sécurité (INS) 2013
Année de financement : 2013
Coordinateur du projet : Florent DE DINECHIN (Centre de Recherche Inria Grenoble Rhone-Alpes)
Partenaires : Radio Logicielle et Radio Cognitive pour les Télécommunication; Fondation de recherche; Laboratoire d'Informatique, de Robotique et de Microélectronique de Montpellier; Laboratoire d'Informatique de Paris 6
Montant : 622779.0 euros
Date de début : 2013
Durée : 48 mois
Résumé : Ce projet s'attaque d'abord à l'implémentation des fonctions élémentaires (exponentielle, logarithme, fonctions trigonométriques). La bibliothèque mathématique standard (libm) offre un petit nombre de telles fonctions, pour un petit choix de précisions. Sa performance est critique pour un grand nombre d'applications, en particulier dans les domaines scientifique et financier. C'est pourquoi une attention spéciale a toujours été portée à son implémentation. Par exemple, les fabricants de processeurs ont des équipes chargées d'optimiser la libm pour chaque nouveau processeur. C'est une tâche lourde, répétitive, et sujette à erreurs. 
Le premier objectif de ce projet est donc d'automatiser l'implémentation de fonctions de libm, avec l'ambition de produire automatiquement, en une fraction du temps de développement manuel,  des fonctions dont la performance se compare avec celle des implémentations manuelles, et ce pour un large éventail de technologies cibles: processeurs généralistes,  calculateurs embarqués,  unités graphiques (GPU), et même circuits reconfigurables (FPGA) ou pas. 
Les applications ont souvent besoin de fonctions qui ne sont pas présentes dans la libm. Pour ces fonctions, une composition de fonctions de libm peut s'avérer très inefficace, voire tout simplement impossible (fonction définie par une équation différentielle ou par interpolation d'un ensemble de points expérimentaux par exemple). Même les fonctions de la libm n'y sont présentes que dans un choix limité d'implémentations. Le plus souvent, cette offre ne correspond pas aux besoins précis de l'application en termes de domaine de définition, de précision, de performance ou de consommation de ressources.
Le second objectif de ce projet est donc d'ouvrir l'ensemble des fonctions et des contextes offerts aux programmeurs. Ce progrès qualitatif sera une conséquence de l'automatisation précédente: il s'agit de distribuer des outils qui, à partir de la spécification d'une fonction et des contraintes de son contexte applicatif, produiront un code optimisé l'implémentant. La qualité numérique de ce code devra être garantie par construction, puisqu'il sera impossible de tester a priori un ensemble désormais infini d'implémentations possibles.
L'implémentation d'une fonction mathématique en un programme est un processus en plusieurs étapes, typiquement réduction d'argument, approximation, évaluation. Dans les communautés  traitement du signal et  contrôle/commande, un processus similaire, passant par les mêmes étapes, consiste à implémenter un filtre numérique à partir de sa spécification mathématique. Dans les deux cas, le code ou circuit obtenu se compose des mêmes primitives (additions, multiplications, et valeurs constantes précalculées). 
Le troisième objectif de ce projet est donc d'unifier la compréhension des processus d'implémentation d'une fonction d'une part, et d'un filtre d'autre part, dans un même cadre mathématique, conceptuel, méthodologique et applicatif. En particulier, il s'agira d'obtenir des outils capables d'implémenter des filtres pour le même éventail de cibles et avec les mêmes garanties en terme de qualité numérique. 
Pour atteindre ces trois objectifs, la méthode sera de rechercher
- la formalisation du processus d'implémentation dans son ensemble, pour la traduire algorithmiquement,
- une ouverture aussi large que possible des technologies cibles,
- la motivation et la validation par des études de cas concrètes, apportées par les partenaires du projet et au delà,
- le développement open-source de génerateurs de code+preuve. 
Le consortium proposé  (INRIA/AriC, UPMC/LIP6, LIRMM, Kalray, CERN) rassemble, autour de spécialistes mondiaux des fonctions élémentaires, des expertises qui couvrent les filtres, l'éventail de cibles technologiques, et des applications scientifiques et industrielles.