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
4. 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
6. 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
7. 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
8. 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
9. 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
10. 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
11. 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
12. 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
13. 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
14. 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
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