Entrées/sorties parallèles dans un programme MPI
Vous souhaitez faire lire ou écrire des enregistrements d'un fichier
par plusieurs processus MPI. Il existe trois stratégies possibles :
- ouvrir en accès séquentiel un fichier différent par
processus pour y écrire le résultat des calculs puis collecter
le contenu de l'ensemble dans un même fichier pendant une phase
de post-traitement. Voici un exemple en Fortran ;
- ouvrir en accès direct un même fichier par tous les processus et
leur faire lire (ou écrire) des enregistrements paramétrés en fonction
du rang des processus. En voici un exemple ;
- utiliser l'implémentation MPI-IO ( cours MPI de l'IDRIS) fournie par le constructeur. Il existe plusieurs façons de faire. En voici un exemple où les opérations d'écriture sont collectives avec déplacement implicite.
Notes :
- Les stratégies 1 et 3 sont indépendantes du système de fichiers
(partagé par l'ensemble des processeurs ou privé à chaque processeur)
sur lequel les fichiers en question sont ouverts.
- La stratégie 2 n'est opérationnelle que sur un système de fichiers
partagé par l'ensemble des processeurs.
- Bien que générale, la stratégie 1 présente deux inconvénients
majeurs :
- une évidente lourdeur dans la gestion des fichiers ;
- le nombre de fichiers ouverts peut rapidement devenir
important au risque de se heurter à une limite système sur le
nombre de descripteurs de fichiers ouverts par application.
En revanche, en terme de performance, elle peut s'avérer avantageuse au
sens où aucune contrainte de synchronisation n'est nécessaire ; les
Entrées/Sorties peuvent même s'effectuer simultanément si les canaux
d'E/S sont indépendants.
- Sachez qu'un fichier créé avec MPI-IO (stratégie 3) ne peut être
relu qu'avec MPI-IO.
- Sur la machine Vargas de l'IDRIS, le
répertoire $TMPDIR est créé sur un système de fichiers partagé
par l'ensemble des nœuds. Il peut donc être avantageux d'utiliser
la stratégie 2 ou 3.
|
|
© CNRS - IDRIS, 13/01/2012