Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
documentation:tools:testspgi [2015/04/28 14:31] – [Options de compilation] cicalugadocumentation:tools:testspgi [2020/08/25 15:58] – modification externe 127.0.0.1
Ligne 1: Ligne 1:
-====== Tests de fonctionnement et performance PGI et CUDA fortran ======+====== Tests de fonctionnement et performance PGI et CUDA Fortran ====== 
  
-{{INLINETOC}} 
 ===== PGI 15.1 sur les systèmes Debian ===== ===== PGI 15.1 sur les systèmes Debian =====
  
Ligne 14: Ligne 14:
 </code> </code>
  
-Cette commande redéfinit les variables d'environnement PATH, LD_LIBRARY_PATH et MANPATH pour contenir les chemins vers les répertoires des binaires PGI (compilateurs, debugger, profiler, …), des libraires PGI et respectivement des manuels en ligne d'utilisation.+Cette commande redéfinit les variables d'environnement PATH, LD_LIBRARY_PATH et MANPATH pour contenir les chemins vers les répertoires des binaires PGI (compilateurs, debugger, profiler, …), des libraires PGI et respectivement des manuels en ligne d'utilisation (les man pages).
  
 Pour vérifier que cette étape s'est bien effectuée, on peut par exemple chercher si la commande pgfortran est reconnue et voir si elle concerne bien la version 15.1 : Pour vérifier que cette étape s'est bien effectuée, on peut par exemple chercher si la commande pgfortran est reconnue et voir si elle concerne bien la version 15.1 :
Ligne 83: Ligne 83:
 | -c | Generate intermediate object file but does not attempt to link |  | -c | Generate intermediate object file but does not attempt to link | 
 | -g | Adds information for debugging to the object file and/or executable | | -g | Adds information for debugging to the object file and/or executable |
-| -I<directory> | Tells the preprocessor to search in directory for include or module files | +| -I <directory> | Tells the preprocessor to search in directory for include or module files | 
-| -L<directory> | Tells the linker to search in directory for libraries |+| -L <directory> | Tells the linker to search in directory for libraries |
 | -r8 | Promotes REALs from the default size of 4 bytes to 8 bytes | | -r8 | Promotes REALs from the default size of 4 bytes to 8 bytes |
 | -i8 | Promotes INTEGERs from the default size of 4 bytes to 8 bytes | | -i8 | Promotes INTEGERs from the default size of 4 bytes to 8 bytes |
Ligne 94: Ligne 94:
 | -Mneginfo | Instructs the compiler to report optimizations that are not made | | -Mneginfo | Instructs the compiler to report optimizations that are not made |
 | -mp | Enables parallelization via OpenMP directives | | -mp | Enables parallelization via OpenMP directives |
 +
 +
 +==== 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) :
 +
 +<code bash> 
 +e5-2670comp3:~> ls -l /softs/pgi/common/EXAMPLES
 +dr-xr-xr-x 3 root root 4096 mars    2012 fftpde
 +dr-xr-xr-x 4 root root 4096 mars    2012 linpack
 +dr-xr-xr-x 2 root root 4096 mars    2012 matmul
 +dr-xr-xr-x 8 root root 4096 mars    2012 MPI
 +-r--r--r-- 1 root root  659 mars    2012 README
 +</code>
 +
 +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) :
 +
 +<code bash> 
 +e5-2670comp3:~> ls -l /softs/pgi/common/EXAMPLES/matmul
 +-r-xr-xr-x 1 root root   54 mars    2012 buildf77
 +-r-xr-xr-x 1 root root   51 mars    2012 buildf77mp
 +-r-xr-xr-x 1 root root   62 mars    2012 buildf90
 +-r-xr-xr-x 1 root root   59 mars    2012 buildf90mp
 +-r-xr-xr-x 1 root root   64 mars    2012 buildhpf
 +-r--r--r-- 1 root root 2556 mars    2012 matmul.F
 +-r--r--r-- 1 root root 6464 mars    2012 README
 +</code>
 +
 +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).
 +
 +<code bash> 
 +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
 +</code>
 +
 +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)
 +<code bash> 
 +setenv NCPUS 2
 +</code>
 +
 +- pour la parallelisation avec OpenMP (matmul_f77mp, matmul_f90mp)
 +<code bash> 
 +setenv OMP_NUM_THREADS 2
 +</code>
 +
 +- 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 :
 +
 +<code bash> 
 +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       
 +</code>