Ce tutoriel est conçu pour être exécuté sur une machine Dahu. Une fois connecté à Dahu avec vos identifiants, commencez par créer un profil Guix et installez les outils suivants : Fortran et MPI. Copiez ensuite le code source et le Makefile, compilez-le et exécutez-le.
Premièrement, lancez Guix pour installer l’environnement logiciel nécessaire avec :
$ source /applis/site/guix-start.sh
Si vous exécutez cette commande pour la première fois, cela peut prendre plusieurs minutes. Si vous n’avez pas exécuter depuis un moment $ guix pull, veuillez le faire avant de poursuivre ce tutoriel.
Nous nous intéressons ici au paquet GNU Fortran. Pour le trouver parmi les paquets GUIX disponibles, exécuter la commande :
$ guix search fortran
Cette commande liste plusieurs paquets GUIX. Choisissez celui qui contient dans son nom name: gfortran-toolchain Ensuite, installez ce paquet dans un nouveau profil GUIX appelé gnu-fortran-mpi-tuto avec :
$ guix install -p $GUIX_USER_PROFILE_DIR/gnu-fortran-mpi-tuto gfortran-toolchain
Nous avons aussi besoin d’une bibliothèque MPI pour compiler et exécuter correctement le programme sur plusieurs noeuds :
$ guix search mpi
Choisissez celui qui contient dans son nom name:openmpi et installez le :
$ guix install -p $GUIX_USER_PROFILE_DIR/gnu-fortran-mpi-tuto openmpi
Enfin, comme indiqué dans la sortie de l’étape d’installation précédente, exécutez le fichier de configuration pour activer les paquets que vous venez d’installer (veillez à remplacer <your-login> par votre identifiant) :
$ GUIX_PROFILE="/var/guix/profiles/per-user/<your-login>/gnu-fortran-mpi-tuto"
$ . "$GUIX_PROFILE/etc/profile"
Vérifiez la bonne installation de vos paquets dans votre profil avec la commande :
$ guix package -p $GUIX_USER_PROFILE_DIR/gnu-fortran-mpi-tuto -I
gfortran-toolchain 7.5.0 out /gnu/store/0j35sgs9jfbr5w07plq0zjxfbmqw7w1i-gfortran-toolchain-7.5.0
openmpi 4.1.1 out /gnu/store/8pzsa54chmgimrmvxxry6nxs4z00ld2f-openmpi-4.1.1
Le wrapper Fortran pour MPI est mpif90 :
$ which mpif90
/var/guix/profiles/per-user/<yoour-login>/gnu-fortran-mpi-tuto/bin/mpif90
Créez un répertoire spécial dans votre $HOME :
$ mkdir $HOME/tuto-mpi
$ cd $HOME/tuto-mpi
et copiez le code et le makefile :
$ cp /bettik/bouttiep/tuto-mpi/* .
Pour compiler les exemples, chaque répertoire contient un fichier Makefile. Le Makefile se charge de la compilation et de l’exécution. Nous vous conseillons donc d’effectuer une soumission intéractive sur les noeuds de DAHU avec OAR.
Pour réserver un noeud en mode intéractif (i.e. OAR vous connecte à un noeud dès que la ressource est disponible), exécutez cette commande :
$ oarsub -t devel --project your_project -l /nodes=1,walltime=00:30:00 -I
Le -t devel indique que l’on souhaite travailler sur des noeuds devel, plus facile d’accès et conçus pour effectuer des compilations et des tests.
Une fois connectés, activez l’environnement logiciel que vous avez préalablement installé, puis compilez :
# source the guix profile
$ GUIX_PROFILE="/var/guix/profiles/per-user/<your-login>/gnu-fortran-mpi-tuto"
$ . "$GUIX_PROFILE/etc/profile"
# We compile the code and launch it
$ cd $HOME/tuto-mpi
$ make
La commande make lance automatiquement l’exécution. Vous pouvez lancer l’application vous-même avec :
$ cd $HOME/tuto-mpi
$ mpiexec -np 4 --machinefile $OAR_NODE_FILE ./pair_impair
Ici, nous avons exécuté le programme sur 4 coeurs d’un même noeud : Dans ce cas, --machinefile n’est pas nécessaire. Cependant, si vous souhaitez exécuter votre programme sur plusieurs noeuds, vous devez spécifier cette option.
A présent, nous voulons le lancer sur un plus grand nombre de coeurs et de noeuds.
Avant de continuer, quittez vos jobs intéractifs et retournez sur la frontale Dahu (une façon de le faire est d’exécuter la commande exit).
Pour exécuter votre programme plus facilement, on peut écrire un script d’exécution OAR as described here. Créez run.sh :
#!/bin/sh
#OAR -t devel
#OAR --project your_project
#OAR -l /nodes=4/core=1,walltime=00:30:00
source /applis/site/guix-start.sh
cd $HOME/tuto-mpi
mpirun --np 4 -npernode 1 --machinefile $OAR_NODE_FILE ./pair_impair
Avec cette configuration, le programme s’exécutera sur 4 coeurs, chacun sur un noeud différent.
N’oubliez pas d’accorder les permissions d’exécution au script :
$ chmod +x ./run.sh
Enfin, soumettez le job :
$ oarsub -S ./run.sh
Si vous voulez l’exécuter sur 4 coeurs du même noeud, vous pouvez modifier le script avec :
#!/bin/sh
#OAR -t devel
#OAR --project your_project
#OAR -l /nodes=1/core=4,walltime=00:30:00
source /applis/site/guix-start.sh
mpirun --np 4 --machinefile $OAR_NODE_FILE --mca plm_rsh_agent "oarsh" ./pair_impair