PROGRAMMATION PARALLÈLE
AVEC « CUDA »
Présenté par:
•MATOUGAfaf
•KEBIR Nour El Houda
Module: Informatique parallèle et distribuée
1
PLAN DETRAVAIL:
 Introduction.
 CUDA.
 Domaine D’application.
 Le calcul parallèle avec CUDA
 GPU vs CPU.
 Fonctionnement.
 Structure du code.
 Compilation.
 Comparaison avec OpenMP.
 Conclusion.
2
INTRODUCTION:
Il existe plusieurs API pour le calcul parallèle telle que : OpenMP,
MPI, OpenCl et Cuda .
3
CUDA:
 Acronyme de Compute Unified Device Architecture.
 Développé par Nvidia pour ses cartes graphiques (GPU) .
 Utilisé pour le traitement massivement parallèle.
 Utilisable avec les langages : C, C++, Fortran. Et les
plateformes:Windows, Linux et MAC.
4
DOMAINE D’APPLICATION:
Traitement des images et vidéos.
Calcul matriciel.
L’ analyse sismique.
Simulation de dynamique moléculaire.
5
LE CALCUL PARALLÈLE AVEC CUDA:
 CUDA utilise un processeur graphique (GPU) pour exécuter des calculs
généraux à la place du processeur CPU.
 Un processeur graphique, ou GPU est un circuit intégré présent sur une
carte graphique et assurant les fonctions de calcul de l'affichage.
6
LE CALCUL PARALLÈLE AVEC CUDA:
GPUVS CPU:
• Les GPU ont beaucoup de petites unités arithmétiques et logiques (ALUs),
comparé à quelques plus grands sur le CPU.
• Cela permet de nombreux calculs parallèles, comme calculer une couleur
pour chaque pixel sur l'écran.
7
LE CALCUL PARALLÈLE AVEC CUDA:
FONCTIONNEMENT :
• Le GPU exécute un kernel (fonction) à la fois.
• Chaque Kernel a des blocs, qui sont des groupes
indépendants d'ALU.
• Chaque bloc est composé de threads, qui sont
le niveau de calcul
• Les threads dans chaque bloc travaillent généralement
ensemble pour calculer une valeur.
8
LE CALCUL PARALLÈLE AVEC CUDA:
STRUCTURE DU CODE :
 Un programme CUDA est constitué d'une partie qui s'exécute sur l'hôte
(CPU) et d'une partie qui s'exécute sur le device (GPU).
 Les phases séquentielles sont exécutées sur l'hôte/ host .
 Les phases massivement parallèles sont exécutées sur le périphérique.
9
LE CALCUL PARALLÈLE AVEC CUDA:
STRUCTURE DU CODE :
 La Runtime CUDA est une extension du langage C/C++. Cette extension inclut les
éléments suivants:
 Mots clés : ils permettent de définir par quel composant la fonction sera appelée,
ainsi où celle-ci sera appelée.
 __global__ : kernel exécuté sur le GPU mais appelé par le CPU
 __device__ : kernel exécuté et appelé par le GPU
 __host__ : fonction exécutée et appelée par le CPU.

Variables : elles permettent d'identifier le thread en cours d'exécution. Elles sont
de type dim3.
 blockIdx : index du bloc dans la grille
 threadIdx : index du thread dans le bloc
 blockDim : nombre de threads par bloc
10
LE CALCUL PARALLÈLE AVEC CUDA:
STRUCTURE DU CODE :
 Les fonctions dans CUDA :
 cudaMalloc(): pour définir la mémoire à allouer en mémoire globale.
 cudaFree() : pour liberer cette mémoire en mémoire globale.
 cudaMemcpy(): une fonction de copie de mémoire.
 cudaMemcpyHostToDevice : copie de l'hôte vers le périphérique
 cudaMemcpyHostToHost : copie de l'hôte vers l'hôte
 cudaMemcpyDeviceToHost : copie du périphérique vers l'hôte
 cudaMemcpyDeviceToDevice : copie du périphérique vers le périphérique.
11
LE CALCUL PARALLÈLE AVEC CUDA:
STRUCTURE DU CODE :
 Le lancement d'un kernel s'effectue de la maniére suivante :
 kernel<<< dimGrid, dimBlock ,[ dimMem ]>>>(params);
 Kernel: nom de la fonction
 dimGrid: taille de la grille (en nombre de blocs)
 dimBlock: taille de chaque blocs (en nombre de threads)
 dimMem (optienel): taille de la mémoire partagée allouée par bloc.
 Les biblioteques associées: cuda.h et cuda_runtime.h.
12
Kernel à exécuter
dans le GPU
Allocation des
matrices de données à
traiter par le GPU
Envoi de données
vers le GPU
exécution du Kernel
dans le GPU
13
LE CALCUL PARALLÈLE AVEC CUDA:
COMPILATION :
 La compilation est réalisée grâce au compilateur NVCC, fournie dans le toolkit de
CUDA.
 CUDA est prévu pour le compilateur deVisual Studio, sousWindows.
 Sous Linux : nvcc mon_essai.cu
14
COMPARAISON AVEC OPENMP:
 CUDA est spécifique.
 OpenMP est générale.
 CUDA est plus rapide.
 OpenMP est moins rapide.
 CUDA est rattaché a NVIDIA.
15
CONCLUSION:
CUDA permet d’accélérer le temps d’execution des instructions
grâce à la notion de parallélisme.
16
BIBLIOGRAPHIE:
 http://igm.univ-mlv.fr/~dr/XPOSE2011/CUDA/caracteristiques.html
 https://youtu.be/2EbHSCvGFM0
17
PARTIE PRATIQUE
SousWindows
18

CUDA

  • 1.
    PROGRAMMATION PARALLÈLE AVEC «CUDA » Présenté par: •MATOUGAfaf •KEBIR Nour El Houda Module: Informatique parallèle et distribuée 1
  • 2.
    PLAN DETRAVAIL:  Introduction. CUDA.  Domaine D’application.  Le calcul parallèle avec CUDA  GPU vs CPU.  Fonctionnement.  Structure du code.  Compilation.  Comparaison avec OpenMP.  Conclusion. 2
  • 3.
    INTRODUCTION: Il existe plusieursAPI pour le calcul parallèle telle que : OpenMP, MPI, OpenCl et Cuda . 3
  • 4.
    CUDA:  Acronyme deCompute Unified Device Architecture.  Développé par Nvidia pour ses cartes graphiques (GPU) .  Utilisé pour le traitement massivement parallèle.  Utilisable avec les langages : C, C++, Fortran. Et les plateformes:Windows, Linux et MAC. 4
  • 5.
    DOMAINE D’APPLICATION: Traitement desimages et vidéos. Calcul matriciel. L’ analyse sismique. Simulation de dynamique moléculaire. 5
  • 6.
    LE CALCUL PARALLÈLEAVEC CUDA:  CUDA utilise un processeur graphique (GPU) pour exécuter des calculs généraux à la place du processeur CPU.  Un processeur graphique, ou GPU est un circuit intégré présent sur une carte graphique et assurant les fonctions de calcul de l'affichage. 6
  • 7.
    LE CALCUL PARALLÈLEAVEC CUDA: GPUVS CPU: • Les GPU ont beaucoup de petites unités arithmétiques et logiques (ALUs), comparé à quelques plus grands sur le CPU. • Cela permet de nombreux calculs parallèles, comme calculer une couleur pour chaque pixel sur l'écran. 7
  • 8.
    LE CALCUL PARALLÈLEAVEC CUDA: FONCTIONNEMENT : • Le GPU exécute un kernel (fonction) à la fois. • Chaque Kernel a des blocs, qui sont des groupes indépendants d'ALU. • Chaque bloc est composé de threads, qui sont le niveau de calcul • Les threads dans chaque bloc travaillent généralement ensemble pour calculer une valeur. 8
  • 9.
    LE CALCUL PARALLÈLEAVEC CUDA: STRUCTURE DU CODE :  Un programme CUDA est constitué d'une partie qui s'exécute sur l'hôte (CPU) et d'une partie qui s'exécute sur le device (GPU).  Les phases séquentielles sont exécutées sur l'hôte/ host .  Les phases massivement parallèles sont exécutées sur le périphérique. 9
  • 10.
    LE CALCUL PARALLÈLEAVEC CUDA: STRUCTURE DU CODE :  La Runtime CUDA est une extension du langage C/C++. Cette extension inclut les éléments suivants:  Mots clés : ils permettent de définir par quel composant la fonction sera appelée, ainsi où celle-ci sera appelée.  __global__ : kernel exécuté sur le GPU mais appelé par le CPU  __device__ : kernel exécuté et appelé par le GPU  __host__ : fonction exécutée et appelée par le CPU.  Variables : elles permettent d'identifier le thread en cours d'exécution. Elles sont de type dim3.  blockIdx : index du bloc dans la grille  threadIdx : index du thread dans le bloc  blockDim : nombre de threads par bloc 10
  • 11.
    LE CALCUL PARALLÈLEAVEC CUDA: STRUCTURE DU CODE :  Les fonctions dans CUDA :  cudaMalloc(): pour définir la mémoire à allouer en mémoire globale.  cudaFree() : pour liberer cette mémoire en mémoire globale.  cudaMemcpy(): une fonction de copie de mémoire.  cudaMemcpyHostToDevice : copie de l'hôte vers le périphérique  cudaMemcpyHostToHost : copie de l'hôte vers l'hôte  cudaMemcpyDeviceToHost : copie du périphérique vers l'hôte  cudaMemcpyDeviceToDevice : copie du périphérique vers le périphérique. 11
  • 12.
    LE CALCUL PARALLÈLEAVEC CUDA: STRUCTURE DU CODE :  Le lancement d'un kernel s'effectue de la maniére suivante :  kernel<<< dimGrid, dimBlock ,[ dimMem ]>>>(params);  Kernel: nom de la fonction  dimGrid: taille de la grille (en nombre de blocs)  dimBlock: taille de chaque blocs (en nombre de threads)  dimMem (optienel): taille de la mémoire partagée allouée par bloc.  Les biblioteques associées: cuda.h et cuda_runtime.h. 12
  • 13.
    Kernel à exécuter dansle GPU Allocation des matrices de données à traiter par le GPU Envoi de données vers le GPU exécution du Kernel dans le GPU 13
  • 14.
    LE CALCUL PARALLÈLEAVEC CUDA: COMPILATION :  La compilation est réalisée grâce au compilateur NVCC, fournie dans le toolkit de CUDA.  CUDA est prévu pour le compilateur deVisual Studio, sousWindows.  Sous Linux : nvcc mon_essai.cu 14
  • 15.
    COMPARAISON AVEC OPENMP: CUDA est spécifique.  OpenMP est générale.  CUDA est plus rapide.  OpenMP est moins rapide.  CUDA est rattaché a NVIDIA. 15
  • 16.
    CONCLUSION: CUDA permet d’accélérerle temps d’execution des instructions grâce à la notion de parallélisme. 16
  • 17.
  • 18.