Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| formation:insa2018gpu [2018/11/27 13:42] – equemene | formation:insa2018gpu [2018/12/09 09:42] (Version actuelle) – [Implémentation C/OpenCL] equemene | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== |
| - | Session | + | Cette session |
| ===== CQQCOQP : Comment ? Qui ? Quand ? Combien ? Où ? Quoi ? Pourquoi ? ===== | ===== CQQCOQP : Comment ? Qui ? Quand ? Combien ? Où ? Quoi ? Pourquoi ? ===== | ||
| Ligne 73: | Ligne 73: | ||
| * Récupérez le modèle du circuit de GPU, dans son nom étendu. | * Récupérez le modèle du circuit de GPU, dans son nom étendu. | ||
| * Récupérez sur le web les informations suivantes pour chaque GPU : | * Récupérez sur le web les informations suivantes pour chaque GPU : | ||
| - | * le nombre d' | + | * le nombre d' |
| * la fréquence de base des coeurs de calcul | * la fréquence de base des coeurs de calcul | ||
| * la fréquence de la mémoire | * la fréquence de la mémoire | ||
| Ligne 335: | Ligne 335: | ||
| ==== Exploitations de xGEMM ==== | ==== Exploitations de xGEMM ==== | ||
| - | Le dossier '' | + | Le dossier '' |
| === Le source === | === Le source === | ||
| - | Le programme source '' | + | Le programme source '' |
| <note warning> | <note warning> | ||
| Ligne 690: | Ligne 690: | ||
| <note warning> | <note warning> | ||
| - | **Exercice # : exploration du code OpenCL** | + | **Exercice #11 : exploration du code OpenCL** |
| * Repérez dans le programme source le **noyau** OpenCL réalisant le calcul | * Repérez dans le programme source le **noyau** OpenCL réalisant le calcul | ||
| Ligne 777: | Ligne 777: | ||
| <note warning> | <note warning> | ||
| - | **Exercice # : compilation et première exécution** | + | **Exercice #12 : compilation et première exécution** |
| * Compilez le programme avec la ligne de compilation précisée ci-dessus | * Compilez le programme avec la ligne de compilation précisée ci-dessus | ||
| Ligne 802: | Ligne 802: | ||
| <note warning> | <note warning> | ||
| - | **Exercice # : exécution sur tous les périphériques pour un PR=1** | + | **Exercice #13 : exécution sur tous les périphériques pour un PR=1** |
| * Exécutez le programme sur tous (GPU & CPU) avec un nombre d' | * Exécutez le programme sur tous (GPU & CPU) avec un nombre d' | ||
| Ligne 821: | Ligne 821: | ||
| {{: | {{: | ||
| - | Cette seconde expérience montre de manière assez spectaculaire que les GPU ne montrent | + | Cette seconde expérience montre de manière assez spectaculaire que les GPU ne dévoilent |
| <note warning> | <note warning> | ||
| - | **Exercice # : exécution sur tous les périphériques pour un PR=1024** | + | **Exercice #14 : exécution sur tous les périphériques pour un PR=1024** |
| * Exécutez le programme sur tous (GPU & CPU) avec un nombre d' | * Exécutez le programme sur tous (GPU & CPU) avec un nombre d' | ||
| Ligne 834: | Ligne 834: | ||
| Dans l' | Dans l' | ||
| - | Dans notre exemple, la GTX 1080 Ti dispose de 3584 //cudacores//. La Quadro K420 de 192 //cudacores//. Explorons ces périphériques avec des **PR** de 256x ces valeurs (nous sommes obligés de porter les itérations à 1000 milliards) : | + | Dans notre exemple, la GTX 1080 Ti dispose de 3584 //cuda cores//. La Quadro K420 de 192 //cuda cores//. Explorons ces périphériques avec des **PR** de 256x ces valeurs (nous sommes obligés de porter les itérations à 1000 milliards) : |
| ^ Périphérique | ^ Périphérique | ||
| Ligne 845: | Ligne 845: | ||
| <note warning> | <note warning> | ||
| - | **Exercice # : exécution sur tous les périphériques pour un PR optimal** | + | **Exercice #15 : exécution sur tous les périphériques pour un PR optimal** |
| - | * Reprenez les spécifications des GPU et isolez le nombre de //cudacores// | + | * Reprenez les spécifications des GPU et isolez le nombre de //cuda cores// |
| - | * Exécutez le programme sur les GPU avec un nombre d' | + | * Exécutez le programme sur les GPU avec un nombre d' |
| * Repérez les éléments de **durée**, **itops** et **inside** | * Repérez les éléments de **durée**, **itops** et **inside** | ||
| * Tracez l' | * Tracez l' | ||
| Ligne 872: | Ligne 872: | ||
| <note warning> | <note warning> | ||
| - | **Exercice # : exécution sur tous les périphériques pour un PR optimal en double précision** | + | **Exercice #16 : exécution sur tous les périphériques pour un PR optimal en double précision** |
| * Reprenez les expériences ci-dessus en précisant un calcul en double précision | * Reprenez les expériences ci-dessus en précisant un calcul en double précision | ||
| Ligne 965: | Ligne 965: | ||
| <note warning> | <note warning> | ||
| - | Exercice # : récupération des éléments dans le code source | + | Exercice #17 : récupération des éléments dans le code source |
| * Editez le code source avec l' | * Editez le code source avec l' | ||
| * Identifiez l' | * Identifiez l' | ||
| Ligne 982: | Ligne 982: | ||
| === Exploitation du programme === | === Exploitation du programme === | ||
| - | Ainsi, si nous voulons étudier la scalabilité du CPU en //Work items// de 1 à 16x le nombre de coeurs (ici 8 physiques) en exploitant l' | + | Ainsi, si nous voulons étudier la scalabilité du CPU en //Work items// de 1 à 16x le nombre de coeurs (ici 8 physiques) en exploitant l' |
| Dans notre cas, nous avons les deux fichiers suivants à exploiter : | Dans notre cas, nous avons les deux fichiers suivants à exploiter : | ||
| Ligne 988: | Ligne 988: | ||
| * '' | * '' | ||
| - | Nous ppuvons | + | Nous pouvons |
| < | < | ||
| gnuplot | gnuplot | ||
| Ligne 1003: | Ligne 1003: | ||
| <note warning> | <note warning> | ||
| - | Exercice # : étude de la scalabilité d'une implémentation CPU | + | Exercice #18 : étude de la scalabilité d'une implémentation CPU |
| * Identifiez avec '' | * Identifiez avec '' | ||
| * Exécutez le d'un PR=1 à un PR égal à 8x le nombre de coeurs physiques | * Exécutez le d'un PR=1 à un PR égal à 8x le nombre de coeurs physiques | ||
| Ligne 1009: | Ligne 1009: | ||
| </ | </ | ||
| - | Nous pouvons également " | + | Nous pouvons également " |
| python PiXPU.py -d 2 -b 3584 -e $((3584*8)) -s 128 -r 3 -i 100000000000 | python PiXPU.py -d 2 -b 3584 -e $((3584*8)) -s 128 -r 3 -i 100000000000 | ||
| </ | </ | ||
| Ligne 1019: | Ligne 1019: | ||
| <note warning> | <note warning> | ||
| - | Exercice # : étude de la scalabilité d'un GPU | + | Exercice #19 : étude de la scalabilité d'un GPU |
| * Identifiez avec '' | * Identifiez avec '' | ||
| * Exécutez-le d'un PR=< | * Exécutez-le d'un PR=< | ||
| Ligne 1032: | Ligne 1032: | ||
| La seule manière de retrouver une performance comparable en CUDA est de solliciter le second étage de parallélisme des GPU, les // | La seule manière de retrouver une performance comparable en CUDA est de solliciter le second étage de parallélisme des GPU, les // | ||
| - | Et ce n'est pas tout ! La distribtion | + | Et ce n'est pas tout ! La distribution |
| En relançant le calcul précédent, | En relançant le calcul précédent, | ||
| - | <note warning> | + | <note warning> |
| * Identifiez avec '' | * Identifiez avec '' | ||
| * Exécutez le avec le PR optimal des //Blocks// en CUDA | * Exécutez le avec le PR optimal des //Blocks// en CUDA | ||
| Ligne 1055: | Ligne 1055: | ||
| <note warning> | <note warning> | ||
| - | Exercice # : étude de valeurs particulières de PR | + | Exercice #21 : étude de valeurs particulières de PR |
| - | * Exécutez '' | + | * Exécutez '' |
| * Tracez les résultats avec GNUplot | * Tracez les résultats avec GNUplot | ||
| * Quels sont les PR avec les performances les plus faibles ? | * Quels sont les PR avec les performances les plus faibles ? | ||
| Ligne 1169: | Ligne 1169: | ||
| <note warning> | <note warning> | ||
| - | Exercice # : étude du source de '' | + | Exercice #22 : étude du source de '' |
| * Editez le programme avec gedit | * Editez le programme avec gedit | ||
| * Identifiez le bloc de noyaux OpenCL : lignes | * Identifiez le bloc de noyaux OpenCL : lignes | ||
| Ligne 1195: | Ligne 1195: | ||
| <note warning> | <note warning> | ||
| - | Exercice # : lancement de '' | + | Exercice #23 : lancement de '' |
| * Exécutez le programme pour tous les périphériques détectés | * Exécutez le programme pour tous les périphériques détectés | ||
| * Ajoutez l' | * Ajoutez l' | ||
| Ligne 1220: | Ligne 1220: | ||
| {{ : | {{ : | ||
| - | <note warning> | + | <note warning> |
| * Exécutez le programme pour le meilleur des CPU sur 8192 particules | * Exécutez le programme pour le meilleur des CPU sur 8192 particules | ||
| * Appuyez sur '' | * Appuyez sur '' | ||
| Ligne 1244: | Ligne 1244: | ||
| ==== Intégration et exploitation du code Gromacs ==== | ==== Intégration et exploitation du code Gromacs ==== | ||
| - | Nous allons, dans l' | + | Nous allons tenter de reproduire une [[https:// |
| - | <note warning> | + | <note warning> |
| * La documentation offre ceci : | * La documentation offre ceci : | ||
| - récupérez le source | - récupérez le source | ||
| Ligne 1259: | Ligne 1259: | ||
| </ | </ | ||
| - | En cas de difficultés, | + | En cas de difficultés, |
| - | <note warning> | + | <note warning>Exercice #26 : Exécutez l' |
| * Quel '' | * Quel '' | ||
| * Quel '' | * Quel '' | ||
| Ligne 1269: | Ligne 1269: | ||
| ==== Intégration et exploitation du code PKDGRAV3 ==== | ==== Intégration et exploitation du code PKDGRAV3 ==== | ||
| - | Le code PKDGRAV3 est une logiciel de simulation hydrodynamique à la large couverture médiatique en juin 2017. Présenté comme exploitant massivement les GPU, il est disponible sur [[https:// | + | Le code PKDGRAV3 est un logiciel de simulation hydrodynamique à la large couverture médiatique en juin 2017. Présenté comme exploitant massivement les GPU, il est disponible sur [[https:// |
| Le code source est accessible par '' | Le code source est accessible par '' | ||
| - | <note warning> | + | <note warning>Exercice #27 : Récupérez et compilez le code suivant la documentation fournie |
| * La documentation offre ceci : | * La documentation offre ceci : | ||
| - récupérez le source | - récupérez le source | ||
| Ligne 1290: | Ligne 1290: | ||
| L' | L' | ||
| - | <note warning> | + | <note warning>Exercice #28 : Exécutez l' |
| * Passez dans le dossier '' | * Passez dans le dossier '' | ||
| * Exécutez '' | * Exécutez '' | ||
| Ligne 1296: | Ligne 1296: | ||
| </ | </ | ||
| - | En cas de difficultés, | + | En cas de difficultés, |
| + | |||
| + | ===== Conclusion ===== | ||
| + | |||
| + | Comme vous l' | ||
| + | |||
| + | L' | ||
| --- // | --- // | ||