Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Dernière révision Les deux révisions suivantes | ||
formation:gpu4cbp [2023/03/13 08:54] equemene [Implémenter une fonction coûteuse, la Transformée de Fourier] |
formation:gpu4cbp [2023/03/13 08:58] equemene |
||
---|---|---|---|
Ligne 1365: | Ligne 1365: | ||
L'objectif est donc de reprendre notre exemple le plus abouti de notre DFT et d'y ajouter ces éléments. Pour cela, les programmes ''PiXPU.py'' et ''TrouNoir.py'' vont être explorés pour voir comment faire. | L'objectif est donc de reprendre notre exemple le plus abouti de notre DFT et d'y ajouter ces éléments. Pour cela, les programmes ''PiXPU.py'' et ''TrouNoir.py'' vont être explorés pour voir comment faire. | ||
- | <note warning>**Exercice #5.1 : exploration de PiXPU.py** | + | <note warning>**Exercice #6.1 : exploration de PiXPU.py** |
- Identifiez les lignes correspondant aux paramétrages par défaut | - Identifiez les lignes correspondant aux paramétrages par défaut | ||
- Identifiez les lignes sur la découverte des périphériques OpenCL | - Identifiez les lignes sur la découverte des périphériques OpenCL | ||
Ligne 1383: | Ligne 1383: | ||
- Sélectionner une exécution sous OpenCL ou CUDA avec l'option ''-g'' | - Sélectionner une exécution sous OpenCL ou CUDA avec l'option ''-g'' | ||
- | <note warning>**Exercice #5.2 : modification du programme ''MyDFT_6.py''** | + | <note warning>**Exercice #6.2 : modification du programme ''MyDFT_6.py''** |
- Supprimer la sélection initiale d'argument | - Supprimer la sélection initiale d'argument | ||
- Inhiber pour l'instant l'exécution des fonctions | - Inhiber pour l'instant l'exécution des fonctions | ||
Ligne 1424: | Ligne 1424: | ||
</code> | </code> | ||
- | <note warning>**Exercice #5.3 : modification du programme ''MyDFT_7.py''** | + | <note warning>**Exercice #6.3 : modification du programme ''MyDFT_7.py''** |
- Libérez pour l'appel à la fonction ''OpenCLDFT'' | - Libérez pour l'appel à la fonction ''OpenCLDFT'' | ||
- Rajoutez le test exploitant la sélection OpenCL ou CUDA | - Rajoutez le test exploitant la sélection OpenCL ou CUDA | ||
Ligne 1602: | Ligne 1602: | ||
<note warning> | <note warning> | ||
- | **Exercice #6.1 : éditez le source du programme ''xGEMM.c'' et repérez les éléments suivants** | + | **Exercice #7.1 : éditez le source du programme ''xGEMM.c'' et repérez les éléments suivants** |
* Identifiez dans ''Makefile'' quelles directives (précédées par ''-D'') sont associées aux différentes implémentations | * Identifiez dans ''Makefile'' quelles directives (précédées par ''-D'') sont associées aux différentes implémentations | ||
Ligne 1871: | Ligne 1871: | ||
<note warning> | <note warning> | ||
- | **Exercice #6.2 : lancez les ''xGEMM_<precision>_<implementation>'' avec une taille de 1000** | + | **Exercice #7.2 : lancez les ''xGEMM_<precision>_<implementation>'' avec une taille de 1000** |
* Variez le nombre d'itérations pour obtenir une durée d'exécution d'une dizaine de secondes ? | * Variez le nombre d'itérations pour obtenir une durée d'exécution d'une dizaine de secondes ? | ||
Ligne 1890: | Ligne 1890: | ||
<note warning> | <note warning> | ||
- | **Exercice #6.3 : lancez les programmes précédents pour différentes tailles** | + | **Exercice #7.3 : lancez les programmes précédents pour différentes tailles** |
* Diminuez la taille aux valeurs suivantes ''125'', ''250'', ''500'' et exécutez les programmes | * Diminuez la taille aux valeurs suivantes ''125'', ''250'', ''500'' et exécutez les programmes | ||
Ligne 1925: | Ligne 1925: | ||
L'objectif est de "jouer" le [[https://www.tensorflow.org/tutorials/images/cnn|tutoriel]] exploitant la base d'images CIFAR10 pour un apprentissage convolutif. | L'objectif est de "jouer" le [[https://www.tensorflow.org/tutorials/images/cnn|tutoriel]] exploitant la base d'images CIFAR10 pour un apprentissage convolutif. | ||
- | <note warning>**Exercice #7.1 :** | + | <note warning>**Exercice #8.1 :** |
- chargez l'environnement conda | - chargez l'environnement conda | ||
- préparez la variable d'environnement ''TIME'' | - préparez la variable d'environnement ''TIME'' | ||
Ligne 1948: | Ligne 1948: | ||
En regardant l'activité du GPU, il apparaît que le gain est substanciel par rapport à une "petite" configuration GPU. Cependant, la nature du réseau créé n'exploitait pas de manière optimale la GPU par rapport à la CPU. Une petite modification de notre réseau va permettre de mettre cela en évidence, en modifiant le nombre de poids d'une des couches neuronales. | En regardant l'activité du GPU, il apparaît que le gain est substanciel par rapport à une "petite" configuration GPU. Cependant, la nature du réseau créé n'exploitait pas de manière optimale la GPU par rapport à la CPU. Une petite modification de notre réseau va permettre de mettre cela en évidence, en modifiant le nombre de poids d'une des couches neuronales. | ||
- | <note warning>**Exercice #7.2 :** | + | <note warning>**Exercice #8.2 :** |
- changez **64** en **65536** dans ''model.add(layers.Dense(64, activation='relu'))'' | - changez **64** en **65536** dans ''model.add(layers.Dense(64, activation='relu'))'' | ||
- supprimez la référence à ''CUDA_VISIBLE_DEVICES'' avec ''export -n CUDA_VISIBLE_DEVICES'' | - supprimez la référence à ''CUDA_VISIBLE_DEVICES'' avec ''export -n CUDA_VISIBLE_DEVICES'' | ||
Ligne 1971: | Ligne 1971: | ||
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 #8.1 : Récupérez et compilez le code suivant la documentation fournie** | + | <note warning>**Exercice #9.1 : 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 1990: | Ligne 1990: | ||
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 #8.2 : Exécutez l'exemple ''alad_water''** | + | <note warning>**Exercice #9.2 : 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 2018: | Ligne 2018: | ||
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]]. | 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 #9.1 : appliquez la "recette" de Nvidia** | + | <note warning>**Exercice #10.1 : appliquez la "recette" de Nvidia** |
* La documentation offre ceci : | * La documentation offre ceci : | ||
- récupérez le source | - récupérez le source | ||
Ligne 2033: | Ligne 2033: | ||
En cas de difficultés, appliquez la [[formation:insa2020gpu:insa2020gromacs4buster|recette de Gromacs pour Debian Buster]] ;-) | En cas de difficultés, appliquez la [[formation:insa2020gpu:insa2020gromacs4buster|recette de Gromacs pour Debian Buster]] ;-) | ||
- | <note warning>**Exercice #9.2 : Exécutez l'exemple ''1536''** | + | <note warning>**Exercice #10.2 : 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 sur GPU (et CPU) ? | ||
* Quel ''Elapsed Time'' avez-vous pour l'exécution uniquement sur CPU ? | * Quel ''Elapsed Time'' avez-vous pour l'exécution uniquement sur CPU ? |