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 | ||
formation:insa2020gpu [2020/12/04 16:04] equemene [Intégration et exploitation du code GENESIS] |
formation:insa2020gpu [2020/12/07 11:05] 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 1500: | Ligne 1477: | ||
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. | 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. | ||
- | <note warning>Exercice #30 : Exécutez l'exemple ''alad_water'' | + | <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]] | * 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'' | * Décompressez l'archive dans ''/local/$USER/GENESIS'' | ||
Ligne 1523: | Ligne 1500: | ||
* Concluez sur la pertinence de l'utilisation de l'option ''-x OMP_NUM_THREADS=$OPTIMAL_THREADS'' | * 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 1530: | 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// |