Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
formation:insa2020gpu [2020/12/04 12:14] equemene [Intégration et exploitation du code GENESIS] |
formation:insa2020gpu [2020/12/05 23:25] equemene |
||
---|---|---|---|
Ligne 1447: | Ligne 1447: | ||
* 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 1456: | ||
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 1469: | ||
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 1531: | ||
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// |