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
Prochaine révision Les deux révisions suivantes
formation:etsn2022gpu [2022/07/21 11:20]
equemene
formation:etsn2022gpu [2022/08/05 11:50]
equemene [Cours associés à cette école]
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...</​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 donnés par Emmanuel Quémener.
Ligne 18: Ligne 18:
    
 C'est de prendre en main les GPU dans les machines, d'​appréhender la programmation en OpenCL et CUDA, de comparer les performances avec des CPU classiques par l'​intermédiaire de quelques exemples simples et des codes de production. C'est de prendre en main les GPU dans les machines, d'​appréhender la programmation en OpenCL et CUDA, de comparer les performances avec des CPU classiques par l'​intermédiaire de quelques exemples simples et des codes de production.
 +
 +===== Cours associés à cette école =====
 +
 +    * 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 et 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]]
  
 ===== Déroulement des sessions pratiques ===== ===== Déroulement des sessions pratiques =====
Ligne 44: Ligne 51:
    
   * Si vous n'​utilisez PAS le CBP, une machine relativement récente avec une GPU intégrée avec circuit Nvidia   * Si vous n'​utilisez PAS le CBP, une machine relativement récente avec une GPU intégrée avec circuit Nvidia
 +    * Pour les implémentations OpenCL sur CPU, sur 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]]
   * Si vous utilisez le CBP, un laptop disposant d'un écran assez confortable pour afficher une fenêtre de 1024x768, une connexion réseau la plus stable possible et la capacité d'y installer un logiciel adapté.   * Si vous utilisez le CBP, un laptop disposant d'un écran assez confortable pour afficher une fenêtre de 1024x768, une connexion réseau la plus stable possible et la capacité d'y installer un logiciel adapté.
  
Ligne 483: Ligne 491:
   - 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 498:
  
 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 519:
  
 <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 562:
 </​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.txt · Dernière modification: 2022/08/12 11:35 par equemene