ADT MUMPS Campagne ADT 2009

La page est créée Carole Antoine
 
CONTINUER À LIRE
ADT MUMPS
                               Campagne ADT 2009

Récapitulatif de l’ADT
Titre & Acronyme : ADT MUMPS (ADTM)
Porteur de l’ADT : Jean-Yves L’Excellent Email : Jean-Yves.L.Excellent@ens-lyon.fr
CRI                : Grenoble Rhône-Alpes EPI : GRAAL
Durée prévisionnelle (4 ans max) : 3 années
S’agit-il d’une ADT déjà en cours ? Non

Les partenaires internes (EPI / CRI) et externes (autres labos, industriels) de l’ADT :
L’ADT est portée par l’EPI Graal (contact :Jean-Yves.L.Excellent@ens-lyon.fr), en collaboration
étroite avec l’équipe APO (Algorithmes Parallèles et Optimisation) de l’INPT-IRIT à Toulouse
(contact : Patrick.Amestoy@enseeiht.fr). Elle se fera aussi en collaboration avec Abdou
Guermouche, maître de conférences à l’Université de Bordeaux, et actuellement membre de l’EPI
ScAlAppliX.
Total des ressources demandées pour l’ADT : 30 kEuros (fonctionnement) + 24 h.m (jeune
diplômé) + 12 h.m (ingénieur qualifié du SED)
Total des ressources demandées pour la 1ère année : 12 kEuros (fonctionnement) + 12 h.m
(jeune diplômé) + 4 h.m (ingénieur qualifié du SED)
Le résumé de la soumission ADT (10 lignes max) : MUMPS est à la fois un outil recherche
et un logiciel reconnu mondialement, original et compétitif, utilisé par de nombreux groupes
académiques et industriels versés dans le domaine de la simulation numérique. Sa robustesse
numérique, sa richesse de fonctionalités et sa souplesse d’interface en font un outil unique.
Avec plus de 1000 téléchargements par an (et une demande toujours croissante), le travail autour
de cette plate-forme logicelle demande une structuration plus professionnelle que celle qui nous
a permis de fonctionner depuis 10 ans. Cette ADT doit ainsi nous permettre de mieux faire face
aux besoins (résultant du succès de sa distribution) de ce logiciel, avec pour principaux objectifs
d’en faciliter : (i) la maintenance ; (ii) l’évolution en lien avec les utilisateurs et les besoins
applicatifs ; (iii) transfert des travaux résultant de nos recherches et (iv) la structuration/gestion
de la documentation.

                                                  1
1     Introduction                                                                    ADT MUMPS

MUMPS est à la fois un outil recherche et un logiciel reconnu mondialement, original et compétitif,
utilisé par de nombreux groupes académiques et industriels versés dans le domaine de la simulation
numérique. Sa robustesse numérique, sa richesse de fonctionalités et sa souplesse d’interface en
font un outil unique.
Avec plus de 1000 téléchargements par an (et une demande toujours croissante), le travail autour
de cette plate-forme logicelle demande une structuration plus professionnelle que celle qui nous
a permis de fonctionner depuis 10 ans. Cette ADT doit ainsi nous permettre de mieux faire face
aux besoins (résultant du succès de sa distribution) de ce logiciel, avec pour principaux objectifs
d’en faciliter : (i) la maintenance ; (ii) l’évolution en lien avec les utilisateurs et les besoins
applicatifs ; (iii) transfert des travaux résultant de nos recherches et (iv) la structuration/gestion
de la documentation.

2     Contexte : état des lieux et positionnement avant l’ADT
2.1    Aspects scientifiques
Le contexte scientifique est la résolution parallèle de systèmes linéaires creux de grande taille
par des solveurs dits directs. Ces méthodes sont centrales dans les applications de simulation
numérique pour de nombreux domaines. De par leur robustesse et leur efficacité, les méthodes
directes sont souvent préférées, et ce surtout dans le monde industriel, à une autre classe
d’approche, les méthodes itératives. En fait, les approches itératives les plus robustes utilisent en
général des approches directes pour traiter partiellement le problème global. Aujourd’hui, un des
problèmes critiques issu des besoins applicatifs consiste à résoudre des systèmes linéaires de taille
de plus en plus grande, tout en gardant performance et stabilité numérique. Cela nous amène entre
autres à effectuer des recherches sur des approches dites out-of-core (ou hors-mémoire), sur des
prétraitements numériques efficaces en parallèle (les données ne pouvant typiquement pas toujours
être stockées sur un seul processeur), et sur la scalabilité (passage à l’échelle) aussi bien du point
de vue mémoire que du point de vue des performances.
Parmi les nombreuses publications liées à nos travaux sur le sujet, on peut citer par exemple
[2], [5], [1] (voir page 18). Depuis le départ de cette activité en 1996, et au travers de chaque
projet, notre objectif a toujours été de valoriser nos recherches au travers d’un logiciel (MUMPS,
pour MUltifrontal Massively Parallel Solver), qui sert à la fois d’environnement d’expérimentation
pour nos recherches et de valorisation de nos travaux auprès des utilisateurs et notamment des
industriels. MUMPS a débuté avec le projet européen PARASOL (Esprit IV, projet LTR 20160,
1996-1999), dont les résultats et développements logiciels ont été versés dans le domaine public
en fin de projet. Depuis, de nombreux travaux et développements ont été effectués par l’INPT-IRIT,
le CNRS et l’INRIA, tandis que le CERFACS a contribué par le financement de bourses de thèses
de de recherche.
Les principaux projets en lien avec l’objet de l’ADT sont :
– projet européen PARASOL (1996-1999) : la naissance du prototype logicel MUMPS, repartant

                                                  2
ADT MUMPS
    au départ des travaux de thèse de Patrick Amestoy. Ce prototype logiciel du domaine publique
    issu du projet PARASOL sert de base à P. Amestoy et J.-Y. L’Excellent pour bâtir et diffuser la
    première version publique de MUMPS en Septembre 1999.
–   projets France-Berkeley (1999-2000 et 2008-2009) : ces projets avec Xiaoye S. Li,
    développeur du logiciel concurrent/complémentaire SuperLU, nous ont permis de comparer nos
    approches respectives et de les améliorer, publications communes dans ACM Transactions on
    Mathematical Software [3] et dans Parallel Computing [4].
–   contrat avec la société belge Samtech (2005-2006) : développement de la première version
    de la fonctionnalité "out-of-core" permettant d’accroître la taille des problèmes traités par une
    utilisation explicite du disque comme extension de la mémoire.
–   contrat avec le CERFACS/CNES (2006) : développement d’une fonctionnalité permettant de
    mieux traiter les problèmes couplés, en renvoyant un complément de Schur sous forme 2D
    cyclique par blocs.
–   collaboration avec le consortium SEISCOPE (2006-2008) : Ce consortium, mis en place par le
    laboratoire Geosciences Azur pour des problèmes de géophysique et notamment de sismique,
    a fait une utilisation poussée de nos méthodes de résolution et de nombreuses interactions ont
    permis d’améliorer les résultats obtenus et les tailles limites des problèmes pouvant être résolus
    (voir par exemple []).
–   nouveau contrat qui démarre avec la société SAMTECH (2008-2010) : l’objectif est d’étudier
    comment de nouvelles fonctionnalités, qui seront versées dans le domaine publique en fin de
    contrat, pourront permettre à SAMTECH de : (i) traiter des problèmes plus gros (ii) plus
    efficacement en out-of-core (iii) avec une interface permettant de mieux gérer la mémoire
    fournie par l’utilisateur
–   projet qui démarre avec l’Université de Tel Aviv (2009-2010) : l’objectif est d’utiliser MUMPS
    pour paralléliser la résolution de problèmes de dynamique des fluides de grande taille, et
    d’orienter les travaux dans MUMPS pour la résolution efficace de ces problèmes, notamment
    sur des architectures modernes du type multicoeurs.
–   projet GridTLSE (2002-) est un projet connexe, cf http ://gridtlse.org qui sert actuellement à nos
    utilisateurs pour le partage et l’échange de problèmes de tests. L’objectif du projet est également
    de pouvoir tester divers solveurs et algorithmes à distance et de fournir un site d’expertise à
    base de scénarios d’expertise où un utilisateur pourra par exemple expérimenter l’union de
    tous les prétraitements disponibles sur un ensemble de solveurs et comprendre comment ces
    prétraitements se comportent dans d’autres solveurs sur ses classes de problèmes.
–   ODL INRIA sur MUMPS (2005-2007) : une jeune ingénieur (Aurélia Fèvre) a travaillé deux
    ans avec nous. Elle a organisé le premier MUMPS Users’ Day (24 novembre 2006, succès aussi
    bien pour les développeurs que les utilisateurs). Elle a également participé au développement
    d’une interface Scilab à MUMPS [6] et a entre autres complété les tests de non régression, en
    association avec l’utilisation d’outils de couverture de code. Elle avait mis au point des scripts
    Scilab pour tester la performance séquentielle des versions successives de MUMPS, mais nous
    n’avons pas réussi à maintenir ces scripts après son départ.
–   projet ANR Solstice (ANR-06-CIS6-010, 2007-2010), Solstice pour SOLveurs et SimulaTIon
    en Calcul Extrême. L’objectif de ce projet et de concevoir et développer des solveurs

                                                   3
ADT MUMPS
   linéaires parallèles efficaces sur des problèmes de très grandes dimensions. Ce projet concerne
   le LaBRI/INRIA Bordeaux Sud-Ouest (coordinateur), le CERFACS, l’INPT-IRIT, le CEA-
   CESTA, EADS-Innovative Works, EDF R&D et le CNRM (Météo). Les participants à cette
   ADT sont particulièrement impliqués dans les tâches qui concernent la factorisation et la
   résolution out-of-core, la parallélisation de la phase d’analyse, et la détection du rang, les
   travaux réalisés étant injectés en ce qui nous concerne dans le logiciel MUMPS pour être ensuite
   expérimentés par les partenaires industriels.
Par rapport à la concurrence, l’originalité de l’approche est de ne pas avoir du tout sacrifié
les aspects numériques pour des raisons de performances ou de parallélisation sur calculateurs
à mémoire distribuée. De plus nous sommes les seuls à avoir un ensemble de fonctionnalités
aussi étendu, qui résulte de l’intégration aussi systématique et cohérente que possible de nos
travaux dans une seule et même plate-forme logicielle. Même en séquentiel, il n’y a pas à notre
connaissance d’autres code disponible publiquement comme MUMPS qui ait la même gamme
d’options permettant de traiter des problèmes symétriques indéfinis.
Les travaux de recherche envisagés pour le futur (qui ne sont pas purement l’objet de cette ADT
mais seront effectués en parallèle) concernent : (i) la scalabilité mémoire sur architectures à grands
nombres de processeurs (Blue Gene par exemple), (ii) l’étude et la parallélisation pour architectures
mixtes distribué/multicoeurs, (iii) la parallélisation de certains prétraitements numériques, comme
par exemple les algorithmes dits de maximum weighted matching, (iv) le traitement efficace
(temps, qualité numérique, mémoire) de problèmes les plus gros possibles.

2.2    Aspects technologiques
L’objet de l’ADT est le logiciel MUMPS (cf http ://graal.ens-lyon.fr/MUMPS ou
http ://mumps.enseeiht.fr). MUMPS est un solveur parallèle pour la résolution de systèmes
linéaires creux de grande taille. MUMPS (pour MUltifrontal Massively Parallel Solver) implante
une méthode directe, la méthode multifrontale. C’est un code parallèle unique par les performances
obtenues et le spectre de fonctionnalités disponibles, parmi lesquelles on peut citer :
– différents types de systèmes : symétriques définis positifs, symétriques généraux (indéfinis) ou
   non symétriques,
– différents formats d’entrées : matrices assemblées ou exprimés comme une somme de matrices
   élémentaires provenant typiquement de problèmes d’éléments finis, matrices centralisées sur un
   processeur ou distribuées sur les processeurs,
– différentes précisions arithmétiques pour les données et le calcul (simple ou double précision,
   réel ou complexe),
– détection des pivots nuls et estimation d’une base du noyau,
– prétraitements et mises à l’échelle (parallélisation récente de certains prétraitements),
– factorisation partielle et calcul d’un complément de Schur,
– seconds membres denses ou creux, solution centralisée ou distribuée,
– pivotage partiel avec seuil,
– approche asynchrone avec recouvrement des calculs et des communications,
– ordonnancement dynamique et distribué des tâches de calcul pour permettre un bon équilibrage
   de charge en présence de pivotage numérique imprédictible ou pour les environnements multi-

                                                  4
ADT MUMPS
   utilisateurs,
– stockage sur disque des facteurs quand la mémoire disponible n’est pas suffisante.
Sur les aspects purement technologiques, MUMPS est un code d’assez grande taille (plus de 200
000 lignes) écrit en Fortran 95 (avec un style à la Fortran 77 pour les noyaux de calcul bas niveaux)
et en C. Le parallélisme est effectué grâce à la librairie de transfert de messages MPI (Message
Passing Interface), même si certains utilisateurs ont commencé à tester l’insertion de directives
OpenMP dans leur version du code. Un seul code est maintenu et nous générons automatiquement
les diverses précisions (single, double, single complex, double complex). MUMPS s’appuie sur les
bibliothèques publiques BLAS et Scalapack.
Un module de communications permet d’effectuer les communications asynchrones et de gérer
un buffer de communications cyclique dans l’espace utilisateur. Lorsque le buffer est plein, il faut
être capable de passer en mode réception et gérer l’arrivée de messages et de nouvelles tâches afin
d’éviter tout risque de deadlock.
Les couches bas-niveaux pour les entrées-sorties sont écrites en C, et nous utilisons les threads
POSIX (sur les architectures où ceux-ci sont disponibles) pour gérer l’asynchonisme entre les
calculs et les requêtes d’entrées-sorties. Les portages pour machines de type Microsoft Windows R
et le maintien de fichiers Visual Studio R sont actuellement effectués par des utilisateurs.
Le fonctionnement correct du logiciel est contrôlé par des tests de non-régression qui tournent
toutes les nuits, actuellement sur deux machines différentes (avec deux compilateurs différents),
l’une à Lyon, l’autre à Toulouse. Une étude de couverture de code est effectuée de temps en temps
(manuellement).
Les développements sont effectués de manière collaborative grâce au gestionnaire de version SVN.
L’intégration des développements recherche est normalement gérée à l’aide de directives du pre-
compilateur (e.g., #ifdef) ou, pour les développements les plus en amont, au moyen de la création
de branches dans le système SVN.

2.3    Public visé, diffusion, transfert, innovation
MUMPS est utilisé par quelques milliers utilisateurs (rythme actuel mille téléchargements par an)
académiques ou industriels (environ moitié/moitié), dans des domaines d’applications très variés.
MUMPS est par ailleurs utilisé et directement distribué dans des codes de calcul (FEMTown de
FFT, SAMCEF de SAMTECH, Code ASTER d’EDF, PETSC, IPOPT). Parmi les utilisateurs
industriels on peut citer par exemple BOEING, le CEA, EADS, EDF, ESI-Group, Free Field
Technologies, RTE ou SAMTECH. Les utilisateurs qui demandent à apparaître sur la page
applications de MUMPS sont visibles sur http ://graal.ens-lyon.fr/MUMPS/index.php ?page=apps
Compte tenu de l’historique compliqué de MUMPS (nombreux partenaires, code qui a commencé
en 1996 sans l’INRIA et à partir de travaux existants), nous nous sommes appuyés sur la librairie
domaine publique disponible en fin de projet PARASOL pour pouvoir continuer à travailler sur ce
logiciel, et la solution qui a été retenue jusqu’à maintenant a continué dans le même esprit, dans le
sens où chaque nouvelle version de MUMPS diffusée aux utilisateurs est domaine publique. Ainsi
pour chaque contrat (contrats industriels, contrat ANR), les clauses liées à la propriété intellectuelle
indiquent que les développements résultant du contrat sont reversées dans une version domaine
publique du logiciel MUMPS à la fin du contrat. Cette solution a pour l’instant donné satisfaction,

                                                   5
ADT MUMPS
sachant que c’est plus la capacité à faire évoluer le logiciel qui est une richesse que le logiciel
lui-même.
Une des originalités par rapport à la concurrence est le support et les discussions
avec les utilisateurs, notamment via la liste mumps-users, (cf https ://listes.ens-
lyon.fr/sympa/subscribe/mumps-users pour les archives) et l’alias des développeurs mumps-dev.
Le contact étroit que nous avons avec beaucoup d’utilisateurs nous satisfait car il nous permet de
rester proches des applications et d’orienter nos travaux de recherche en fonction de ces besoins.
Les utilisateurs sont satisfaits aussi qu’on prenne le temps de comprendre leurs problèmes et de
répondre à leurs questions. En revanche nous commençons à être victimes du succès de MUMPS
et à ne plus pouvoir effectuer ce travail de manière satisfaisante.

3    Objectifs de l’ADT
Le succès de nos travaux et du logiciel MUMPS est incontesté ; le dernier rapport d’évaluation
de GRAAL en 2008 mentionne notamment que "The work on sparse solvers is one of the most
recognized and successful efforts in that area. MUMPS is used by a large number of researchers
in academia and industry." Aujourd’hui, nous sommes en quelque sorte victimes de ce succès et
assurer la maintenance et le support aux utilisateurs du logiciel est de plus en plus difficile. Insérer
de nouvelles fonctionnalités également. De plus, la dimension du groupe a changé (arrivée de deux
chargés de recherche CNRS, Bora Uçar à Lyon et Alfredo Buttari à Toulouse).
La difficulté est donc de passer à l’échelle, cela nécessite de passer d’une phase qu’on pourrait
qualifier de structurée mais artisanale à une phase plus professionnelle d’industrialisation d’un
outil recherche. Cela concerne non seulement la qualité du code et de sa documentation, mais
aussi la qualité de la documentation utilisateurs avec plusieurs niveaux de documentation selon
les utilisateurs. Le suivi des performances et des outils simples pour ajouter des cas d’utilisation
provenant des utilisateurs dans nos séries de tests (non régression, performances) est aussi critique.
Un bilan de performance par rapport aux outils concurrents doit être refait et partiellement
automatisé.
Tout cela doit rester suffisamment simple et documenté pour être utilisé sans formation préalable
par des personnels qui rejoignent le projet pour des durées souvent courtes (stagiaires, postdocs,...)
et évolutif car le logiciel est nourri par une recherche active.

4    La sortie de l’ADT : positionnement après l’ADT
L’objectif principal, en plus des développements ponctuels en cours, est d’avoir un objet en fin
d’ADT qui soit plus robuste, plus structuré et qui soit évolutif de manière simple :
– aussi bien au niveau du code et de ses fonctionnalités,
– que pour l’ajout de cas tests (performance, non régression), provenant éventuellement
  d’utilisateurs : rapports de bugs ou de mauvaises performances
– que pour avoir une documentation orientée support, où ajouter des informations ou des
  illustrations algorithmiques liées à des discussions avec les utilisateurs soit simple et

                                                   6
ADT MUMPS
   soit structuré sémantiquement pour que d’autres utilisateurs puissent retrouver facilement
   l’information qu’ils cherchent.
Le travail d’analyse et de comparaison de performance avec les logiciels concurrents et la capacité
à automatiser même partiellement cette analyse constituera un outil de base fondamental pour la
validation et la valorisation de notre logiciel.

4.1    Aspects scientifiques
Deux thèses viennent de se terminer. Nous sommes en phase de recrutement d’un postdoc à Lyon,
et une thèse devrait commencer à la rentrée prochaine à Toulouse. A la fin de l’ADT, les travaux
de recherche récemment intégrés ou en cours et les travaux liés aux contrats industriels seront
validés. Cela permettra de traiter des problèmes de très grande taille efficacement et de garder
notre position vis à vis de la concurrence. Cela permettra aussi de poursuivre des objectifs de
recherche sur de vrais problèmes industriels de plus en plus difficiles et de grande taille, avec une
plate-forme logicielle robuste et stable permettant plus facilement d’expérimenter de nouvelles
idées recherche.
Le bilan de l’étude et la comparaison avec les autres logiciels du domaine doit nous permettre
de bâtir une jeu de problèmes critiques et représentatifs (utile pour la validation), d’identifier des
verrous logiciels ou algorithmiques critiques à lever, d’orienter nos recherches futurs. Par ailleurs
nous espérons que cette étude pourra être la base d’un travail de documentation expliquant et
analysant les comportements des outils en fonction de problèmes. Ce travail pourra être l’objet,
comme cela avait été le cas avec Sherry Li (auteur de SuperLU du projet Sclalapack, concurrent
USA) du Lawrence Berkeley Nat. Lab. en 2000, d’une collaboration étroite avec les auteurs
d’autres outils.
En fin d’ADT nous serons également plus réactifs aux besoins scientifiques des utilisateurs
(support, reproduction de comportements type des utilisateurs), grâce à une meilleure structuration
de notre travail et de meilleurs outils d’analyse et de diagnostic de notre logiciel.

4.2    Aspects technologiques
Nous espérons grâce au résultat de l’ADT être capable de réduire les délais entre la production
d’un produit de la recherche et sa mise à disposition des utilisateurs. Une plus grande efficacité
globale dans la gestion de la vie de la plate-forme logicielle doit nous permettre de mieux nous
consacrer à l’enrichissement du logiciel et au support algorithmique vis à vis des utilisateurs.
L’automatisation d’un bilan de comparaison de performance avec les autres outils doit aussi
permettre outre la valorisation et la validation de suivre les évolutions (recherche et technologique)
des autres outils. Pour un logiciel comme MUMPS ayant un spectre d’application aussi large il
est important aussi de suivre pour chaque classe d’application les évolutions des logiciels plus
spécifiques.

                                                  7
ADT MUMPS
4.3   Aspects diffusion, transfert, innovation
Nous souhaitons garder notre base d’utilisateurs et satisfaire les nouveaux besoins applicatifs
associés au mieux. Accroître la base d’utilisateurs devrait se faire naturellement. Le nombre moyen
de téléchargement par jour a doublé l’an dernier. Nous avons engagé des discussions pour la
signature d’autres projets de recherche et d’autres contrats de recherche directement avec des
industriels et pensons les concrétiser d’ici la fin de l’ADT.
Les éléments sur la propriété intellectuelle, le mode de diffusion et la licence sont discutés dans
la section 2.3. Nous pourrions étudier en collaboration avec les services des relations industrielles
et les services juridiques de l’INRIA, de l’INPT-IRIT/CNRS, et du CERFACS l’opportunité/les
difficultés/les implications de passer à une licence de type LGPL ou Cecill-C.

4.4   Mode de gestion envisagé pour l’objet de l’ADT après le terme
L’INRIA, le CNRS et l’INPT-IRIT continueront à se charger du support et de la maintenance
logicielle de l’objet de l’ADT. Les chercheurs et enseignants-chercheurs impliquées sont Patrick
Amestoy, Alfredo Buttari, Abdou Guermouche, Jean-Yves L’Excellent et Bora Uçar. Le fait
d’avoir un ingénieur permanent du SED qui participerait à cette ADT peut permettre d’aider
ponctuellement aux travaux de support/maintenance sur les aspects qui font spécifiquement l’objet
de cette ADT.

5     Mise en oeuvre prévisionnelle de l’ADT
5.1   Identification des rôles et organisation de l’ADT
Responsable de l’ADT : Jean-Yves L’Excellent
Responsables techniques : Patrick Amestoy et Abdou Guermouche
Responsables du contact utilisateurs et de la valorisation : Alfredo Buttari et Bora Uçar
Nous prévoyons au minimum une réunion mensuelle impliquant au moins une personne par
institution à chaque fois. Des réunions techniques plus fréquentes pourront avoir lieu. Les
déplacements pour réunions administratives régulières à Grenoble ou à Lyon peuvent être
l’occasion de discussions plus informelles avec le SED.
De manière générale, les chercheurs en enseignants-chercheurs permanents encadreront le travail
et exprimerons leurs besoins pour permettre d’effectuer les spécifications de chacune des tâches.
En plus des tâches qui lui sont affectées (voir Section 5.2), l’ingénieur qualifié du SED suivra le
travail du jeune diplomé et apportera son point de vue sur les aspects génie logiciel et méthodes de
travail.
Les risques de nature organisationnelle sont liés à la distance (Equipe Graal à Lyon, INPT-IRIT à
Toulouse, ingénieur qualifié du SeD à Grenoble, Abdou Guermouche à Bordeaux). C’est pourquoi
nous souhaitons avoir un planning de réunion régulière. L’ADT constituant un projet important
pour le groupe MUMPS il aura aussi un effet structurant et de ce point de vue il sera motivant
pour ajouter de la cohésion malgré la distance (avec laquelle nous avons vécu depuis la fin du

                                                 8
ADT MUMPS
projet européen PARASOL en 1999). Un autre risque est la promotion, auquel cas chercheurs et
enseignants-chercheurs concernés pourraient avoir moins de temps à consacrer à l’activité. De ce
point de vue, le résultat de l’ADT devrait nous permettre de mieux faire face à ce risque par la
suite.

5.2    Planification prévisionnelle
Les différentes tâches du projet sont décrites ci-dessous et le calendrier prévisionnel est
résumé Figure 1. Pour certaines tâches où les choix de conception sont importants, les
spécifications et une première maquette seront effectués par l’ingénieur qualifié, tandis que les
développements plus simples seront effectués en priorité par l’ingénieur jeune diplômé. Dans tous
les cas, l’ingénieur qualifié participera au suivi et à la supervision du travail de l’ingénieur débutant.
Les phases de conception dépendront des besoins / du cahier des charges sont à définir en
collaboration avec les chercheurs et enseignants-chercheurs impliqués. Ceux-ci sont directement
impliqués dans l’objet de l’ADT qui est directement liée à leur activité de recherche principale et
aux contrats en cours. Les volumes mentionnés ci-dessous sont des hommes x mois d’ingénieur.
Nous fournissons également les dates de début, dates de fin et jalons prévisionnels.

Tâche 1 — Outils d’expérimentation et de validation :
Ingénieur qualifié pour superviser la conception et les premiers développements (notamment pour
la sous-tâche 1.2), la suite du travail pouvant être effectué par l’ingénieur jeune diplômé.
Date début      :   T0
Date Fin        :   T0+12
Volume          :   4 hommes x mois
Jalon T0 + 6    :   fin de la tâche 1.1, spécification de la tâche 1.2
Jalon T0 + 12   :   tâche 1 terminée

Cette tâche consistera à :
 1.1 Rendre le driver d’utilisation avancé de MUMPS (actuellement nommé testhb) plus simple,
      modulaire et évolutif. Intégrer le driver pour matrices distribuées en entrée (actuellement
      nommé test_distMM) dans le même driver global.
 1.2 Rendre le code permettant d’effectuer les tests de non régression (test_mumps) plus simple,
      modulaire et évolutif.
 1.3 Fournir la capacité à tous les contributeurs d’ajouter de nouveaux problèmes de test provenant
      de nos utilisateurs avec un fichier de paramètre simple (documentation de la tâche 1.1) pour
      reproduire les cas d’exécution des utilisateurs. En fonction de la difficulté à l’implanter de
      manière suffisamment générale en fonction des différentes phases de calcul de MUMPS,
      ajout éventuel d’une fonctionnalité à MUMPS pour "dumper" les paramètres utilisateur dans
      un fichier lors de l’exécution par un utilisateur. Ce fichier pourrait avoir le même format que
      le fichier d’entrée de nos drivers de tests pour être inclus tels quels dans les bases de tests.

                                                    9
!"##$%                           ADT MUMPS
                    !""#$%&                    !""#$&'       &           !""#$&(
                    )*          )*+,           )*+%'         )*+%-       )*+'.         )*+(*
  )/01$&%                     *"+
  )/01$&'                     *"+                  ,"+
  )/01$&(                           ,"+
  )/01$&.                                          ,"+
  )/01$&2                                                 -"+
  )/01$&,                       *"+                       ,"+
  )/01$&3                                                                             %"+
  )4%                                 %"+                 %"+                         %"+
  )4'                                 %"+                 ."+                         ,"+
  )5)!6                       %-"+                        %-"+                        *"+

                                      F IG . 1 – Planing prévisionnel.

Tâche 2 — Software engineering :
Ingénieur jeune diplômé. L’ingénieur qualifié pourra compléter la définition du travail à effectuer.

Date début      :    T0
Date fin        :    T0+16
Volume          :    6 hommes x mois
Jalon T0 + 16   :    tâche 2 terminée,
                     les CODING_RULES sont adoptées par tous les développeurs et appliquées

La plupart des sous-tâches ci-dessous pourront commencer dès le début de l’ADT. La tâche 2.7
dépend de la tâche 1.2 et elle est à la limite d’une tâche de fond. Elle nécessite une familiarisation
avec le code et un rôle actif dans les discussions à mener avec les développeurs. La tâche 2.8
également.
Les sous-tâches proposées sont :
 2.1 L’utilisation (et la définition préalable) d’un ensemble d’options de compilation pour un
      ensemble de compilateurs et de machines correspondant aux tests journaliers. Associé au
      nettoyage de tous les warnings correspondants aux options de compilation choisies, l’objectif
      est toujours d’améliorer la qualité du code. Cet ensemble d’options servira aussi pour la tâche
      3 (tests systématiques de compilation)
 2.2 un codage et un traitement systématique et uniformisé des erreurs, avec en plus des
     informations actuelle la remontée du nom de la routine où l’erreur s’est produite
 2.3 l’amélioration de la portabilité sur différentes plates-formes, le cas échéant
 2.4 la suppression/simplification des directives pre-compilateur inutiles ou trop obscures, en
      collaboration avec les développeurs,
 2.5 un nettoyage systématique des variables déclarées mais non utilisées,

                                                    10
ADT MUMPS
 2.6 la prise en compte et l’évolution éventuelle des conventions et règles de codage (fichier
      CODING_RULES du SVN), puis le suivi du bon respect des règles de codage par tous
      les développeurs,
 2.7 l’amélioration de la couverture de code et l’identification du code mort, en relation avec
      l’extension des tests de non régression (tâche 1) : tests externes (ou “boite noire”) + tests de
      fonctionnalités plus internes, non contrôlables directement par l’utilisateur (“boite blanche”)
 2.8 l’amélioration des méthodes de documentation interne du code.

Tâche 3 — Tests automatisés de machines et chaînes logicielles :
Ingénieur qualifié

Date début     : T0+6
Date fin       : T0+12 mois
Volume         : 2 hommes x mois
Jalon T0 +12   : tâche 3 terminée,
                 des tests nocturnes tournent régulièrement sur un ensemble de machines,
                 l’ajout d’une machine de test quelconque est simple à réaliser.

Cette tâche consistera d’abord à enrichir les scripts existants (test_script.sh) pour pouvoir
tester de nouveaux compilateurs/configurations/machines. Cela pourra inclure en plus des
machines actuelles (un serveur à Lyon, un autre à Toulouse) les machines de la plate-forme de
portage pipol de l’INRIA, en particulier pour ce qui est des architectures MAC OS et Microsoft
Windows. Il faut prévoir de pouvoir utiliser facilement aussi des machines de production voire un
peu plus exotiques : machines parallèles (IBM, NEC, SGI, . . .) de l’IDRIS, du CCRT, du CINES.
Les tests sur ces machines pourraient être systématiques avant une release, occasionnels sinon.
Pour une machine donnée, on peut aussi prévoir d’utiliser différents compilateurs et différentes
version de MPI (MPICH, LAM, OpenMPI).
On souhaiterait ne pas être dépendants d’outils trop spécifiques (idéal=ssh, shell scripts) pour
pouvoir inclure une nouvelle machine (éventuellement parallèle) aussi simplement que possible.

Tâche 4 — Mécanisme de suivi de performances :
Ingénieur jeune diplômé, supervision par l’ingénieur du SED

Date début     :   T0+12
Date fin       :   T0 + 18 mois
Volume         :   2 hommes x mois
Jalon T0+18    :   tâche 4 terminée,
                   le mécanisme existe et toute l’équipe est capable de l’utiliser et de l’enrichir.

L’objectif de cette tâche est la mise en place et documentation d’un mécanisme (aussi léger que
possible) de suivi des performances. La capacité à ajouter facilement de nouveaux cas tests à nos

                                                  11
ADT MUMPS
drivers (tâche 1) sera pour cela utilisée. Les matrices liées aux cas tests pourraient être déposées
sur le site GRID-TLSE, projet connexe à MUMPS, avec accès aux matrices depuis différentes
machines par "wget" et cache local éventuel.
Pour chaque cas, un fichier doit décrire le scénario d’utilisation (valeurs des paramètres de
contrôle, matrice de test, machine, nombre de procs, etc + une section de taille illimitéé avec
des commentaires décrivant l’origine du cas test et son historique).
Le driver de la tâche 1.1 doit être pensé pour permettre de tourner le cas test avec en entrée un
fichier et de garder les sorties, les temps des phases principales (analyse, factorisation, résolution)
et quelques statistiques critiques comme l’utilisation mémoire à chacune des phases du calcul.
Exemple type : un utilisateur nous fournit un nouveau cas test sur lequel la performance est
mauvaise ou surprenante. On crée un nouveau fichier qui correspond à ce scénario. On identifie le
problème de performance et on apporte des modifications au code pour améliorer les performances.
On vérifie ensuite de release en release que les performances restent satisfaisantes sur cette classe
de problèmes.

Tâche 5 — Comparaison avec d’autres solveurs directs :
Ingénieur jeune diplômé

Date début     :   T0+12
Date fin       :   T0+24 mois
Volume         :   6 hommes x mois
Jalon T0+24    :   tâche 5 terminée,
                   rapport technique avec génération automatisée des tableaux de résultats

L’objectif de cette tâche est d’effectuer un bilan de performances et une comparaison avec
d’autres logiciels publiques, notamment sur des machines parallèles d’architecture récente. Il
s’agit d’un besoin identifié par des partenaires industriels qui n’ont accès qu’à de vieux articles
de comparaison.
 5.1 Définir l’environnement de test :
      – Déterminer un jeu significatif de problèmes de test permettant d’illustrer les propriétés
        algorithmiques des différents outils.
      – Déterminer un jeu de machines de test.
      – Déterminer un jeu de métriques et organiser la récupération de ces statistiques communes
        (parfois certaines métriques comme la mémoire utilisée ne sont pas fournies par un solveur
        et il faudra les recalculer).
 5.2 Production et analyse de résultats :
      Il faudra définir des modes d’utilisation des outils, par exemple :
      – Défaut : on lance chaque outil avec ses paramètres par défaut.
      – Intermédiaire : on lisse les comportements avec des réglages par classe d’application
      – Best effort : on règle par problème chaque outil logiciel.
 5.3 Automatisation partielle L’objectif est de :

                                                    12
ADT MUMPS
      – contrôler la génération automatique de résultats avec contrôle du choix des outils, des
        problèmes et des métriques,
      – de garantir la capacité à intégrer de nouvelles releases.
Cette tâche est liée à d’autres tâches, en particulier la tâche 1. A noter qu’elle permettra aussi,
en collaboration avec les développeurs historiques, le réglage des tailles de blocage des calculs
locaux et de différents paramètres par défaut qui agissent directement sur la performance de nos
algorithmes. (Certains n’ont pas été modifiés depuis des années alors que les machines, tailles de
caches, etc... ont évolué. Cas du NEC pour lequel la performance a pu être augmentée de façon
significative en modifiant le paramètre dit d’amalgamation du graphe des tâches).

Tâche 6 — Documentation utilisateur et aide au support
Ingénieur qualifié

Date début      :
                T0+6
Date fin        :
                T0 + 24
Volume          :
                4 hommes x mois
Jalon T0 + 12   :
                fin des spécifications et première maquette,
                à cette date toute l’équipe doit être capable de compléter et faire évoluer la documentation,
Jalon T0 + 18 : fourniture de la nouvelle documentation en beta test à quelques utilisateurs,
Jalon T0 + 20 : mise en production.

L’objectif de cette tâche est de moderniser la documentation existante avec un objectif “support”. Il
existe une FAQ et une documentation utilisateurs mais cela ne répond actuellement pas totalement
à nos besoins.
On envisage une documentation plus dynamique avec des hyperliens et des niveaux de description
qui dépendraient du niveau de l’utilisateur et du contexte d’utilisation du logiciel. En particulier,
la compatibilité des paramètres pour les utilisateurs est difficile à comprendre, certains paramètres
répondent à des besoins particuliers, certains réglages font appel à la connaissance algorithmiques
qui sont internes aux solveurs, on a parfois des discussions qui se ressemblent dans le travail
de support aux utilisateurs et on aimerait un endroit où on dépose et retrouve facilement ces
informations.
Améliorer la documentation demande avant tout un travail de conception significatif, qui devra
aboutir à une première maquette à T0 + 12 mois. La documentation sera alors nourrie par l’équipe
MUMPS pour aboutir à une version diffusable aux utilisateurs (distribution de MUMPS, site web)
en fin de tâche (version beta à T0 + 18, en production à T0 + 20). Jusqu’à T0 + 24 il s’agira surtout
d’améliorer et de maintenir l’existant.
Il faut que le schéma soit suffisament simple et évolutif pour pouvoir y injecter de nouvelles
informations et les retrouver facilement.

Tâche 7 — Stabilisation et maintenance du travail du jeune ingénieur
Ingénieur expérimenté

                                                 13
ADT MUMPS
Date début     :   T0+24
Date fin       :   T0+36
Volume         :   1 homme x mois

Il s’agit de stabiliser si nécessaire et d’effectuer la maintenance du travail du jeune diplômé après
son départ à T0 + 24, afin de pérenniser le travail effectué dans les tâches 1 à 6 et assurer la
réutilisation de tous ses travaux par l’équipe.
On peut penser que cette tâche n’a idéalement pas lieu d’être, il est pour autant important de borner
les développements et de stabiliser un produit finalisé.

Tâche de fond 1 — Participation et suivi du support aux utilisateurs
Ingénieur jeune diplômé et/puis ingénieur qualifié

Date début     :   T0+6
Volume         :   3 hommes x mois

Cette tâche commencera à T0 + 6, une fois les ingénieurs suffisamment “dans le bain”. Il s’agit de
participer au contact avec les utilisateurs, et d’en assurer le suivi.
– Lorsque le problème est intéressant d’un point de vue performances, insertion dans la base des
  problèmes à tester pour le suivi des performances (Tâche 4).
– Lorsque le problème est intéressant parce qu’il révèle un bug ou un problème algorithmique
  dans un morceau du code passe peu d’habitude, insertion dans la base des problèmes à tester
  pour la non régression.
– Lorsque la réponse à une question utilisateur est intéressante, insertion de la réponse et/ou
  explication algorithmique et/ou illustration des effets d’un paramètre de contrôle dans le schéma
  de documentation mis en place au niveau de la tâche 6.

Tâche de Fond 2 — Aide à la validation des nouvelles fonctionnalités
Ingénieur jeune diplômé et/puis ingénieur qualifié

Date début     :   T0+6
Volume         :   6 hommes x mois

L’objectif de cette tâche est de participer aux travaux en cours :
– Aide à la validation et à la stabilisation des fonctionnalités récentes (gestion d’entiers 64 bits,
  out-of-core, analyse parallèle). Aide à la validation et à la stabilisation des fonctionnalités
  nouvelles développées dans le cadre des projets et contrats existants (SAMTECH, Solstice, ESI
  Group si qqchose démarre, etc.). Participation à l’enrichissement des tests de non régression
  pour chaque nouvelle fonctionnalité développée.
– Le cas échéant, conception et développement d’une fonctionnalité simple d’ampleur limitée
  faisant réponse à un besoin identifié par un utilisateur.

                                                 14
ADT MUMPS
Risques techniques et plan de levée des risques :
Un des risques est de vouloir être trop ambitieux dans nos attentes. L’élément important à avoir à
l’esprit pendant toute la durée de l’ADT (plan de levée de risques) est de garantir que dans chaque
tâche, on aura amélioré l’existant et surtout qu’on aura amélioré la capacité qu’aura chacun de
nous à l’utiliser et l’enrichir, garantissant ainsi son évolutivité.
Il faut pour cela que chacun puisse intégrer les nouveaux travaux et développements (et tests
associés le cas échéant) de manière simple et efficace, si possible sans dépendre d’outils ou de
procédures trop spécifiques, trop nouveaux ou demandant trop d’apprentissage.

6       Ressources
6.1     Bilan des ressources demandées
6.1.1    Ressources mises à disposition par la (les) EPI(s) dans l’ADT
Chercheurs et enseignants-chercheurs (à temps partiel) :
–   Patrick Amestoy (professeur, INPT-IRIT, Toulouse),
–   Alfredo Buttari (chercheur CNRS, INPT-IRIT, Toulouse),
–   Abdou Guermouche (mcf, LaBRI, EPI ScAlAppliX, Bordeaux),
–   Jean-Yves L’Excellent (chercheur INRIA, LIP, EPI Graal, Lyon),
–   Bora Uçar (chercheur CNRS, LIP, EPI Graal, Lyon)

En CDD :
– Nouveau postdoctorant XXX à recruter à Lyon, dans le cadre du projet SOLSTICE.
– Stagiaire en master François-Henry Rouet à l’INPT-IRIT, Toulouse, poursuite probable en thèse.
Même si tout est lié, le personnel de type postdoctorant ou doctorant est destiné à travailler sur
des aspects recherche plus "amont" plutôt que sur les aspects purement logiciels et technologiques
décrits dans cette ADT.

6.1.2    Ressources demandées
Sur poste :
Un ingénieur avec des compétences en calcul numérique du SED (Service Expérimentation et
Développement), du Centre de Rercherche Grenoble Rhône-Alpes, à 30 % sur le projet pendant la
durée de l’ADT (3 ans).

En CDD :
Un ingénieur jeune diplômé sur 2 ans.

                                                15
ADT MUMPS
Aspect formateur et analyse des débouchés pour l’ingénieur jeune diplômé :
L’ingénieur jeune diplômé s’intégrera dans une équipe dynamique et se formera sur les techniques
de développement et de validation de logiciel scientifique de grande taille, sur des calculateurs
variés. Il sera amené à travailler en collaboration avec des parternaires aussi bien industriels
qu’universitaires. Compte tenu du nombre important d’utilisateurs industriels (dont des sociétés
comme Boeing, EADS, Samtech, ...) du logiciel MUMPS, cette expérience peut constituer un
tremplin idéal pour que l’ingénieur rejoigne une équipe R&D industrielle ou une PME impliquée
dans le calcul scientifique, grâce à la compétence acquise sur des logiciels numériques conséquents
et sur le calcul parallèle sur réseaux de machines. L’ingénieur pourrait aussi faire valoir son
expérience pour s’intégrer dans une équipe de maintenance et/ou support de logiciel dans un centre
de calcul.

6.2     Aspects budgétaires autres que ressources humaines
6.2.1    Budget ADT dans les EPIs
Les équipes financent des travaux de recherche et des travaux amont au travers de projets de
recherche ou de contrats. Par exemple un nouveau postdoc doit arriver dans le cadre de l’ANR
Solstice, les contrats industriels nous fournissent également du fonctionnement qui est utilisé en
lien avec ces projets ou avec notre activité en général et la valorisation de nos recherches.
Les financements additionnels demandés sont spécifiques aux tâches identifiés dans l’ADT.

6.2.2    Budget additionnel demandé
Le budget additionnel demandé consiste à financer les travaux additionnels liés à l’ADT :
– 2 kEuros = une machine de travail pour l’ingénieur débutant qui sera recruté,
– 30 kEuros = 10 kEuros par an de fonctionnement pour couvrir :
  – les réunions entre participants de l’ADT (pour tous les sites) et déplacements ponctuels en
    lien direct avec l’objet de l’ADT,
  – éventuellement une licence pour un ou deux logiciels utiles pour l’ADT (compilateur Intel...),
    si les licences déjà disponibles via le service expérimentation et développement de l’INRIA
    ne suffisaient pas.

7       Suivi et évaluation
Nous rappelons les jalons prévisionnels ci-dessous, tâche par tâche :

Tâche 1 — Outils d’expérimentation et de validation :
Jalon T0 + 6 : fin de la tâche 1.1, spécification de la tâche 1.2
Jalon T0 + 12 : tâche 1 terminée
Tâche 2 — Software engineering :
Jalon T0 + 16 : tâche 2 terminée,

                                                16
ADT MUMPS
                 les CODING_RULES sont adoptées par tous les développeurs et appliquées
Tâche 3 — Tests automatisés de machines et chaînes logicielles :
Jalon T0 +12 : tâche 3 terminée,
                 des tests nocturnes tournent régulièrement sur un ensemble de machines,
                 l’ajout d’une machine de test quelconque est simple à réaliser.
Tâche 4 — Mécanisme de suivi de performances :
Jalon T0+18 : tâche 4 terminée,
                 le mécanisme existe et toute l’équipe est capable de l’utiliser et de l’enrichir.
Tâche 5 — Comparaison avec d’autres solveurs directs :
Jalon T0+24 : tâche 5 terminée,
                 rapport technique avec génération automatisée des tableaux de résultats
Tâche 6 — Documentation utilisateur et aide au support
Jalon T0 + 12 : fin des spécifications et première maquette,
                 à cette date toute l’équipe doit être capable de compléter et faire évoluer la documentation,
Jalon T0 + 18 : fourniture de la nouvelle documentation en beta test à quelques utilisateurs,
Jalon T0 + 20 : mise en production.
Tâche 7 — Stabilisation et maintenance du travail du jeune ingénieur

Outre les jalons dont les dates de réalisation restent prévisionnelles, une mesure du succès sera
la capacité qu’aura chacun des membres de l’équipe de développement (y compris membres non
permanents) à enrichir et à faire évoluer le résultat de chacune des tâches. La capacité des nouveaux
ingénieurs à travailler sur les projets et contrats liés au développement de nouvelles fonctionnalités
dans MUMPS sera aussi un bon indicateur de succès.
Enfin, l’impact de l’objet de l’ADT pourra d’autre part être mesuré au nombre de requêtes
quotidiennes de téléchargement, à l’activité sur la liste de diffusion, et aux nouveaux logiciels
de simulation qui décident de s’appuyer sur le solveur MUMPS.

A     Description des partenaires
Pour chaque partenaire sont indiqués les membres permanents impliqués dans l’ADT :

INRIA :
– EPI Graal : Jean-Yves L’Excellent (CR INRIA) et Bora Uçar (CR CNRS), LIP, ENS Lyon
– Ingénieur du SED, Grenoble
– Abdou Guermouche (Université de Bordeaux et membre de l’EPI ScAlAppliX), LaBRI,
  Bordeaux

INPT-IRIT, équipe APO, Toulouse :
– Patrick Amestoy (professeur)

                                                 17
ADT MUMPS
– Alfredo Buttari (CR CNRS)
L’IRIT, créé en 1990, est une Unité Mixte de Recherche (UMR-5505) du Centre National de
la Recherche Scientifique (CNRS), de l’Institut National Polytechnique de Toulouse (INPT),
de l’Université Paul Sabatier (UPS), de l’Université Toulouse1 Sciences Sociales (UT1) et de
l’Université de Toulouse2-le Mirail (UTM). L’équipe Algorithmes Parallèles et Optimisation
(APO) regroupe actuellement 13 chercheurs et enseignants chercheurs permanents, 8 doctorants
et 2 ingénieurs et s’est développée autour des thèmes de l’algèbre linéaire et de l’optimisation.
Son activité concerne quatre grands axes : algèbre linéaire et calcul sur la Grille, contrôle
optimal, optimisation globale et fouille de données. Dans ce contexte, notre activité nous porte
plus particulièrement vers la résolution de problèmes de taille toujours plus grande en nombre
d’opérations (de l’ordre du petaflops soit 101 5 opérations), et nécessitant toujours plus de mémoire
(des dizaines de teraoctets soit 101 3 octets) sur des super-calculateurs (ordinateurs les plus
puissants à un temps donné).

Apports et attentes des différents partenaires :
Chaque partenaire de l’ADT est critique à un bon déroulement de l’ADT soit de par ses
contributions passées à l’objet de l’ADT, soit compte tenu de ses capacités à le faire évoluer.
Un des objectifs en plus du résultat naturel de l’ADT est d’officialiser une collaboration étroite
existant depuis de nombreuses années avec pour objectif à terme une équipe commune.

Références
[1] E. Agullo, A. Guermouche, and J.-Y. L’Excellent. A parallel out-of-core multifrontal method :
    Storage of factors on disk and analysis of models for an out-of-core active memory. Parallel
    Computing, Special Issue on Parallel Matrix Algorithms, 34(6-8) :296–317, 2008.
[2] P. R. Amestoy, I. S. Duff, J. Koster, and J.-Y. L’Excellent. A fully asynchronous multifrontal
    solver using distributed dynamic scheduling. SIAM Journal on Matrix Analysis and
    Applications, 23(1) :15–41, 2001.
[3] P. R. Amestoy, I. S. Duff, J.-Y. L’Excellent, and X. S. Li. Analysis and comparison of two
    general sparse solvers for distributed memory computers. ACM Transactions on Mathematical
    Software, 27(4) :388–421, 2001.
[4] P. R. Amestoy, I. S. Duff, J.-Y. L’Excellent, and X. S. Li. Impact of the implementation of MPI
    point-to-point communications on the performance of two general sparse solvers. Parallel
    Computing, 29(7) :833–847, 2003.
[5] P. R. Amestoy, A. Guermouche, J.-Y. L’Excellent, and S. Pralet. Hybrid scheduling for the
    parallel solution of linear systems. Parallel Computing, 32(2) :136–156, 2006.
[6] A. Fèvre, J.-Y. L’Excellent, and S. Pralet. Scilab and MATLAB interfaces to MUMPS.
    Technical Report RR-5816, INRIA, Jan. 2006. Also appeared as ENSEEIHT-IRIT report
    TR/TLSE/06/01 and LIP report RR2006-06.

                                                 18
Vous pouvez aussi lire