Utilisation des compilateurs



Compilation de programmes
 
Fortran 77
  regatta sgi32 cluster
Compilateurs propriétaires xlf
f77
f77 pgf77
Compilateur public GNU g77 - g77
 
Fortran 90
  regatta sgi32 cluster
Compilateurs propriétaires xlf90 f90 pgf90
Compilateur public GNU - - -
 
Fortran 95
 
regatta sgi32 cluster
Compilateurs propriétaires xlf95 - -
Compilateur public GNU - - -
 
C
 
regatta sgi32 cluster
Compilateurs propriétaires xlc
cc
cc pgcc
Compilateur public GNU gcc gcc gcc
 
C++
 
regatta sgi32 cluster
Compilateurs propriétaires xlC CC pgCC
Compilateur public GNU g++ g++ g++
 
 
Fortran 77 parallèle (propriétaire)
  regatta sgi32 cluster
fortran77 + MPI 1 mpxlf - mpif77
fortran77 + OpenMP 2 xlf_r -qsmp[=omp] f77 -mp [-apo] -
fortran77 + MPI + OpenMP 3 mpxlf_r -qsmp[=omp] - -
fortran77 + PVM 1 - - pgf77 -lfpvm3 -lpvm3
 
Fortran 90 parallèle (propriétaire)
  regatta sgi32 cluster
fortran90 + MPI 1 mpxlf90 - mpif90
fortran90 + OpenMP 2 xlf90_r -qsmp[=omp] f90 -mp [-apo] -
fortran90 + MPI + OpenMP 3 mpxlf90_r -qsmp[=omp] - -
fortran90 + PVM 1 - - pgf90 -lfpvm3 -lpvm3
 
Fortran 95 parallèle (propriétaire)
  regatta sgi32 cluster
fortran95 + MPI 1 mpxlf95 - -
fortran95 + OpenMP 2 xlf95_r -qsmp[=omp] - -
fortran95 + MPI + OpenMP 3 mpxlf95_r -qsmp[=omp] - -
fortran95 + PVM 1 - - -
 
C parallèle (propriétaire)
  regatta sgi32 cluster
C + MPI 1 mpcc - mpicc
C + OpenMP 2 xlc_r -qsmp[=omp]
cc_r -qsmp[=omp]
cc -mp [-apo] - -
C + MPI + OpenMP 3 mpcc_r -qsmp[=omp] - -
C + PVM 1 - - pgcc -lpvm3
 
C++ parallèle (propriétaire)
  regatta sgi32 cluster
C++ + MPI 1 mpCC - mpiCC
C++ + OpenMP 2 xlC_r -qsmp[=omp] CC -mp [-apo] -
C++ + MPI + OpenMP 3 mpCC_r -qsmp[=omp] - -
C++ + PVM 1 - - pgCC -lpvm3
 
Exécution
 
Dans les exemples ci-dessous, a.out est le nom de l'exécutable, <n> est le nombre de tâches (ou processus) pour MPI/PVM ou threads pour OpenMP, hostfile est le fichier des noeuds et <rep> : le répertoire de travail
Fortran 77
  regatta sgi32 cluster
Exécution a.out a.out a.out
 
Fortran 90
 
regatta sgi32 cluster
Exécution a.out a.out a.out
 
Fortran 95
 
regatta sgi32 cluster
Exécution a.out - -
 
C
 
regatta sgi32 cluster
Exécution a.out a.out a.out
 
C++
 
regatta sgi32 cluster
Exécution a.out a.out a.out
 
Fortran 77 parallèle (propriétaire)
  regatta sgi32 cluster
Exécution pour MPI poe a.out -procs <n> - Pour MPICH :
mpirun -machinefile hostfile -np <n> a.out
Pour LAM/MPI :
lamboot -v hostfile
mpirun -np <n> a.out
wipe -v hostfile
Exécution pour PVM - - pvmd hostfile > /dev/null &
a.out
echo halt | pvm
Exécution pour OpenMP export XLSMPOPTS="parthds=<n>"
a.out
export OMP_NUM_THREADS=<n>
a.out
-
Exécution pour MPI + OpenMP poe a.out -procs <n> - -
 
Fortran 90 parallèle (propriétaire)
  regatta sgi32 cluster
Exécution pour MPI poe a.out -procs <n> - Pour MPICH :
mpirun -machinefile hostfile -np <n> a.out
Pour LAM/MPI :
lamboot -v hostfile
mpirun -np <n> a.out
wipe -v hostfile
Exécution pour PVM - - pvmd hostfile > /dev/null &
a.out
echo halt | pvm
Exécution pour OpenMP export XLSMPOPTS="parthds=<n>"
a.out
export OMP_NUM_THREADS=<n>
a.out
-
Exécution pour MPI + OpenMP poe a.out -procs <n> - -
 
Fortran 95 parallèle (propriétaire)
  regatta sgi32 cluster
Exécution pour MPI poe a.out -procs <n> - -
Exécution pour OpenMP export XLSMPOPTS="parthds=<n>"
a.out
- -
Exécution pour MPI + OpenMP poe a.out -procs <n> - -
 
C parallèle (propriétaire)
  regatta sgi32 cluster
Exécution pour MPI poe a.out -procs <n> - Pour MPICH :
mpirun -machinefile hostfile -np <n> a.out
Pour LAM/MPI :
lamboot -v hostfile
mpirun -np <n> a.out
wipe -v hostfile
Exécution pour PVM - - pvmd hostfile > /dev/null &
a.out
echo halt | pvm
Exécution pour OpenMP export XLSMPOPTS="parthds=<n>"
a.out
export OMP_NUM_THREADS=<n>
a.out
-
Exécution pour MPI + OpenMP poe a.out -procs <n> - -
 
C++ parallèle (propriétaire)
  regatta sgi32 cluster
Exécution pour MPI poe a.out -procs <n> - Pour MPICH :
mpirun -machinefile hostfile -np <n> a.out
Pour LAM/MPI :
lamboot -v hostfile
mpirun -np <n> a.out
wipe -v hostfile
Exécution pour PVM - - pvmd hostfile > /dev/null &
a.out
echo halt | pvm
Exécution pour OpenMP export XLSMPOPTS="parthds=<n>"
a.out
export OMP_NUM_THREADS=<n>
a.out
-
Exécution pour MPI + OpenMP poe a.out -procs <n> - -
 
Aide
 
MPI : Message Passing Interface
PVM : Parallel Virtual Machine
Programmation à mémoire distribuée par échange de message
Plusieus instances (ou tâches = unité de calcul) du même programme sont exécutées en parallèle. Chaque tâche exécute donc le même programme, en effectuant des calculs différents selon son numéro de tâche. Diverses fonctions de communication seront utilisées pour échanger des donnés entre les tâches.
Voici un cours MPI par l'exemple, écrit par Philippe Ris du laboratoire d'informatique du Littoral.
OpenMP Programmation à mémoire partagée
Une seule instance du programme est exécutée en parallèle sur plusieurs processeurs. Des directives insérées dans le programme permettent de gérer la distribution des calculs entre les processeurs.
Le programme commence son exécution avec un seul thread (thread = environnement d'une portion de programme séquentiel), appelé Maître. Le maître s'exécute séquentiellement jusqu'à ce qu'une directive séquentielle soit rencontrée. Des threads sont alors crées, et effectuent les calculs. A la fin de la section parallèle, les threads se synchronisent, et uniquement le maître continue. Cette opération peut-être réalisée plusieurs fois dans le programme. Les directives de parallélisation sont incluses directement dans le code. Si le code est porté sur un ordinateur ne gérant pas le parallélisme, les directives seront vues comme des commentaires.
Un bref tutoriel de Thomas Leduc.
Hybride (Mixte) Programmation hybride
Le programme est alors divisé en plusieurs tâches qui se répartissent sur les différents processeurs des différents noeuds : la communication inter-noeuds se fait par échange de messages alors que les tâches s'exécutant sur un même noeud se partagent la mémoire.
-qsmp ou -qsmp=auto Parallélisation automatique des boucle DO par ajout de directives de parallélisation dans le code source pour IBM
-qsmp=omp Activation des directives OpenMP (insérées par le programmeur) pour IBM
-apo ou -mp -apo Parallélisation automatique pour SGI
-mp Activation des directives OpenMP (insérées par le programmeur) pour SGI



[retour]