Ceci est une ancienne révision du document !


Compilation et d'exécution d'un programme (Fortran)

Langage Fortran 90, code séquentiel

Le programme SommeVecVecSEQ.f90 effectue la somme des deux vecteurs A et B. Le résultat est mis dans C.

Compilation du programme :

Définition de l'environnement :

  • définition de l'environnement pour tcsh (méthode “modules”)
source /usr/local/modeles/set_debian7-clean.csh
source /usr/share/modules/init/csh
module use /applis/PSMN/Modules
module load Base/psmn
module load intel/14.0.1 
  • définition de l'environnement pour tcsh (méthode “modeles”)
source /usr/local/modeles/intel-14.0.1.csh (avec intel)
source /usr/local/modeles/gnu-4.6.3 (avec gnu)
  • définition de l'environnement pour bash (méthode “modules”)
source /usr/local/modeles/set_debian7-clean.sh
source /usr/share/modules/init/sh
module use /applis/PSMN/Modules
module load Base/psmn
module load intel/14.0.1 
  • définition de l'environnement pour bash (méthode “modeles”)
source /usr/local/modeles/intel-14.0.1.sh (avec intel)
source /usr/local/modeles/gnu-4.6.3.sh
  • vérification de la version du compilateur
ifort --version
ifort (IFORT) 14.0.1 20131008

Compilation :

ifort -o SommeVecVecSEQ.f90.exe SommeVecVecSEQ.f90 (avec intel)
gfortran -o SommeVecVecSEQ.f90.exe SommeVecVecSEQ.f90 (avec gnu)

Le fichier binaire (exécutable) SommeVecVecSEQ.f90.exe a été généré.

Exécution du programme :

Exécution sur le serveur de compilation :

./SommeVecVecSEQ.f90.exe

Le résultat est affiché 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 le cluster :

On utilise un script de soumission batch.csh (ou batch.sh, pour le shell bash) pour soumettre le job sur les clusters de calcul.

C'est le script de soumission qui configure l'environnement puis appelle votre binaire (avec ses options, s'il en a) sur le noeud d'execution.

batch.csh → binaire

./batch.csh
Your job 769504 ("test") has been submitted
qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID 
-----------------------------------------------------------------------------------------------------------------
 769504 0.00000 test   cicaluga     qw    06/12/2012 07:21:46
  • La sortie de l'écran (sortie standard) est redirigée dans le fichier batch.csh.o769504
  • La sortie erreur (erreur standard) est redirigée dans le fichier batch.csh.e769504
cat batch.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

Langage Fortran 90, code parallèle

Le programme SommeVecVecPAR.f90 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 deux cœurs seront réellement utilisés.

Compilation du programme :

Définition de l'environnement :

  • définition de l'environnement pour tcsh (méthode “modules”)
source /usr/share/modules/init/csh
module use /applis/PSMN/Modules
module load Base/psmn
 
module load openmpi/1.6.4-intel-14.0.1
  • définition de l'environnement pour bash (méthode “modules”)
source /usr/share/modules/init/sh
module use /applis/PSMN/Modules
module load Base/psmn
 
module load openmpi/1.6.4-intel-14.0.1
  • définition de l'environnement (méthode “modeles”)
source /usr/local/modeles/openmpi-1.4.5-gnu-4.6.3 (avec gnu)
source /usr/local/modeles/openmpi-1.6.4-intel-14.0.1-debian7.csh (avec intel) //(méthode "modeles")//
  • définition de l'environnement pour bash (méthode “modeles”)
source /usr/local/modeles/openmpi-1.4.5-gnu-4.6.3.sh
  • Vérification
mpif90 -showme

ifort -I/softs/openmpi-1.6.4-intel-14.0.1-debian7/include -I/softs/openmpi-1.6.4-intel-14.0.1-debian7/lib -L/softs/openmpi-1.6.4-intel-14.0.1-debian7/lib -lmpi_f90 -lmpi_f77 -lmpi -lrdmacm -libverbs -lrt -lnsl -lutil -ldl -lm -lnuma -lrt -lnsl -lutil
  • Compilation
mpif90 -o SommeVecVecPAR.f90.exe SommeVecVecPAR.f90 (avec intel)
mpif90 -o SommeVecVecPAR.f90.exe SommeVecVecPAR.f90 (avec gnu)

Le fichier binaire (exécutable) SommeVecVecPAR.f90.exe est généré.

Exécution du programme :

Exécution sur le serveur de compilation :

mpirun -np 2 ./SommeVecVecPAR.f90.exe

Le résultat est affiché 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

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

Exécution sur les nœuds

Il y a un script de soumission (batch.csh) et un script d'exécution (batchrun.csh).

C'est le script de soumission qui doit être lancé et c'est lui qui appelle le script d'exécution.

batch → batchrun → binaire

./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   Login     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   Login     r     06/18/2012 07:42:16 r410B_ib_test@r410lin57.ens-ly     2 

La sortie de l'écran (sortie standard) est redirigée dans le fichier batchrun.o772030 et la sortie erreur est redirigée dans le fichier batchrun.e772030.

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
documentation/tutorials/build/fortran.1424428756.txt.gz · Dernière modification : 2020/08/25 15:58 (modification externe)