Ceci est une ancienne révision du document !
Versions disponibles :
Pour les clusters debian 7, il faut utiliser les modulefiles (consulter Environment Modules) pour charger l'environnement.
Pour les clusters centos 5.x, il faut ajouter la ligne suivante dans le script d'appel :
source /usr/local/modeles/pgi-No_de_version
avec No_de_version
= 9.0-2
à 11.2
.
Tableau récapitulatif :
Compilateur | version | commande(s) | chemin d'accès | modèle de configuration |
---|---|---|---|---|
PGI | 15.1 | pgf77, pgf90, pgf95, pgcc, pgCC | /softs/pgi/linux86-64/15.1/bin/ | /usr/local/modeles/pgi-15.1 |
modulefile : aucun | ||||
PGI | 11.2 | pgf77, pgf90, pgf95, pgcc, pgCC | /softs/pgi/linux86-64/11.2/bin/ | /usr/local/modeles/pgi-11.2 |
modulefile : aucun | ||||
PGI | 10.9 | pgf77, pgf90, pgf95, pgcc, pgCC | /softs/pgi/linux86-64/10.9/bin/ | /usr/local/modeles/pgi-10.9 |
modulefile : aucun | ||||
PGI | 9.0-2 | pgf77, pgf90, pgf95, pgcc, pgCC | /softs/pgi/linux86-64/9.0-2/bin/ | /usr/local/modeles/pgi-9.0-2 |
modulefile : aucun |
Toutes les versions d'openmpi n'ont pas été compilé avec les compilateurs PGI. Se référer au tableau pour les versions disponibles.
Pour les clusters debian 7, il faut utiliser les modulefiles (consulter Environment Modules) pour charger l'environnement.
Pour les clusters centos 5.x, il faut ajouter la ligne suivante dans le script d'appel :
source /usr/local/modeles/openmpi-No_de_version_openmpi-pgi-No_de_version
avec No_de_version_openmpi
et No_de_version
à trouver dans le tableau ci-dessous.
Tableau récapitulatif :
Compilateur | version | commande(s) | chemin d'accès | version d'openmpi | modèle de configuration |
---|---|---|---|---|---|
PGI | 11.2 | mpif77, mpif90, mpicc, mpiCC | /softs/openmpi-1.4.3-pgi-11.2/bin/ | 1.4.3 | /usr/local/modeles/openmpi-1.4.3-pgi-11.2 |
modulefile : aucun | |||||
PGI | 10.9 | mpif77, mpif90, mpicc, mpiCC | /softs/openmpi-1.4.3-pgi-10.9/bin/ | 1.4.3 | /usr/local/modeles/openmpi-1.4.3-pgi-10.9 |
modulefile : aucun | |||||
PGI | 9.0-2 | mpif77, mpif90, mpicc, mpiCC | /softs/openmpi-1.2.8-pgi-9.0-2/bin/ | 1.2.8 | /usr/local/modeles/openmpi-1.2.8-pgi-9.0-2 |
modulefile : aucun |
Des exemples type de codes source pour évaluer les capacité du compilateur PGI sont disponibles dans le répertoire /softs/pgi/common/EXAMPLES (des nouveaux exemples n'ont pas été fournis avec la version PGI 2015) :
e5-2670comp3:~> ls -l /softs/pgi/common/EXAMPLES dr-xr-xr-x 3 root root 4096 mars 9 2012 fftpde dr-xr-xr-x 4 root root 4096 mars 9 2012 linpack dr-xr-xr-x 2 root root 4096 mars 9 2012 matmul dr-xr-xr-x 8 root root 4096 mars 9 2012 MPI -r--r--r-- 1 root root 659 mars 9 2012 README
Pour tester ces benchmarks, il faut copier ces répertoires sur le compte utilisateur.
Exemplifions ici l'utilisation du benchmark matmul (multiplication de deux matrices) :
e5-2670comp3:~> ls -l /softs/pgi/common/EXAMPLES/matmul -r-xr-xr-x 1 root root 54 mars 9 2012 buildf77 -r-xr-xr-x 1 root root 51 mars 9 2012 buildf77mp -r-xr-xr-x 1 root root 62 mars 9 2012 buildf90 -r-xr-xr-x 1 root root 59 mars 9 2012 buildf90mp -r-xr-xr-x 1 root root 64 mars 9 2012 buildhpf -r--r--r-- 1 root root 2556 mars 9 2012 matmul.F -r--r--r-- 1 root root 6464 mars 9 2012 README
Le code source Fortran est contenu dans le fichier matmul.F, alors que les scripts build* contiennent la commande de compilation pour plusieurs modes (compilateurs pgf77, pgf90, pghpf avec ou sans auto-parallélisation/OpenMP).
e5-2670comp3:~> cat /softs/pgi/common/EXAMPLES/matmul/buildf77 pgf77 -fast -Mconcur -Minfo matmul.F -o matmul_f77 -V e5-2670comp3:~> cat /softs/pgi/common/EXAMPLES/matmul/buildf90 pgf90 -fast -Mconcur -Minfo -DPGF90 matmul.F -o matmul_f90 -V e5-2670comp3:~> cat /softs/pgi/common/EXAMPLES/matmul/buildf90mp pgf90 -fast -mp -Minfo -DPGF90 matmul.F -o matmul_f90mp -V e5-2670comp3:~> cat /softs/pgi/common/EXAMPLES/matmul/buildf77mp pgf77 -fast -mp -Minfo matmul.F -o matmul_f77mp -V e5-2670comp3:~> cat /softs/pgi/common/EXAMPLES/matmul/buildhpf pghpf -fast -Mautopar -Minfo -DPGF90 matmul.F -o matmul_hpf -V
Le lancement de ces scripts génère les exécutables correspondants : matmul_f77, matmul_f77mp, matmul_f90, matmul_f90mp, matmul_hpf.
Leur exécution peut alors être faite. Par défaut, on utilise un seul processeur. Le nombre de processeurs utilisés peut être modifié par :
- pour l'auto-parallelisation (matmul_f77, matmul_f90)
setenv NCPUS 2
- pour la parallelisation avec OpenMP (matmul_f77mp, matmul_f90mp)
setenv OMP_NUM_THREADS 2
- pour HPF : rajouter -pghpf -np 2 au moment de l'exécution.
Voici le résultat de ces exécutions pour 1 et 2 processeurs :
e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_f77 2.0000001E-03 0.0000000E+00 9.9999998E-03 9.9999998E-03 M = 200, N = 200, P = 200 MFLOPS = 7980.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv NCPUS 2 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_f77 4.0000002E-03 0.0000000E+00 2.0000000E-02 2.0000000E-02 M = 200, N = 200, P = 200 MFLOPS = 3990.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv NCPUS 1 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_f90 2.0000001E-03 0.000000 9.9999998E-03 9.9999998E-03 M = 200 , N = 200 , P = 200 MFLOPS = 7980.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv NCPUS 2 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_f90 4.0000002E-03 0.000000 2.0000000E-02 2.0000000E-02 M = 200 , N = 200 , P = 200 MFLOPS = 3990.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv NCPUS 1 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_f77mp 2.0000001E-03 0.0000000E+00 9.9999998E-03 9.9999998E-03 M = 200, N = 200, P = 200 MFLOPS = 7980.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv OMP_NUM_THREADS 2 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_f77mp 4.0000002E-03 0.0000000E+00 2.0000000E-02 2.0000000E-02 M = 200, N = 200, P = 200 MFLOPS = 3990.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv OMP_NUM_THREADS 1 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_f90mp 2.0000001E-03 0.000000 9.9999998E-03 9.9999998E-03 M = 200 , N = 200 , P = 200 MFLOPS = 7980.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv OMP_NUM_THREADS 2 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_f90mp 2.0000001E-03 0.000000 9.9999998E-03 9.9999998E-03 M = 200 , N = 200 , P = 200 MFLOPS = 7980.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv NCPUS 1 e5-2670comp3:~/Tests/tests_PGI/matmul> setenv OMP_NUM_THREADS 1 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_hpf 2.0000001E-03 0.000000 9.9999998E-03 9.9999998E-03 M = 200 , N = 200 , P = 200 MFLOPS = 7980.000 c(1,1) = 200.0000000000000 e5-2670comp3:~/Tests/tests_PGI/matmul> ./matmul_hpf -pghpf -np 2 4.0000002E-03 0.000000 2.0000000E-02 2.0000000E-02 M = 200 , N = 200 , P = 200 MFLOPS = 3990.000 c(1,1) = 200.0000000000000