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édentes Révision précédente
Prochaine révision
Révision précédente
formation:insa2020gpu [2020/12/04 12:14]
equemene [Intégration et exploitation du code GENESIS]
formation:insa2020gpu [2020/12/07 11:05] (Version actuelle)
equemene [Déroulement de la session]
Ligne 25: Ligne 25:
   * Exploration de "codes métier"​ : [[https://​www.tensorflow.org/​|TensorFlow]],​ [[https://​www.r-ccs.riken.jp/​labs/​cbrt/​|GENESIS]] et [[http://​www.gromacs.org/​|Gromacs]]   * Exploration de "codes métier"​ : [[https://​www.tensorflow.org/​|TensorFlow]],​ [[https://​www.r-ccs.riken.jp/​labs/​cbrt/​|GENESIS]] et [[http://​www.gromacs.org/​|Gromacs]]
  
 +De manière à disposer d'une trace de votre travail et de pouvoir l'​évaluer,​ il est demandé de rédiger un compte-rendu sur la base des questions posées. N'​hésitez pas à faire des copies d'​écran et à les intégrer dans votre rapport. Le rapport devra être rendu le vendredi suivant la seconde séance de travaux pratiques.
 ===== Démarrage de la session ===== ===== Démarrage de la session =====
    
Ligne 375: Ligne 376:
   * ''​Pi''​ : implémentation multiples d'un [[https://​fr.wikipedia.org/​wiki/​M%C3%A9thode_de_Monte-Carlo|Pi Monte Carlo]]   * ''​Pi''​ : implémentation multiples d'un [[https://​fr.wikipedia.org/​wiki/​M%C3%A9thode_de_Monte-Carlo|Pi Monte Carlo]]
   * ''​Splutter''​ : un modèle de ''​postillonneur mémoire'',​ très utile pour évaluer les //fonctions atomiques//   * ''​Splutter''​ : un modèle de ''​postillonneur mémoire'',​ très utile pour évaluer les //fonctions atomiques//
 +  * ''​TrouNoir''​ : un exemple de portage de code de 1994, porté en C en 1997 puis en Python/​OpenCL et Python/CUDA en 2019
  
 De tous ces programmes, seuls ceux présents dans ''​BLAS'',​ ''​NBody''​ et ''​Pi''​ seront exploités dans le cadre de ces travaux pratiques. De tous ces programmes, seuls ceux présents dans ''​BLAS'',​ ''​NBody''​ et ''​Pi''​ seront exploités dans le cadre de ces travaux pratiques.
Ligne 402: Ligne 404:
  
 Nous avons alors 12 exécutables de la forme ''​xGEMM_SP_<​version>''​ ou ''​xGEMM_DP_<​version>''​ :  ​ Nous avons alors 12 exécutables de la forme ''​xGEMM_SP_<​version>''​ ou ''​xGEMM_DP_<​version>''​ :  ​
-  * ''​fblas''​ utilisant la librairie ATLAS, pour CPU 
   * ''​openblas''​ utilisant la librairie OpenBLAS, pour CPU   * ''​openblas''​ utilisant la librairie OpenBLAS, pour CPU
   * ''​gsl''​ utilisant la librairie GSL (pour //GNU Scientific Librairies//​)   * ''​gsl''​ utilisant la librairie GSL (pour //GNU Scientific Librairies//​)
 +  * ''​fblas''​ utilisant la librairie OpenBLAS mais pour des appels fortran, pour CPU
   * ''​cublas''​ utilisant la librairie cuBLAS avec une gestion externe de la mémoire   * ''​cublas''​ utilisant la librairie cuBLAS avec une gestion externe de la mémoire
   * ''​thunking''​ utilisant la librairie cuBLAS avec une gestion interne de la mémoire   * ''​thunking''​ utilisant la librairie cuBLAS avec une gestion interne de la mémoire
Ligne 1447: Ligne 1449:
   * Comparez les résultats   * Comparez les résultats
     * Qu'​apporte le GPU comme gain de performance par rapport au processeur ?     * Qu'​apporte le GPU comme gain de performance par rapport au processeur ?
-</​note>​ 
- 
-==== Intégration et exploitation du code Gromacs ==== 
- 
-Nous allons tenter de reproduire une [[https://​www.nvidia.com/​en-us/​data-center/​gpu-accelerated-applications/​gromacs/​|expérience de Nvidia]] vantant l'​efficacité des GPGPU pour le logiciel de [[https://​fr.wikipedia.org/​wiki/​Dynamique_mol%C3%A9culaire|dynamique moléculaire]] [[http://​www.gromacs.org/​|Gromacs]]. 
- 
-<note warning>​Exercice #27 : appliquez la "​recette"​ de Nvidia 
-  * La documentation offre ceci : 
-    - récupérez le source 
-    - étendez l'​archive 
-    - créez un dossier pour la construction 
-    - passez dans ce dossier 
-    - préparez la compilation 
-    - compilez le code 
-    - installez les exécutables 
-  * A quelle étape est-ce que cela bloque ? Quel message avez-vous ? 
-  * Trouvez une méthode permettant de régler ce problème. 
-</​note>​ 
- 
-En cas de difficultés,​ appliquez la [[formation:​insa2018gpu:​insa2018gromacs4stretch|recette de Gromacs pour Debian Stretch]] ;-) 
- 
-<note warning>​Exercice #28 : Exécutez l'​exemple ''​1536'' ​ 
-  * Quel ''​Elapsed Time''​ avez-vous pour l'​exécution sur GPU (et CPU) ? 
-  * Quel ''​Elapsed Time''​ avez-vous pour l'​exécution uniquement sur CPU ? 
-  * Quel ratio de performances existe entre les deux exécutions ? 
 </​note>​ </​note>​
  
Ligne 1481: Ligne 1458:
 Le code source est accessible à l'​adresse : https://​www.r-ccs.riken.jp/​labs/​cbrt/​download/​genesis-version-1-5/ ​ Le code source est accessible à l'​adresse : https://​www.r-ccs.riken.jp/​labs/​cbrt/​download/​genesis-version-1-5/ ​
  
-<note warning>​Exercice #29 : Récupérez et compilez le code suivant la documentation fournie+<note warning>​Exercice #27 : Récupérez et compilez le code suivant la documentation fournie
   * Lisez la [[https://​www.r-ccs.riken.jp/​labs/​cbrt/​installation/​|documentation]] d'​installation   * Lisez la [[https://​www.r-ccs.riken.jp/​labs/​cbrt/​installation/​|documentation]] d'​installation
   * Placez les sources dans le dossier ''/​local/​$USER/​GENESIS''​ créé pour l'​occasion   * Placez les sources dans le dossier ''/​local/​$USER/​GENESIS''​ créé pour l'​occasion
Ligne 1494: Ligne 1471:
 Pour cela, l'​exemple de la base de [[https://​www.r-ccs.riken.jp/​labs/​cbrt/?​smd_process_download=1&​download_id=14619|tests de régression]]. Le test  ''​test_rpath_spdyn/​alad_water''​ a été modifié pour durer un peu plus longtemps à l'​exécution. Pour cela, l'​exemple de la base de [[https://​www.r-ccs.riken.jp/​labs/​cbrt/?​smd_process_download=1&​download_id=14619|tests de régression]]. Le test  ''​test_rpath_spdyn/​alad_water''​ a été modifié pour durer un peu plus longtemps à l'​exécution.
  
-De plus, **GENESIS** étant //​trhybride//,​ il est programmé pour se distribuer sur des machines indépendantes qui communiquent par //échanges de messages//. Le test ''​alad_water''​+De plus, **GENESIS** étant //​trhybride//,​ il est programmé pour se distribuer sur des machines indépendantes qui communiquent par //échanges de messages//. Le test  ​[[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​alad_water.tgz|''​alad_water''​]] exige, par construction de la simulation, quatre exécutions concurrentes lesquelles vont communiquer par MPI. Il faudra donc préfixer l'​exécutable de ''​mpirun -np 4''​ pour exécuter ces quatre tâches.
  
-<note warning>​Exercice #30 : Exécutez l'​exemple ''​alad_water''​ +De plus, ce programme est aussi parallélisé avec OpenMP : il va donc "​aussi"​ exploiter les coeurs disponibles. Le souci, c'est que, par défaut, il va lancer pour chaque tâche MPI autant de sous-tâches OpenMP que de coeurs (même "​virtuels"​) disponibles sur la machine. Ainsi, en exécutant l'​exemple ''​alad_water''​ sur une machine disposant de 8 coeurs Hyperthreadés (donc disposant au total de 16 coeurs logiques), il va lancer 4*16 soit 64 tâches pour seulement 8 "​vrais"​ coeurs : de quoi surcharger la machine. 
-  * Récupérez ​l'​exemple d'​exécution situé au lien ''​http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​alad_water.tgz''​ + 
-  * Décompressez l'​archive +Pour finir, dans comme ce programme est "​aussi"​ //​gépufié//​ (porté sur GPU), il risque d'y avoir un goulet d'​étranglement pour l'​accès au GPU pour les 64 tâches simultanées. Ainsi, les programmes "​fortement"​ parallélisés exigent de choisir judicieusement les différents paramètres de parallélisation tout comme nous avons vue que, pour les GPU, il fallait découper la tâche en un nombre optimal de sous-tâches. 
-  * Exécutez la commande ''/​usr/​bin/​time mpirun -np 4 /​local/​$USER/​GENESIS/​gpu-single/​bin/​spdyn inp''​+ 
 +<note warning>​Exercice #28 : Exécutez l'​exemple ''​alad_water''​ 
 +  * Récupérez ​[[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​alad_water.tgz|l'exemple d'exécution]] 
 +  * Décompressez l'​archive ​dans ''/​local/​$USER/​GENESIS''​ 
 +  ​* Exécutez le programme sur l'​exemple avec la version CPU  
 +    * ''/​usr/​bin/​time mpirun -np 4 /​local/​$USER/​GENESIS/​cpu-single/​bin/​spdyn inp''​ 
 +  * Observez pendant l'​exécution l'​activité des coeurs 
 +  * Notez le ''​Elapsed Time''​ et le ''​System Time''​ 
 +  * Effacez les résultats ''​test*''​ avec ''​rm test*''​  
 +  * Exécutez le programme sur l'​exemple avec la version GPU  
 +    ​* Exécutez la commande ''/​usr/​bin/​time mpirun -np 4 /​local/​$USER/​GENESIS/​gpu-single/​bin/​spdyn inp''​
   * Observez pendant l'​exécution l'​activité des coeurs et des GPU   * Observez pendant l'​exécution l'​activité des coeurs et des GPU
-  * Notez le ''​Elapsed Time''​ +  * Notez le ''​Elapsed ​Time''​ et le ''​System ​Time''​ 
-  * Déterminez ​du fait que le programme exécute ​+  * Effacez les résultats ''​test*''​ avec ''​rm test*''​  
 +  * Déterminez, sachant ​que 4 tâches MPI simultanément,​ combien de //threads// lancer 
 +  * Définissez ce nombre pour le système avec la fonction suivante : 
 +    * ''​export OPTIMAL_THREADS=<​MonCHoixJudicieux>''​ 
 +  * Exécutez la commande ''/​usr/​bin/​time mpirun -np 4 -x OMP_NUM_THREADS=$OPTIMAL_THREADS /​local/​$USER/​GENESIS/​cpu-single/​bin/​spdyn inp''​ 
 +  * Notez le ''​Elapsed Time''​ et le ''​System Time''​ 
 +  * Effacez les résultats ''​test*''​ avec ''​rm test*'' ​
   * Exécutez la commande ''/​usr/​bin/​time mpirun -np 4 -x OMP_NUM_THREADS=$OPTIMAL_THREADS /​local/​$USER/​GENESIS/​gpu-single/​bin/​spdyn inp''​   * Exécutez la commande ''/​usr/​bin/​time mpirun -np 4 -x OMP_NUM_THREADS=$OPTIMAL_THREADS /​local/​$USER/​GENESIS/​gpu-single/​bin/​spdyn inp''​
-  * +  * Notez le ''​Elapsed Time''​ et le ''​System Time''​ 
 +  * Concluez sur la pertinence de l'​utilisation de l'​option ''​-x OMP_NUM_THREADS=$OPTIMAL_THREADS''​
 </​note>​ </​note>​
 +
 +==== Intégration et exploitation du code Gromacs ====
 +
 +Nous allons tenter de reproduire une [[https://​www.nvidia.com/​en-us/​data-center/​gpu-accelerated-applications/​gromacs/​|expérience de Nvidia]] vantant l'​efficacité des GPGPU pour le logiciel de [[https://​fr.wikipedia.org/​wiki/​Dynamique_mol%C3%A9culaire|dynamique moléculaire]] [[http://​www.gromacs.org/​|Gromacs]].
 +
 +<note warning>​Exercice #29 : appliquez la "​recette"​ de Nvidia
 +  * La documentation offre ceci :
 +    - récupérez le source
 +    - étendez l'​archive
 +    - créez un dossier pour la construction
 +    - passez dans ce dossier
 +    - préparez la compilation
 +    - compilez le code
 +    - installez les exécutables
 +  * A quelle étape est-ce que cela bloque ? Quel message avez-vous ?
 +  * Trouvez une méthode permettant de régler ce problème.
 +</​note>​
 +
 +En cas de difficultés,​ appliquez la [[formation:​insa2020gpu:​insa2020gromacs4buster|recette de Gromacs pour Debian Buster]] ;-)
 +
 +<note warning>​Exercice #30 : Exécutez l'​exemple ''​1536'' ​
 +  * Quel ''​Elapsed Time''​ avez-vous pour l'​exécution sur GPU (et CPU) ?
 +  * Quel ''​Elapsed Time''​ avez-vous pour l'​exécution uniquement sur CPU ?
 +  * Quel ratio de performances existe entre les deux exécutions ?
 +</​note>​
 +
  
 ===== Conclusion ===== ===== Conclusion =====
Ligne 1513: Ligne 1533:
 L'​exploitation de "codes métier"​ vous aura aussi permis d'​entrevoir la difficulté d'​intégrer et d'​exécuter des programmes dans des environnements pourtant bien homogènes : toutes les stations exploitées ont exactement le même système d'​exploitation,​ [[developpement:​productions:​SIDUS|SIDUS]]. Les "​astuces"​ permettant de simplement pouvoir exécuter les programmes illustraient aussi que, sans expérience,​ difficile de s'en sortir. L'​exploitation de "codes métier"​ vous aura aussi permis d'​entrevoir la difficulté d'​intégrer et d'​exécuter des programmes dans des environnements pourtant bien homogènes : toutes les stations exploitées ont exactement le même système d'​exploitation,​ [[developpement:​productions:​SIDUS|SIDUS]]. Les "​astuces"​ permettant de simplement pouvoir exécuter les programmes illustraient aussi que, sans expérience,​ difficile de s'en sortir.
  
- --- //​[[emmanuel.quemener@ens-lyon.fr|Emmanuel Quemener]] 2020/01/01 19:44//+ --- //​[[emmanuel.quemener@ens-lyon.fr|Emmanuel Quemener]] 2020/12/05 23:24//
formation/insa2020gpu.1607080457.txt.gz · Dernière modification: 2020/12/04 12:14 par equemene