Utilisation des compilateurs
| Fin page | Compilation | Exécution | Aide |
| regatta | sgi32 | cluster | ||
| Compilateurs propriétaires | xlf f77 |
f77 | pgf77 | |
| Compilateur public GNU | g77 | - | g77 | |
| regatta | sgi32 | cluster | ||
| Compilateurs propriétaires | xlf90 | f90 | pgf90 | |
| Compilateur public GNU | - | - | - | |
| |
regatta | sgi32 | cluster | |
| Compilateurs propriétaires | xlf95 | - | - | |
| Compilateur public GNU | - | - | - | |
| |
regatta | sgi32 | cluster | |
| Compilateurs propriétaires | xlc cc |
cc | pgcc | |
| Compilateur public GNU | gcc | gcc | gcc | |
| |
regatta | sgi32 | cluster | |
| Compilateurs propriétaires | xlC | CC | pgCC | |
| Compilateur public GNU | g++ | g++ | g++ | |
| 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 | |
| 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 | |
| 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 | - | - | - | |
| 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 | |
| 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 | |
| regatta | sgi32 | cluster | ||
| Exécution | a.out | a.out | a.out | |
| |
regatta | sgi32 | cluster | |
| Exécution | a.out | a.out | a.out | |
| |
regatta | sgi32 | cluster | |
| Exécution | a.out | - | - | |
| |
regatta | sgi32 | cluster | |
| Exécution | a.out | a.out | a.out | |
| |
regatta | sgi32 | cluster | |
| Exécution | a.out | a.out | a.out | |
| 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> | - | - | |
| 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> | - | - | |
| 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> | - | - | |
| 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> | - | - | |
| 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> | - | - | |
| 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 |
|||
| Début page | Compilation | Exécution | Aide |