• 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.4. Transformation formelle de la spécification

1.2.4.1. Discrétisation du système d’équations initial

Lorsque le modèle est un système d’équations non linéaires, et la méthode de résolution choisie est Newton-Raphson, ces transformations incluent le calcul des résidus par différence entre les membre droits et gauches des équations, et la dérivation formelle de ces résidus afin d’obtenir l’opérateur de Newton.

Lorsque le modèle est un système d’équations aux dérivées partielles, et la méthode de résolution choisie est l’application d’un schéma aux différences finies répondant au critère de stabilité de Cranck-Nicholson (Akers, Baffes, Kant, Randall, Steinberg, & Young 1998), ces transformations comprennent le remplacement formel des dérivées par les formules aux différence finies dans les équations initiales, la génération de l’ensemble des équations discrétisées à partir du système générique précédent, des conditions initiales et des conditions aux limites et enfin la mise sous une forme canonique du système d’équations linéaires, ou non linéaires, produit.

Lorsque le modèle est un système d’équations aux dérivées partielles, et la méthode des éléments finis est choisie (Amberg, Tonhardt, & Winkler 1999), ces transformations comprennent la dérivation formelle des fonctions de base, l’intégration formelle de produits scalaires de fonctions de base, la sommation de termes intégraux, et enfin la mise sous une forme canonique du système d’équations linéaires, ou non linéaires, produit.

1.2.4.2.Simplification algébrique des équations

Le noyau de calcul formel GPAS –General Purpose Algebraic Simplifier- illustre l’effort particulier de simplification algébrique des équations dans l’outil de génération de code

Calcul formel préprocesseur pour le calcul numérique

discrétisation par différences finies d’équations aux dérivées partielles. Contrairement aux autres systèmes, souvent construits autour de règles explicites de réécriture des expressions, ce système de calcul formel s’appuie sur les propriétés des opérateurs, propriétés modélisées sous la forme d’une hiérarchie orientée objet de classes. De nouveaux opérateurs possédant des propriétés particulières peuvent être insérés dans cette hiérarchie de façon simple. « Par exemple, de nouveaux opérateurs FFT peuvent être déclarés comme des instances de la classe opérateur linéaire et de la classe opérateur auto-commutatif. »

1.2.4.3.Optimisation des équations

Le choix de la synthèse de programmes de simulation numérique écrits dans un langage compilé, à partir d’un système de calcul formel est d’abord guidé par le souci de la performance. (Castier 1999) avance que les programmes modernes de calcul formel « fournissent un environnement de calcul complet pour l’implantation de modèles thermodynamiques. […] Cependant, les calculs numériques dans les systèmes de calcul formel peuvent être lents comparés aux codes visant le même objectif dans des langages tels que FORTRAN 77, FORTRAN 90 ou C. » Par contre, il est possible et souhaitable de tout mettre en œuvre, dès la transformation de la spécification dans le système de calcul formel, pour obtenir un code synthétisé performant du point de vue du temps de calcul.

Figure 26 – Partage des sous-expressions communes lors du calcul d'une expression mathématique.

La recherche de la performance du code synthétisé conduit l’auteur de la boîte à outils

Thermath à détecter les expressions communes à plusieurs expressions mathématiques afin de

ne les calculer qu’une fois. Une sous-expression commune C, présente dans plusieurs expressions est d’abord affectée à une variable intermédiaire I. Toutes les occurrences de C sont alors remplacées par le symbole I, évitant ainsi dans le code synthétisé de multiples calculs de C. La Figure 26 illustre ce mécanisme d’optimisation de code lors de l’évaluation de l’expression mathématique 2 1 2 2 5 2 2 2 7 2 4 ) 1 ( 3 ) 1 ( 18 ) 1 ( 15 u u u u u − − − − −

− . La transcription littérale en FORTRAN de

cette expression algébrique est avantageusement remplacée par une séquence de trois instructions. Les variables intermédiaires v et w stockent les résultats d’évaluations partielles. x=(-15*u**4)/(1 - u**2)**3.5 - (18*u**2)/(1 - u**2)**2.5 - 3/(1 - u**2)**1.5

v=u**2 w=1 - v

Ces résultats sont ensuite réutilisés lors de l’évaluation de l’expression initiale, dans laquelle les variables intermédiaires ont été substitués aux sous-expressions communes.

L’élimination des sous-expressions communes est une technique d’optimisation classique dans la démarche présentée ici. Les systèmes de calcul formel intègrent toutes les fonctionnalités requises pour cela : la reconnaissance de motifs et des primitives de remplacement. Les gains obtenus peuvent être considérables dès lors que sont évaluées des dérivées partielles. (Wolfe 1982) remarque que, alors que le temps de calcul d’une fonction et de ses n dérivées partielles peut être estimé à n+1 fois le temps de calcul de la fonction si le code de calcul transpose naïvement les expressions mathématiques, le rapport obtenu peut être réduit à 1,5 et rarement à plus de 2. Ce rapport constaté est d’ailleurs confirmé par les résultats théoriques présentés dans (Baur & Strassen 1983). Le processus d’élimination des sous-expressions communes est accessible dans Maple au travers du paquetage codegen fourni avec le système de calcul formel. La boîte à outils femLego (Amberg, Tonhardt, & Winkler 1999) tire partie de cette fonctionnalité intégrée pour « identifier des éléments qui sont égaux dans des matrices symétriques, et éviter des évaluations inutiles ». Ctadel va encore plus loin dans la reconnaissance de sous-expressions communes. « Alors que GPAS optimise à une échelle locale, DICE –Domain-shift Invariant Common subexpression Eliminator- supprime des sous- expressions à une échelle globale. » DICE reconnaît un très grand nombre de types de sous- expressions communes entre deux expressions données. Pour cela l’outil s’appuie sur les propriétés spécifiques des opérateurs, telles que l’associativité et la commutativité, mais aussi sur la substitution d’indices formels dans des expressions indicées. A titre d’exemple, si l’expression

1 E vaut

∑∑

= = d c j b a i j i u, et si l’expression E2 vaut

= d c j j i

u, , DICE reconnaît la dépendance

= = b a i E E1 2 . Si l’expression E1 vaut vi+a +ui+a et si l’expression E2 vaut ui+vi, DICE reconnaît que E1 est identique à E2 dans laquelle i a été remplacée par i+a. Le processus de collecte de sous- expressions communes basé sur de telles règles s’avère particulièrement efficace dans le cadre de la discrétisation d’équations aux dérivées partielles ou d’équations différentielles intégrales où des formules de différences finies et/ou des formules de quadrature sont appliquées. L’analyse des sous-expressions communes à l’échelle globale du modèle discrétisé conduit à disposer d’une séquence de calcul où les évaluations multiples d’une seule et même expression sont quasiment supprimées. En contre partie, le stockage de l’évaluation de ces sous-expressions communes dans des variables intermédiaires engendre un surcoût lié aux opérations d’accès à la mémoire. Le système Ctadel permet de trouver un compromis entre le coût des opérations d’accès à la mémoire et le coût des opérations arithmétiques, compromis dépendant de l’architecture informatique qui accueillera la simulation numérique. Suivant le coût relatif des

Calcul formel préprocesseur pour le calcul numérique

différentes opérations sur une architecture matérielle cible, un algorithme itératif décide d’extraire ou non une sous-expression commune pour l’évaluer préalablement.

La reconnaissance des sous-expressions communes est une technique d’optimisation implantée dans de nombreux compilateurs. On pourrait donc penser que ce type d’optimisation devrait plutôt prendre place lors de la compilation du code synthétisé. Toutefois, (Dall'Osso 2006) confirme que « l’élimination de sous-expressions communes exécutée par un système de calcul formel est plus efficace que celle exécutée par les compilateurs. Le traitement des expressions réalisé par un système de calcul formel n’est pas un simple remplacement basé sur la reconnaissance de motifs. Lors de la recherche de sous-expressions communes celui-ci prend en compte des règles mathématiques. » Le système Ctadel illustre parfaitement ce processus d’optimisation des équations basé sur des règles mathématiques.