Introduction

Dans les derniers temps, il y a une demande de plus en plus élevée de mémoire et de capacité de processeur pour les applications d'éléments finis, basées sur MEF++, de la part des membres du GIREF. Une solution à ce problème a été de réaliser la parallélisation du code MEF++.

Le nouveau code, MEF++// (// veut signifier "parallèle"), deviendra sous peu le code principal dans le système CVS du projet MEF++. Ce nouveau code est encore largement compatible, du point de vue du fonctionnement, avec le code MEF++ que nous tous utilisons aujourd'hui. Il y a pourtant des différences, qui, bien qu'être cachées dans la structure interne des classes, pourraient influencer l'activité des usagers courants de MEF++.

Le code MEF++ courant sera toujours disponible dans la forme dans laquelle il se trouve aujourd'hui. De cette manière, tous les usagers qui n'ont pas besoin des fonctionnalités de parallélisme, pourront continuer leur travail sans changements. Le code courant va exister dans la branche de CVS nommée MEFPP_v2_0_FINAL. Les usagers qui veulent continuer à utiliser le code courant vont simplement devoir se référer à cette branche après la date de l'ajout du code parallèle dans le CVS.

Pour cette raison, j'ai préparé ce document qui explique en détail les actions à prendre pour éviter les ennuis lors de l'ajout du code parallèle dans le CVS de MEF++.

Lisez avec attention la section "Instructions". Pour toute manque de clarté ou pour de l'aide, n'hésitez pas me contacter par courrier (ctibirna@giref.ulaval.ca), par téléphone (1-418-656-2131 poste 4340) ou en personne (local PLT-2988).

Instructions

Le code parallèle sera mis dans le CVS mercredi, le 29 janvier 2003, à partir de 15h00. Il va constituer le nouveau "HEAD" du CVS.

La première fois que vous voulez faire un cvs update de votre code local après ce moment, il faudra:

  1. faire une copie de sécurité de votre code avec les commandes:
    > gomachine
    > gomefpp
    > tar zcvf monmefpp-29jan2003.tgz GIREF/src GIREF/app GIREF/makefiles GIREF/scripts GIREF/Makefile.local
    
    ATTENTION: si vous n'arrivez pas à accomplir cette étape, ne passez surtout pas plus loin, mais demandez plutôt de l'aide.
  2. faire la mise à jour en utilisant la branche spéciale:
    > cd GIREF
    > cvs upd -r MEFPP_v2_0_FINAL
    

Par la suite, mettre à jour votre code à partir de la branche MEFPP_v2_0_FINAL se fait avec la commande dont vous connaissez déjà: cvs update.

Si vous voulez reprendre le tout de zéro (dans un autre répertoire, ou pour un nouvel étudiant), la commande à utiliser est cvs -d :pserver:nom_dusager@cvshost.giref.ulaval.ca:/users/cvs/cvsroot co -r MEFPP_v2_0_FINAL GIREF

Pour pouvoir faire un commit qui concerne seulement la version séquentielle du code (i.e. MEFPP_v2_0_FINAL), il est absolument nécessaire de faire une mise à jour selon les instructions données ci-haut premièrement.

ATTENTION: il est important, pour les utilisateurs de la branche MEFPP_v2_0_FINAL, de ne jamais utiliser des commandes de CVS relatives à la version "HEAD" du code, comme cvs update -A.

Code parallèle: nouvelles posibilités

Pour combler le besoin de parallélisation du MEF++, il a fallu ajouter une quantité importante de code nouveau et de modifier une autre importante partie.

Carl Robitaille a ajouté une large collection de classes et algorithmes de communication parallèle qui abstractisent convenablement les conceptes de base de la spécification MPI (Message Passing Interface). Il a également adapte une partie du code de l'interface du MEF++ à PETSc. Carl a créé une interface pour le partitionneur de maillages ParMETIS. Il adapté une partie des classes de champs pour une écriture en parallèle.

Cristian Tibirna a créé une nouvelle technique de numérotation des dégrés de liberté, adaptable aux besoins de la parallélisation. Cela a conduit à la simplification de toutes les classes de champs. Les algorithmes de numérotation peuvent maintenant être librement redéfinis. Cristian a aussi adapté une partie des interfaces du MEF++ à PETSc pour les besoins du parallélisme. Il a réalise également le maintien du code parallèle jusqu'au moment de la grande mise à jour (qui fait le sujet de ce document).


Le code parallèle permet déjà la résolution en parallèle d'un certain nombre de problèmes d'éléments finis. Des problèmes de Laplacian et de Stokes ont été déjà testés. Suivent des tests et du travail pour augmenter la performance du code, à la fois en séquentiel et en parallèle.

La série de classes d'interfaces à MPI offre des outils très avancés pour la crèation plus facile de codes parallèles. Ces classes sont utilisables séparément de MEF++.

La flexibilité de la nouvelle numérotation facilite l'écriture de simulateurs et solveurs qui utilisent la modification dynamique de la structure des numéros de dégrés de liberté, comme les problèmes à conditions limites périodiques ou les solveurs avec condensation statique.

Le travail vient juste de commencer et nous essaions de converger vers un code encore plus facile è utiliser que celui déjà bien convivial d'aujourd'hui et qui permettra en plus de faire usage des nouvelles technologies de calcul dont le GIREF commence à disposer, comme le grand ordinateur de type Beowulf, récemment cquisitionné.