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:etsn2022gpu [2022/07/21 11:20]
equemene
formation:etsn2022gpu [2022/08/12 11:35] (Version actuelle)
equemene [Prérequis en matériel, logiciel et humain]
Ligne 1: Ligne 1:
 ====== ETSN 2022 : les GPU, la technologie disruptive du 21ème siècle ====== ====== ETSN 2022 : les GPU, la technologie disruptive du 21ème siècle ======
  
-<note warning>En construction</​note>​+<note warning>Contient certainement encore un nombre non négligeable de coquilles... Merci de votre compréhension. Mon adresse de courriel est en bas pour vous permettre d'en assurer l'​amélioration !</​note>​
  
-Cette session de travaux pratiques se compose de 7 séances de 1h30 du workshop [[https://​conferences.cirm-math.fr/​2842.html|Les GPU, technologie disruptive du 21ème siècle]]. Elle s'​accompagne de 5 cours donnés par Emmanuel Quémener.+Cette session de travaux pratiques se compose de 7 séances de 1h30 du workshop [[https://​conferences.cirm-math.fr/​2842.html|Les GPU, technologie disruptive du 21ème siècle]]. Elle s'​accompagne de 5 cours suivants ​donnés par Emmanuel Quémener. 
 + 
 +    * Cours 1 & 2 : [[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​ETSN_IntroductionGPU_Cours12.pdf|Les GPU : technologie disruptive du 21e siècle]] 
 +    * Cours 3 : [[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​ETSN_PortageEtMetrologie_Cours3.pdf|Portage d'un vieux code, l'​occasion d'un retour sur 40 ans d'​informatique]] 
 +    * Cours 4 : [[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​ETSN_MetrologieGPU_Cours4.pdf|Métrologie d'​applications]] 
 +    * Cours 5 : [[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​ETSN_CodesMatrices_Cours5.pdf|Emergence de Codes "​Matrices"​ et conclusion]]
  
 ===== CQQCOQP : Comment ? Qui ? Quand ? Combien ? Où ? Quoi ? Pourquoi ? ===== ===== CQQCOQP : Comment ? Qui ? Quand ? Combien ? Où ? Quoi ? Pourquoi ? =====
Ligne 28: Ligne 33:
   * Un intermède Python/CUDA pour tester //​l'​autre//​ implémentation sur GPU   * Un intermède Python/CUDA pour tester //​l'​autre//​ implémentation sur GPU
   * La réalisation et le portage d'une transformée de Fourier discrète   * La réalisation et le portage d'une transformée de Fourier discrète
-  * Choix du périphérique en Pythonsa programmation +  * Choix du périphérique en Python ​et sa programmation 
-  * Utilisation des librairies externesexemple avec xGEMM+  * Utilisation des librairies externes ​exemple avec xGEMM
   * Intégration de "codes métier"​ : [[https://​www.tensorflow.org/​|TensorFlow]],​ [[https://​www.r-ccs.riken.jp/​labs/​cbrt/​|GENESIS]] et [[http://​www.gromacs.org/​|Gromacs]]   * Intégration de "codes métier"​ : [[https://​www.tensorflow.org/​|TensorFlow]],​ [[https://​www.r-ccs.riken.jp/​labs/​cbrt/​|GENESIS]] et [[http://​www.gromacs.org/​|Gromacs]]
   * Expoitation de codes //​Matrices//​ pour la métrologie ​   * Expoitation de codes //​Matrices//​ pour la métrologie ​
Ligne 48: Ligne 53:
 === Prérequis pour le logiciel === === Prérequis pour le logiciel ===
  
-  * Si vous n'​utilisez pas le CBP, un OS GNU/Linux correctement configuré pour la GPU embarquée avec tous les composants Nvidia, OpenCL, PyOpenCL, PyCUDA. A cela s'​ajoute un navigateur pour voir cette page ainsi qu'un traitement de texte pour rédiger le compte-rendu de ces séances.+  * Si vous n'​utilisez pas le CBP, un OS GNU/Linux correctement configuré pour la GPU embarquée avec tous les composants Nvidia, OpenCL, PyOpenCL, PyCUDA
 +    * Un ''​apt install time pciutils clinfo nvidia-opencl-icd nvidia-smi pocl-opencl-icd python3-pyopencl python-pyopencl-doc python-pycuda-doc python3-pycuda''​ devrait être suffisant comme prérequis pour une machine avec un circuit Nvidia pas trop ancien 
 +    * Pour les implémentations OpenCL sur CPU sur Debian ou Ubuntu, essayez d'​installer celle d'​[[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​software/​opencl-1.2-intel-cpu_6.4.0.25-2_amd64.deb|Intel]] et celle d'​[[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​software/​amd-opencl-icd_15.12-2~bpo8+3_fixed.deb|AMD]]. A votre environnement ​s'​ajoute un navigateur pour voir cette page ainsi qu'un traitement de texte pour rédiger le compte-rendu de ces séances. ​
   * Si vous utilisez le CBP, il faut avoir installé le logiciel [[https://​wiki.x2go.org/​doku.php/​download:​start|x2goclient]] suivant les recommandations de la [[ressources:​x2go4cbp|documentation du CBP]]. Il est recommandé d'​exploiter le traitement de texte et le navigateur dans la session distante.   * Si vous utilisez le CBP, il faut avoir installé le logiciel [[https://​wiki.x2go.org/​doku.php/​download:​start|x2goclient]] suivant les recommandations de la [[ressources:​x2go4cbp|documentation du CBP]]. Il est recommandé d'​exploiter le traitement de texte et le navigateur dans la session distante.
  
Ligne 69: Ligne 76:
   * Input and Output Devices : Périphériques d'​Entrée et Sortie   * Input and Output Devices : Périphériques d'​Entrée et Sortie
  
-Les GPU sont généralement considérés comme des périphériques d'​Entrée/​Sortie. Comme la plupart des périphériques installés dans les machines, ​ils exploitent un bus d'​interconnexion [[https://​en.wikipedia.org/​wiki/​Conventional_PCI|PCI]] ou [[https://​en.wikipedia.org/​wiki/​PCI_Express|PCI Express]].+Les GPU sont généralement considérés comme des périphériques d'​Entrée/​Sortie. Comme la plupart des périphériques installés dans les machines, ​elles exploitent un bus d'​interconnexion [[https://​en.wikipedia.org/​wiki/​Conventional_PCI|PCI]] ou [[https://​en.wikipedia.org/​wiki/​PCI_Express|PCI Express]].
  
 Pour récupérer la liste des périphériques PCI, utilisez la commande ''​lspci -nn''​. A l'​intérieur d'une longue liste apparaissent quelques périphériques **VGA** ou **3D**. Ce sont les périphériques GPU ou GPGPU. Pour récupérer la liste des périphériques PCI, utilisez la commande ''​lspci -nn''​. A l'​intérieur d'une longue liste apparaissent quelques périphériques **VGA** ou **3D**. Ce sont les périphériques GPU ou GPGPU.
Ligne 351: Ligne 358:
 La (presque) totalité des outils exploités par le CBP pour comparer les CPU et les GPU se trouve dans le projet [[https://​forge.cbp.ens-lyon.fr/​redmine/​projects/​bench4gpu|bench4gpu]] du Centre Blaise Pascal. La (presque) totalité des outils exploités par le CBP pour comparer les CPU et les GPU se trouve dans le projet [[https://​forge.cbp.ens-lyon.fr/​redmine/​projects/​bench4gpu|bench4gpu]] du Centre Blaise Pascal.
  
-La récupération des sources est libre et se réalise par l'​outil subversion :<​code>​+La récupération des sources est libre et se réalise par l'​outil ​**subversion** (//NDLR : oui, je sais tout le monde est passé à GIT mais ce projet a plus de 10 ans//​) ​:<​code>​
 svn checkout https://​forge.cbp.ens-lyon.fr/​svn/​bench4gpu/​ svn checkout https://​forge.cbp.ens-lyon.fr/​svn/​bench4gpu/​
 </​code>​ </​code>​
Ligne 366: Ligne 373:
   * ''​ETSN''​ : les programmes //​corrigés//​ associés à cette école ETSN 2022   * ''​ETSN''​ : les programmes //​corrigés//​ associés à cette école ETSN 2022
  
-De tous ces programmes, seuls ceux présents dans ''​BLAS'',​ ''​NBody'',​ ''​Pi''​ et ''​ETSN''​ seront exploités dans le cadre de ces travaux pratiques. Il est quand même conseillé de ne pas se précipiter sur les corrigés situés dans ETSN pour le déroulement de ces séances. Le //no pain, no gain// s'​applique aussi dans l'​apprentissage en informatique.+De tous ces programmes, seuls ceux présents dans ''​BLAS'',​ ''​NBody'',​ ''​Pi''​ et ''​ETSN''​ seront exploités dans le cadre de ces travaux pratiques. Il est quand même conseillé de ne pas se précipiter sur les corrigés situés dans ETSN pour le déroulement de ces séances. Le //no pain, no gain// s'​applique ​//aussi// dans l'​apprentissage en informatique.
  
 ===== Première exploration de l'​association Python et OpenCL ===== ===== Première exploration de l'​association Python et OpenCL =====
Ligne 483: Ligne 490:
   - une estimation de la vitesse d'​exécution en OpenCL pour différentes tailles   - une estimation de la vitesse d'​exécution en OpenCL pour différentes tailles
   - un ratio de performances entre mode natif et mode OpenCL   - un ratio de performances entre mode natif et mode OpenCL
 +  - la libération des mémoires réservées dans le bloc ''​OpenCLAddition''​
  
 Deux exécutions consécutives sur GPU et CPU permettront ainsi de visualiser le gain entre une exécution sur CPU et GPU. Deux exécutions consécutives sur GPU et CPU permettront ainsi de visualiser le gain entre une exécution sur CPU et GPU.
Ligne 489: Ligne 497:
  
 Le temps d'​exécution se basera sur un mécanisme très simple : l'​exploitation de 2 //timers//, le premier avant l'​exécution,​ le second après l'​exécution. Ce //timer// est la fonction ''​time()''​ de la librairie standard ''​time''​. ​ Le temps d'​exécution se basera sur un mécanisme très simple : l'​exploitation de 2 //timers//, le premier avant l'​exécution,​ le second après l'​exécution. Ce //timer// est la fonction ''​time()''​ de la librairie standard ''​time''​. ​
 +
 +Pour libérer l'​espace réservé sur le périphérique avec les opérations ''​Buffer'',​ il suffit d'​appeler la fonction ''​.release()''​ en suffixe de la variable. ​
  
 Par exemple, à la commande ''​PYOPENCL_CTX=0:​0 ./​MySteps_1.py 1048576'',​ l'​exécution répond :<​code> ​ Par exemple, à la commande ''​PYOPENCL_CTX=0:​0 ./​MySteps_1.py 1048576'',​ l'​exécution répond :<​code> ​
Ligne 508: Ligne 518:
  
 <note warning>​**Exercice #2.3 : instrumentation minimale du code** <note warning>​**Exercice #2.3 : instrumentation minimale du code**
-  - Modifiez ''​MySteps_1.py''​ suivant les spécifications ci-dessus+  - Modifiez ''​MySteps_1.py''​ suivant les spécifications ci-dessus
   - Exécutez le programme pour des tailles de vecteurs de **2^15** à **2^30**   - Exécutez le programme pour des tailles de vecteurs de **2^15** à **2^30**
     - sur la GPU la plus //​performante//​     - sur la GPU la plus //​performante//​
Ligne 551: Ligne 561:
 </​code>​ </​code>​
  
-Son origine était assez explicite avec le **MEM_OBJECT_ALLOCATION_FAILURE** renseignant sur un problème mémoire ou plus précisément sur un dépassement de capacité d'​allocation mémoire sur le périphérique. Dans cet exemple, la GPU sélectionnée est une **GTX Titan** avec 6GB de RAM. Notre programme planet dès que la taille des vecteurs dépasse 2^29 éléments soit 536870912. Si nous définissons 3 vecteurs composés de 536870912 flottants sur 32 bits, cela représente tout juste 6 GiB mais la GPU ne dispose que d'​exactement 6083 MiB. Il en manque à peine, mais il en manque !+Son origine était assez explicite avec le **MEM_OBJECT_ALLOCATION_FAILURE** renseignant sur un problème mémoire ou plus précisément sur un dépassement de capacité d'​allocation mémoire sur le périphérique. Dans cet exemple, la GPU sélectionnée est une **GTX Titan** avec 6GB de RAM. Notre programme planet dès que la taille des vecteurs dépasse 2^29 éléments soit 536870912. Si nous définissons 3 vecteurs composés de 536870912 flottants sur 32 bits, cela représente tout juste 6 GiB mais la GPU ne dispose que d'​exactement 6083 MiB. Il en manque à peine, mais il en manque ​suffisamment ​!
  
 Pour la CPU en implémentation Intel : Pour la CPU en implémentation Intel :
formation/etsn2022gpu.1658395221.txt.gz · Dernière modification: 2022/07/21 11:20 par equemene