0% ont trouvé ce document utile (0 vote)
130 vues39 pages

Programmation et optimisation CUDA

Ce document présente la programmation GPU avec CUDA. Il explique ce qu'est une GPU, l'architecture CUDA et comment programmer avec CUDA. Il présente ensuite quelques applications et techniques d'optimisation CUDA avant de conclure sur les apports de CUDA.

Transféré par

Omaar Meejri
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
130 vues39 pages

Programmation et optimisation CUDA

Ce document présente la programmation GPU avec CUDA. Il explique ce qu'est une GPU, l'architecture CUDA et comment programmer avec CUDA. Il présente ensuite quelques applications et techniques d'optimisation CUDA avant de conclure sur les apports de CUDA.

Transféré par

Omaar Meejri
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

CUDA

Programmation GPU

Présentée par:
Encadrée par: Wajih jouini
Mme Yosr Slema Meysoun Dahmeni
Oussema haboubi
CONTENU
01 02 03
Programmation GPU CUDA Programmation CUDA

04 05 06
Applications Téchniques conclusion
d’optimization CUDA
01
Programmation GPU
GPU ?
(GRAPHICAL PROCESSING UNIT)
Processeurs multicœurs à hautes performances pouvant être utilisé
pour accélérer plusieurs d'applications.
GPU est installé dans un emplacement PCI Express 16x(lignes)
Circuit intégré présent sur une carte graphique et assurant les
fonctions de calcul de l’affichage.

marché ?
NVIDIA, Intel, AMD

PROGRAMMATION GPU ?
L'utilisation du processeur graphique dans le but
d'effectuer des calculs normalement effectués par le
processeur central (CPU).
Exemples GPUs

GeForce GTX 480 TESLA 2070


480 CUDA cores 448 CUDA cores
1,4 GHz 1,15 GHz
CPU vs GPU
GPU utilise plus de transistores que le CPU (ALUs) qui sont programmés par les API
graphiques (CUDA)
02
CUDA
CUDA ?
(Compute unified device architecture)

Architecture GPU d’NVIDIA (2007) pour ses cartes graphiques.


API pour calcul parallèle comme :OpenMp, MPI.
CUDA utilise un processeur graphique (GPU) pour executer des calculs généraux à la place du
processeur (CPU).
Langage de programmation pour le parallélisme de threads pour les GPU.
passerelle entre une application et son implémentation sur le GPU.

Extension de C/C++
Utilisable sur les plateformes: Windows, MAC, Linux.
Architecture CUDA
modèle d’exécution

L'hôte (Host) est le CPU disponible dans le système.


La mémoire système associée au processeur est appelée
mémoire hôte.

Le GPU est appelé périphérique (Device) et la mémoire


GPU est également appelée mémoire de périphérique.

Mémoire
hôte CPU

Mémoire
GPU périphérique
Architecture CUDA
Hiérarchie de parallélisme
GRID /BLOCK

• Le GPU est composé de plusieurs GRIDs.


• Chaque GRID est constitué de plusieurs
BLOCs.
• Un Bloc est une unité logique contenant un
nombre de THREADS qui peuvent coopérer.
• Plusieurs GRIDs peuvent s’exécuter à la
fois(en concurrence).
Architecture CUDA
Hiérarchie de parallélisme
KERNEL/THREAD

• 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.
• Tous THREADs exécute le même code.
• La partie parallèle des applications est exécutée K
fois en parallèle par K threads CUDA différents.
• Chaque THREAD possède un ID pour calculer
l’adresse mèmoire.
• Le GPU exécute un KERNEL à la fois .
• Les THREAD coopèrent en utilisant la mémoire
partagée et la synchronisation.
• Les THREADs dans différents BLOCs ne peuvent pas
coopérer.
Le KERNEL est une fonction
Architecture CUDA
Accès mémoire d’un KERNEL

THREAD

BLOC

DEVICE
Hiérarchie de mémoire
03
Programmation CUDA
Accès et utilisation du CUDA-GPUs
CUDA Toolkit et SDK de
développement
Accès au
• Inclut le compilateur CUDA
cluster C/C++ pour les GPU « nvcc ».
• Nécessite un compilateur
C/C++ pour le code CPU

Pilotes de périphériques
NVIDIA nécessaires pour
lancer des programmes

• Pour que les programmes


communiquent avec le
hardware
Exécution d’un programme CUDA(1)
Le code séquentiel s'exécute sur
le CPU

CPU

Un programme
séquentiel qui appelle
des noyaux parallèles PCI Express

GPU
Les noyaux parallèles sont
exécutés sur un ensemble de
threads parallèles sur le GPU
Exécution d’un programme CUDA(2)
Copiez les données d'entrée de Copiez les résultats de la
la mémoire de l'hôte vers la mémoire du périphérique vers la
mémoire de le périphérique, mémoire de l'hôte,
( appelée transfert hôte vers ( appelé transfert du
périphérique ). périphérique à hôte ).

1 2 3
Règles genérales:
Chargez le programme GPU et • Minimiser le transfert de
exécutez-le, en mettant en données entre CPU et
cache les données sur la puce GPU
pour des performances • Maximiser le nombre de
optimales. threads sur GPU
Eléments de CUDA(1)

• _global_: la fonction sera exécuté sur le GPU.


• _device_: la fonction sera exécutée sur le GPU .Elle peut être appelée à
partir d'une fonction de type _global_ ou _device_.
• _host_: la fonction sera exécutée sur le CPU. Elle peut être appelée à
partir du code hôte (code exécuté sur le CPU).
• _shared_ : declaration d’une variable dans la mémoire partagée, cette
mémoire est partagée entre les threads d'un bloc.
• _constant_ : dèclaration d’une variable dans la mémoire constante,
mémoire en lecture seule mise en cache sur l'appareil.
Eléments de CUDA(2)

• __syncthreads() : synchronisation de tous les threads d'un bloc et est


généralement utilisée pour s'assurer que tous les threads ont fini d'écrire
dans la mémoire partagée avant qu'un thread n'y lise.
• cudaMalloc: alloue de la mémoire sur le GPU.
• cudaMemcpy: copie des données entre le CPU et le GPU.
• cudaFree: libère de la mémoire allouée sur le GPU.
• cudaDeviceSynchronize: attend que toutes les tâches GPU soient
terminées avant de continuer.
CUDA C Variables intégrées
De type dim 3

threadIdx blockIDx blockDim gridDim


.{x,y,z} .{x,y,z} .{x,y,z} .{x,y,z}

ID thread ID bloc Nb threads Nb blocs


dans un dans un dans un dans un grid
bloc grid bloc
CUDA C
CUDA C Exemple de code :

Pour passer les param

kernel<<<nBlocks,nThreads>>>(args) :
Invoque une fonction KERNEL parallèle
dans un GRID de nBlocks dont chacun
instancie nThreads threads
concurrents.
Exemple_1

qsd

+
Exemple_2
Librairies Outils
04
Applications de CUDA
Applications

bioinformatique Chimie informatique


Applications

Modélisation de climat Finance informatique


Applications

Computer vision Machine learning


Applications

Jeux vidéos Dynamique de fluides


informatique
05
Techniques d’optimization
CUDA
Optimization avec CUDA

• Une augmentation de la vitesse de calcul : En distribuant les calculs sur plusieurs


cœurs de traitement, CUDA peut accélérer considérablement le temps nécessaire
pour exécuter des tâches complexes. Les techniques d'optimisation de CUDA
peuvent encore accélérer les calculs, en minimisant les temps d'accès à la
mémoire et en réduisant les temps de communication entre le CPU et le GPU.

• Une réduction de la consommation d'énergie : En distribuant les calculs sur


plusieurs cœurs, CUDA peut également réduire la consommation d'énergie
nécessaire pour effectuer des tâches intensives. Les techniques d'optimisation de
CUDA peuvent encore réduire cette consommation d'énergie, en réduisant les
temps d'accès à la mémoire et en minimisant les transferts de données entre le
CPU et le GPU.
Optimization avec CUDA

• Une amélioration de la scalabilité : Les techniques d'optimisation de CUDA


peuvent également améliorer la capacité de la plateforme à prendre en charge
des calculs complexes à grande échelle. En utilisant efficacement les threads et la
mémoire partagée, CUDA peut réduire le temps nécessaire pour exécuter des
tâches sur des ensembles de données plus grands.

• Une amélioration de la qualité de l'image : CUDA est également utilisé dans les
applications de traitement d'image. Les techniques d'optimisation de CUDA
peuvent améliorer la qualité de l'image en accélérant les calculs nécessaires pour
appliquer des filtres d'image, des algorithmes de segmentation et de
reconnaissance de formes.
06
conclusion
- Apporté des innovations significatives au monde
du calcul haute performance

- CUDA a simplifié le processus de développement


d'applications parallèles à usage général.

- Ces applications disposent désormais d'une


puissance de calcul suffisante pour obtenir des
résultats corrects en peu de temps.
Futur de la programmation GPU ?
Fourth-Gen Tensor Cores

Third-Gen RT Cores Les cœurs NVIDIA Tensor


activent et accélèrent les
NVIDIA a fait du ray tracing en technologies d'intelligence
temps réel une réalité avec artificielle transformatrices,
l'invention de Coeurs Ray Tracing notamment NVIDIA DLSS et la
(RT Cores), des cœurs de nouvelle fréquence d'images
traitement dédiés sur le GPU multipliant NVIDIA DLSS 3.
spécialement conçus pour faire
face aux charges de travail de ray
tracing gourmandes en
performances.
MERCI POUR
VOTRE
ATTENTION
QUESTIONS

Vous aimerez peut-être aussi