Ceci est une ancienne révision du document !


Le Compilateur PGI

Compilation séquentielle

Versions disponibles :

  • 15.1
  • 11.2
  • 11.0 (obsolète)
  • 10.9
  • 10.8 (obsolète)
  • 10.6 (obsolète)
  • 10.5 (obsolète)
  • 10.4 (obsolète)
  • 10.3 (obsolète)
  • 10.1 (obsolète)
  • 9.0-2 (obsolète)

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

Compilation parallèle (OpenMPI)

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

Tests de performance

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       
documentation/tools/compilo/pgi.1430286630.txt.gz · Dernière modification : 2020/08/25 15:58 (modification externe)