Soit
le programme fortran 77 :
test.f
Ce programme fait appel à
quatre sous-programmes ddot.f,
dgemv.f,
xerbla.f
et lsame.f
et
utilise un fichier de données test.dat.
Ce
programme ouvre le fichier de données, effectue quelques
opérations et crée un fichier
(test.out) contenant
les impressions.
Compilation : ifort test.f ddot.f dgemv.f xerbla.f lsame.f -o test_seq
Script-shell
minimal permettant d'exécuter ce job
Une ligne commençant
par « # » est un commentaire.
Par
contre une ligne commençant par « #PBS »
est une commande.
Cas
d'un code faisant peu d'I/O, utilisation du /home
sur le frontal :
fichier html commenté :
run_test_home.sh
fichier
à télécharger : run_test_home.sh
Cas
d'un code faisant beaucoup d'I/O, utilisation du /scratch
sur les nœuds :
fichier html commenté :
run_test_scratch.sh
fichier
à télécharger : run_test_scratch.sh
Soumission du script-shell : qsub run_test_home.sh ou qsub run_test_scratch.sh
[cros@gmfe3
Essai]$ qsub run_test_home.sh
193.gmfe3.cemif.univ-evry.fr
État du job : qstat
[cros@gmfe3 Essai]$ qstat
Job id |
Name |
User |
Time Use |
S |
Queue |
192.gmfe3 |
SubRP |
cros |
0 |
R |
One |
193.gmfe3 |
JobName |
cros |
0 |
Q |
One |
Il y a deux jobs dans la queue (id 192 et 193), avec :
R |
le job est en cours d'exécution |
Q |
le job "attend son tour" |
S |
le job est suspendu |
E |
le job "sort" après son exécution |
W |
le job attend la fin du temps d'exécution demandé |
Si l'on souhaite supprimer le job de la queue : qdel job_id
[cros@gmfe3
Essai]$ qdel 193
[cros@gmfe3 Essai]$ qstat
Job id |
Name |
User |
Time Use |
S |
Queue |
192.gmfe3 |
SubRP |
cros |
0 |
R |
One |
Vérification de la bonne exécution du code :
[cros@gmfe3
Essai]$ more test.out
début petit programme
données
lues : 10
produit scalaire 1800.000000000000
produit scalaire
1620000.0000000000
fin petit programme
[cros@gmfe3
Essai]$ more test.out2
début petit programme
fin petit
programme
[cros@gmfe3 Essai]$ more
JobName.o194
/home/cros/Essai
début du calcul à
Tue Mar 23 16:20:21 CET 2004
début petit programme
fin
petit programme
fin du calcul à Tue Mar 23 16:20:21 CET
2004
début du calcul à Tue Mar 23 16:20:21 CET
2004
fin du calcul à Tue Mar 23 16:20:21 CET 2004
Quelques remarques sur la compilation des codes :
Utilisation
de la librairie mathématique MKL
Intel (BLAS, LAPACK, FFT, ...)
:
Définition d'une variable d'environnement dans le
fichier .bash_profile (racine
du compte) :
export
MKLPATH=/opt/intel/mkl70/lib/32
Intérêt
: lors de mises à
jour ultérieures un seul fichier à modifier.
Compilation
du même programme avec utilisation de la librairie BLAS
d'INTEL :
ifort test.f
$MKLPATH/libmkl_lapack.a
$MKLPATH/libmkl_ia32.a -lguide
-lpthread -o test_seq
Compilation
du même programme avec utilisation de la librairie BLAS
d'INTEL
et des options d'optimisation (-tpp7
Intel Xeon, -xW pour activer la
vectorisation) :
ifort -O3
-tpp7 -xW test.f $MKLPATH/libmkl_lapack.a
$MKLPATH/libmkl_ia32.a -lguide
-lpthread -o test_seq
Attention
: si vous avez des erreurs à
l'édition de liens avec la librairie MKL,
consulter
Intel®
Math Kernel Library pour Linux User
Notes et vérifier qu'il
ne faut pas ajouter d'autres options.
Pour
les codes vectoriels, utiliser les options suivantes : -tpp7
-O3 -r8 -xW -ip -ipo -align -pad
ATTENTION
: Vérifier
toujours la cohérence et la précision des
résultats
obtenues suite à l'utilisation d'options
d'optimisation.
Exemple de Makefile pour code en Fortran.
Si
votre code utilise des librairies non standards (vos librairies,
ATLAS,...),
vous devez créer votre code en faisant
l'édition des liens de manière statique
(utiliser
l'option -static du
compilateur).
Inventaire
non exhaustif des options
pour vectoriser, paralléliser, optimiser les codes
à
l'aide des compilateurs Intel.
Page maintenue par Jean-Michel CROS (enseignant-chercheur).