Ceci est une ancienne révision du document !
déplacer dans tutoriels
https://www.psmn.ens-lyon.fr/tikiwiki4/tiki-index.php?page=Pour%20compiler&bl=y
+ https://www.psmn.ens-lyon.fr/tikiwiki4/tiki-index.php?page=ExFortran90gnu&bl=y
+ https://www.psmn.ens-lyon.fr/tikiwiki4/tiki-index.php?page=ExCgnu&bl=y
Exemple de compilation et d'exécution d'un programme écrit en Fortran 90 (séquentiel)
Le programme 1) effectue la somme des deux vecteurs A et B. Le résultat est mis dans C.
Compilation du programme (après définition du l'environnement) :
$ source /usr/local/modeles/gnu-4.6.3 $ gfortran –version GNU Fortran (GCC) 4.6.3 $ gfortran -o SommeVecVec.f90.exe SommeVecVec.f90
⇒ Le fichier binaire (exécutable) SommeVecVec.f90.exe
a été généré.
* Exécution sur le serveur de compilation :
$ ./SommeVecVec.f90.exe
⇒ Le résultat est affiche a l'écran :
Les deux vecteurs :
A = 1 2 3 4 5 6 7 8 9 10
B = 9 8 7 6 5 4 3 2 1 0
Le vecteur somme :
C = 10 10 10 10 10 10 10 10 10 10
* Exécution sur les nœuds
Il faut savoir qu'on a un script de soumission 2) , pour SHELL tcsh) et un script d'exécution 3), pour SHELL tcsh) (ou 4) et 5), pour SHELL : bash).
C'est le script de soumission qui doit être lance et c'est lui qui appelle le script d'exécution.
::batch.csh → batchrun.csh → binaire::
$ ./batch.csh Your job 769504 (“batchrun.csh”) has been submitted $ qstat job-ID prior name user state submit/start at queue slots ja-task-ID
769504 0.00000 batchrun.csh cicaluga qw 06/12/2012 07:21:46
⇒ - La sortie de l'écran (sortie standard) est redirectionee dans le fichier “batchrun.csh.o769504”
et - La sortie erreurs est redirigéee dans le fichier “batchrun.csh.e769504”
~pp~ $ cat batchrun.csh.o769504
Les deux vecteurs : A = 1 2 3 4 5 6 7 8 9 10 B = 9 8 7 6 5 4 3 2 1 0 Le vecteur somme : C = 10 10 10 10 10 10 10 10 10 10
~/pp~
!!!!::~~#00c:2. Exemple de compilation et d'exécution d'un programme écrit en Fortran 90 (parallèle)~~ ::
Le programme 6) effectue la somme des deux vecteurs A et B. Le résultat est mis dans C. Chaque étape est effectuée sur 2 processus. Si le programme est exécuté sur plusieurs cœurs, seuls les deux cœurs seront effectivement utilises.
Compilation du programme (après définition du l'environnement) : ~pp~ $ source /usr/local/modeles/openmpi-1.4.5-gnu-4.6.3 $ mpif90 -showme gfortran -I/softs/openmpi-1.4.5-gcc-4.6.3/include -pthread -I/softs/openmpi-1.4.5-gcc-4.6.3/lib -L/softs/openmpi-1.4.5-gcc-4.6.3/lib -lmpi_f90 -lmpi_f77 -lmpi -lopen-rte -lopen-pal -lrdmacm -libverbs -ldl -lnsl -lutil -lm
$ mpif90 -o SommeVecVec.exe SommeVecVec.f90 ~/pp~
⇒ Le fichier binaire (exécutable) SommeVecVec.exe
a été généré.
* Exécution sur le serveur de compilation :
~pp~ $ mpirun -np 2 ./SommeVecVec.exe ~/pp~
⇒ Le résultat est affiche a l'écran :
~pp~ LES DEUX VECTEURS : A = 1 2 3 4 5 6 7 8 9 10 B = 9 8 7 6 5 4 3 2 1 0 LES DEUX VECTEURS LOCAUX : Je suis le proc 0 parmi 2 processus A local ( proc 0 ) = 1 2 3 4 5 B local ( proc 0 ) = 9 8 7 6 5 Je suis le proc 1 parmi 2 processus A local ( proc 1 ) = 6 7 8 9 10 B local ( proc 1 ) = 4 3 2 1 0 LE VECTEUR SOMME LOCAL : C local ( proc 1 ) = 10 10 10 10 10 C local ( proc 0 ) = 10 10 10 10 10 LE VECTEUR SOMME : C = 10 10 10 10 10 10 10 10 10 10 ~/pp~
* Exécution sur les nœuds
Il faut savoir qu'on a un script de soumission 7)) et un script d'exécution 8)).
C'est le script de soumission qui doit être lance et c'est lui qui appelle le script d'exécution.
::batch → batchrun → binaire::
~pp~ $ ./batch Your job 772030 (“batchrun”) has been submitted
$ qstat job-ID prior name user state submit/start at queue slots ja-task-ID
772030 0.00000 batchrun cicaluga qw 06/18/2012 07:41:51 2 $ qstat job-ID prior name user state submit/start at queue slots ja-task-ID
772030 0.05000 batchrun cicaluga r 06/18/2012 07:42:16 r410B_ib_test@r410lin57.ens-ly 2
~/pp~
⇒ La sortie de l'écran (sortie standard) est redirectionee dans le fichier ~pp~“batchrun.o772030” ~/pp~
et La sortie erreurs est redirectionee dans le fichier ~pp~“batchrun.e772030” ~/pp~
~pp~ $ cat batchrun.o772030 /home/cicaluga/Support/FormationPSMN/SommeVecVecPar LES DEUX VECTEURS : A = 1 2 3 4 5 6 7 8 9 10 B = 9 8 7 6 5 4 3 2 1 0 LES DEUX VECTEURS LOCAUX : Je suis le proc 0 parmi 2 processus A local ( proc 0 ) = 1 2 3 4 5 B local ( proc 0 ) = 9 8 7 6 5 LE VECTEUR SOMME LOCAL : C local ( proc 0 ) = 10 10 10 10 10 LE VECTEUR SOMME : C = 10 10 10 10 10 10 10 10 10 10 Je suis le proc 1 parmi 2 processus A local ( proc 1 ) = 6 7 8 9 10 B local ( proc 1 ) = 4 3 2 1 0 C local ( proc 1 ) = 10 10 10 10 10
~/pp~ {HTML()} <p></p> <hr /> <center> <h5>Pôle Scientifique de Modélisation Numérique</h5> </center> <hr /> {HTML}