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:insa2018gpu [2018/11/27 18:14]
equemene
formation:insa2018gpu [2018/12/09 10:42] (Version actuelle)
equemene [Implémentation C/OpenCL]
Ligne 1: Ligne 1:
-====== ​Session ​pratique du cours sur les GPU ======+====== ​INSA 2018 : session ​pratique du cours sur les GPU ======
  
-Session ​pratique ​du [[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​CoursINSA_GPU_181112.pdf|cours du 12/​11/​2018]] réalisé par Emmanuel Quémener.+Cette session ​pratique ​accompagne le [[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​CoursINSA_GPU_181112.pdf|cours du 12/​11/​2018]] réalisé par Emmanuel Quémener.
  
 ===== CQQCOQP : Comment ? Qui ? Quand ? Combien ? Où ? Quoi ? Pourquoi ? ===== ===== CQQCOQP : Comment ? Qui ? Quand ? Combien ? Où ? Quoi ? Pourquoi ? =====
Ligne 335: Ligne 335:
 ==== Exploitations de xGEMM  ==== ==== Exploitations de xGEMM  ====
  
-Le dossier ''​bench4gpu/​xGEMM''​ contient peu de fichiers dont les importants sont : un unique programme source, ''​xGEMM.c'',​ et un fichier de construction,​ ''​Makefile''​. C'est ce fichier qui va ''​construire''​ tous les exécutables d'un coup, à la fois pour les différentes implémentations de BLAS, mais aussi pour les deux précisions **SP** (simple précision sur 32 bits) et **DP** (double précision sur 64 bits).+Le dossier ''​bench4gpu/BLAS/​xGEMM''​ contient peu de fichiers dont les importants sont : un unique programme source, ''​xGEMM.c'',​ et un fichier de construction,​ ''​Makefile''​. C'est ce fichier qui va ''​construire''​ tous les exécutables d'un coup, à la fois pour les différentes implémentations de BLAS, mais aussi pour les deux précisions **SP** (simple précision sur 32 bits) et **DP** (double précision sur 64 bits).
  
 === Le source === === Le source ===
  
-Le programme source ''​xGEMM.c''​ a été conçu pour être polyvalent pour toute implémentation. Si vous l'​éditez,​ vous réalisez qu'il n'est pas si simple d'​avoir un programme qui s'​exécute indifféremment quelle que soit la librairie. Même si les appels sont comparables (même nombre d'​attributs dans les fonctions), leur nom change de librairie à librairie. Pour n'​avoir qu'un seul source, les directives sont largement exploitées. C'est donc le ''​Makefile''​ qui va permettre de ne compiler que telle ou telle portion du programme source.+Le programme source ''​xGEMM.c''​ a été conçu pour fonctionner avec n'​importe quelle ​implémentation. Si vous l'​éditez,​ vous réalisez qu'il n'est pas si simple d'​avoir un programme qui s'​exécute indifféremment quelle que soit la librairie. Même si les appels sont comparables (même nombre d'​attributs dans les fonctions), leur nom change de librairie à librairie. Pour n'​avoir qu'un seul source, les directives sont largement exploitées. C'est donc le ''​Makefile''​ qui va permettre de ne compiler que telle ou telle portion du programme source.
  
 <note warning> <note warning>
Ligne 821: Ligne 821:
 {{:​formation:​opencluster2_qpu1024.png?​direct&​400|}} {{:​formation:​opencluster2_qpu1024.png?​direct&​400|}}
  
-Cette seconde expérience montre de manière assez spectaculaire que les GPU ne montrent ​leur puissance "​que"​ pour des régimes de parallélisme élevé. Notons aussi que les implémentations sur CPU ont des performances très très disparates.+Cette seconde expérience montre de manière assez spectaculaire que les GPU ne dévoilent ​leur puissance "​que"​ pour des régimes de parallélisme élevé. Notons aussi que les implémentations sur CPU ont des performances très très disparates.
  
 <note warning> <note warning>
Ligne 988: Ligne 988:
   * ''​Pi_FP32_MWC_xPU_OpenCL_1_128_1_1_1000000000_Device0_InMetro_opencluster2''​   * ''​Pi_FP32_MWC_xPU_OpenCL_1_128_1_1_1000000000_Device0_InMetro_opencluster2''​
  
-Nous ppuvons ​ensuite exploiter l'​outil simple ''​gnuplot''​ pour afficher nos résultats :+Nous pouvons ​ensuite exploiter l'​outil simple ''​gnuplot''​ pour afficher nos résultats :
 <​code>​ <​code>​
 gnuplot gnuplot
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 //​Threads//​. Avec la commande suivante, avec 1024 Threads, nous plafonnons à **198 Gitops** :<​code>​python PiXPU.py -g CUDA -d 0 -b $((3584*4)) -e $((3584*4)) -f 1024 -l 1024 -r 3 -i 1000000000000</​code>​ La seule manière de retrouver une performance comparable en CUDA est de solliciter le second étage de parallélisme des GPU, les //​Threads//​. Avec la commande suivante, avec 1024 Threads, nous plafonnons à **198 Gitops** :<​code>​python PiXPU.py -g CUDA -d 0 -b $((3584*4)) -e $((3584*4)) -f 1024 -l 1024 -r 3 -i 1000000000000</​code>​
  
-Et ce n'est pas tout ! La distribtion ​Debian utilisée intègre par défaut un CUDA version 8. Pour l'​intégration d'​applications de //Deep Learning//, nous avons été obligé d'​intégrer un CUDA version 9. Nous pouvons charger l'​environnement pour exploiter cette version avec la commande :<​code>​module load cuda/​9.0</​code>​+Et ce n'est pas tout ! La distribution ​Debian utilisée intègre par défaut un CUDA version 8. Pour l'​intégration d'​applications de //Deep Learning//, nous avons été obligé d'​intégrer un CUDA version 9. Nous pouvons charger l'​environnement pour exploiter cette version avec la commande :<​code>​module load cuda/​9.0</​code>​
  
 En relançant le calcul précédent,​ nous parvenons à **271 Gitops** soit plus que l'​implémentation OpenCL. En relançant le calcul précédent,​ nous parvenons à **271 Gitops** soit plus que l'​implémentation OpenCL.
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://​bitbucket.org/​dpotter/​pkdgrav3/​|bitbucket]].+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://​bitbucket.org/​dpotter/​pkdgrav3/​|bitbucket]].
  
 Le code source est accessible par ''​git''​ à l'​adresse : https://​bitbucket.org/​dpotter/​pkdgrav3.git Le code source est accessible par ''​git''​ à l'​adresse : https://​bitbucket.org/​dpotter/​pkdgrav3.git
Ligne 1297: Ligne 1297:
  
 En cas de difficultés,​ appliquez la [[formation:​insa2018gpu:​insa2018pkdgrav4stretch|recette d'un PKDGRAV3 pour Debian Stretch]] ;-) En cas de difficultés,​ appliquez la [[formation:​insa2018gpu:​insa2018pkdgrav4stretch|recette d'un PKDGRAV3 pour Debian Stretch]] ;-)
 +
 +===== Conclusion =====
 +
 +Comme vous l'​aurez remarqué au cours de ces Travaux Pratiques, l'​exploitation peut être pleine de surprises : une métrologie pertinente ne peut se passer de la connaissance du matériel exploité.
 +
 +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]] CC BY-NC-SA 2018/11/26 15:37//  --- //​[[emmanuel.quemener@ens-lyon.fr|Emmanuel Quemener]] CC BY-NC-SA 2018/11/26 15:37//
formation/insa2018gpu.1543338863.txt.gz · Dernière modification: 2018/11/27 18:14 par equemene