• Aucun résultat trouvé

Chapitre 1. Des collaborations entre calcul formel et calcul numérique

1.2. Calcul formel préprocesseur pour le calcul numérique

1.2.5. Génération de code

La synthèse de code de simulation numérique est une fonctionnalité accessible à partir de systèmes de calcul formel depuis longtemps. Le générateur de code GENTRAN pour les systèmes de calcul formel Reduce et Macsyma est présenté dans (Gates 1985). Les premières versions du système de calcul formel Macsyma intégraient déjà la traduction d’expressions mathématiques manipulées en FORTRAN ou en C. En 1987, le générateur de code FORTRAN

MACROFORT (Chancelier, Gomez, & Quadrat 1987), issu des travaux de l’INRIA, complète

les fonctionnalités de ce système en permettant la génération de procédures complètes et non pas seulement la traduction d’expressions. Ce générateur est porté sur le système de calcul formel

Maple peu après (Gomez 1990) et est encore disponible aujourd’hui comme boîte à outils

complémentaire des dernières versions de Maple. Les principes de fonctionnement de

MACROFORT sont rappelés dans (Gomez & Scott 1998). « [La synthèse de code] s’appuie sur

la procédure Maple fortran qui traduit des expressions algébriques, des matrices ou des séquences d’expressions Maple dans la syntaxe FORTRAN. Macrofort fournit un moyen de générer un programme indépendant, une fonction ou une procédure dans sa totalité incluant les déclarations de types, les structures telles que par exemple l’allocation de mémoire pour les tableaux, etc., et tout cela à l’intérieur de l’environnement Maple. » L’utilisateur décrit chaque instruction élémentaire, ou chaque structure de contrôle, à l’aide d’une liste Maple.

MACROFORT traduit chacune de ces listes en une ou plusieurs instructions FORTRAN. Un

des points forts de l’outil est la possibilité de vectoriser efficacement le code synthétisé en procédant à des analyses de dépendances fines et à des restructurations, et donc de l’optimiser pour les architectures vectorielles. Dans le même article, les auteurs présentent la boîte à outils

Transfor pour Maple. Construite au-dessus de MACROFORT, cette dernière traduit des

programmes Maple complets en programmes FORTRAN indépendants. Sa spécificité réside dans la recherche de performance du code synthétisé : les procédures BLAS sont systématiquement utilisées lors de la traduction en FORTRAN d’opérations matricielles écrites

Calcul formel préprocesseur pour le calcul numérique

Complété par les boîtes à outils MACROFORT et Transfor, ou à travers les fonctions du paquetage intégré codegen, Maple dispose sans doute des fonctionnalités de synthèse de code

FORTRAN et C les plus abouties. Le système de calcul formel MuPAD permet lui aussi de

produire des routines complètes. A l’inverse, Mathematica exprime uniquement une expression donnée dans différentes syntaxes -FORTRAN, C ou MathML-, mais ignore la notion de déclaration de types, de données ou d’entête de routine. La boîte à outils Thermath (Castier 1999) produit une procédure FORTRAN complète d’évaluation à partir d’une liste d’expressions arithmétiques à la syntaxe Mathematica, après une élimination des sous-expressions communes. La boîte à outils MathCompile (Dall'Osso 2003) se veut plus générale puisque le code

Mathematica à traduire ne se réduit pas à une liste d’expressions arithmétiques, mais peut

comporter des structures de contrôle.

Si les différents systèmes de calcul formel incluent tous par défaut la traduction d’expressions dans la syntaxe d’un langage compilé, FORTRAN ou C, la synthèse de codes complets de simulation numérique est le fait de boîtes à outils tierces le plus souvent issues de la recherche. Des résultats intéressants sont obtenus du point de vue du temps de calcul avec les codes synthétisés en adaptant la traduction à l’architecture matérielle et logicielle cible. Tel est le cas de Transfor. Un autre exemple remarquable est la possibilité pour le système Ctadel, à partir d’une spécification du problème unique, de synthétiser un code de simulation numérique adapté soit à une architecture séquentielle, soit à une architecture vectorielle, soit à une architecture à mémoire partagée ou encore à une architecture à mémoire distribuée (van Engelen, Wolters, & Cats 1996). La synthèse automatique de codes va ainsi dans le sens d’une réutilisation générative (« generative reuse ») des modèles, un mode de réutilisation détaillé dans (Mili et al. 2002).

La simulation numérique utilise le code synthétisé par le système de calcul formel. Ce dernier, parce qu’il est le fruit d’un processus de traduction automatique, et parce qu’il fait apparaître des variables temporaires liées à l’étape d’élimination des sous-expressions communes, n’est pas toujours d’une grande lisibilité. Les codes FORTRAN synthétisés par la boîte à outils Thermath (Castier 1999), pour le calcul de modèles thermodynamiques par équations d’état, en sont un témoignage. (Dall'Osso 2003) réfute la critique du manque de lisibilité et de la difficulté de maintenance des programmes générés automatiquement en avançant que le véritable code source ce sont les commandes écrites dans le langage du système de calcul formel. Si cet argument peut répondre au besoin de lisibilité de la spécification, il n’apporte rien à la question de l’interopérabilité du code synthétisé avec les autres logiciels constituant l’environnement de simulation numérique : logiciels de maillage, d’analyse de données, etc.

L’approche consistant à utiliser les systèmes de calcul formel comme des pré-processeurs de la simulation numérique est pertinente, puisqu’elle a donné lieu à des réalisations remarquables. Toutefois, le fait qu’elle occulte la nécessité de l’interopérabilité la restreint à des solutions de simulation numérique très spécifiques et souvent propriétaires. Les produits

SciNapse et Ctadel, l’un spécialisé dans l’informatique financière et l’autre intégré dans le

système de simulation météorologique Hirlam, en sont des exemples. Malgré le cadre de spécification très général offert par le calcul formel, les boîtes à outils intégrées à ces systèmes se spécialisent dans une famille de modèles et/ou une famille de méthodes numériques. Pire encore, la réutilisation par composition (« compositional reuse »), au centre des langages de modélisation orientés équations tels que Modelica, n’est pas abordée. Les raisons en sont évidemment multiples. Les langages de programmation des systèmes de calcul formel n’intègrent pas les notions de conception et de programmation par objets utiles pour organiser les données et les algorithmes. La réutilisation par composition suppose de convenir d’interfaces standardisées pour les spécifications des problèmes et les spécifications des solutions afin de pouvoir combiner les unes et les autres. Enfin, la réutilisation par composition impose une grande fiabilité des composants logiciels unitaires amenés à collaborer.

Calcul formel à l’intérieur d’un environnement de calcul numérique ?

1.3. Calcul formel à l’intérieur d’un environnement de calcul