Vous êtes sur la page 1sur 37

Université Abdelmalek Saadi

Faculté des sciences et techniques


Al Hoceima

Filière :Master Systèmes Embarqués et robotique

Programmation sur les cartes graphiques


programmable (GPU), l’exploitation de la
puissance de calcul énorme des cartes
graphique et le langage CUDA pour les GPU
NVIDIA.
Demandé par : Présenté par :

• Mr. EL GHALABZOURI MOHAMED • BOUJNEN Amina


• ELBOYADDI Bilal
• MESSAOUDI Nabil

1
PLAN

1 INTRODUCTION

2 NVIDIA

3 LES CARTES GRAPHIQUES


4 GPU/CPU
5 LES NIVEAUX DU GPU

6 PROGRAMMATION DU GPU

7 CUDA
2
8 CONCLUSION
INTRODUCTION

3
LES MEILLEURES CARTES GRAPHIQUE DE
2019

4
1.NVIDIA
Nvidia est l'un des plus grands fournisseurs de
processeurs graphiques, de cartes graphiques
et de chipsets pour PC et consoles de jeux
(Saturn, Xbox, PlayStation 3). Il s'agit d'une
société dite fabless (qui conçoit, mais ne
fabrique pas), dont le siège est à Santa Clara en
Californie aux États-Unis. Nvidia conçoit des
circuits graphiques allant de la carte graphique
pour netbook (miniportable) aux très puissant
modèles
5
2.LES CARTES GRAPHIQUES
(CARTE VIDÉO)
un composant de l'unité centrale chargé de
l'affichage sur l'écran : Windows, les fenêtres, le
bureau...
• Les cartes graphiques puissantes ont pour rôle
également de gérer les affichages 3D (jeux vidéo).

6
LES COMPOSANTS DE CARTE
GRAPHIQUE
Processeur
graphique Mémoire vidéo

RAM DAC Bios

7
LES CONNECTEURS : 3 types d’interfaces

8
PROCESSEUR GRAPHIQUE ( GPU)

Il est chargé de traiter les


images en
fonction de la résolution et de la
profondeur de codage
sélectionnée.

il est parfois surmonté d'un


radiateur
et d'un ventilateur.

9
LA MÉMOIRE VIDÉO
La mémoire vidéo est chargée de conserver les images traitées
par le processeur graphique avant l'affichage.

Cette mémoire a pour but d’échanger un maximum


d’informations avec le GPU.

10
LA RAMDAC
La RAMDAC est un circuit spécialisé d'une carte vidéo chargé de
transformer les informations numériques en impulsions
analogiques et de les envoyer en direction de l'écran

11
LE BIOS VIDÉO
 C’est un petit programme
enregistré dans
une mémoire morte
(ROM) qui contient les
informations de la carte
graphique.
 chaque carte graphique
possède son
propre BIOS. Celui-ci est
spécifique
au fabricant de la carte.
Role - Le BIOS vidéo permet
de gérer
les composants de la carte
graphique
12
4.LES GPU ET LES CPU

Les applications actuelles qui doivent traiter de grandes


quantités de données prennent beaucoup de temps à
l'exécution . Ce temps pourrait être réduit en parallélisant les
opérations , dans le but d'effectuer des calculs normalement
effectués par le processeur central (CPU) de l'ordinateur.

Par exemple, pour des multiplications de matrices de taille 1000


x 1000, il s'agit de 1.000.000 de multiplications, sans rapport les
unes avec les autres, qui peuvent donc être parallélisées sans
problème.

13
NOTION DE GPU
Un processeur graphique (appelé GPU, pour Graphical
Processing Unit), constituant le cœur de la carte
graphique et chargé de traiter les images en fonction de
la résolution et de la profondeur de codage sélectionnée.
Il comporte des unités de calcul arithmétiques et logiques

14
NOTION DE CPU
 Le processeur (noté CPU, pour Central Processing Unit)
est un circuit électronique cadencé au rythme d'une
horloge interne, a pour mission de réaliser les différents
calculs inhérents au bon fonctionnement de
l'ordinateur

15
L’ARCHITECTURE DE CPU/PU

16
5.LES DIFFÉRENCE ENTRE GPU ET CPU

17
Au niveau du nombre de block

18
Au nivaux de complexité

19
POUR QUE LA VITESSE
D’EXÉCUTION SOIT PLUS RAPIDE
D’APRÈS LA VARIATION DE
COMPLEXITÉ
POURQUOI PAS ON UTILISE 2
CPU ?

20
Un GPU peut contenir plusieurs centaines de
cores, alors que les processeurs classiques
contiennent actuellement moins de 10 cores
21
22
5.LES NIVEAUX DE DÉVELOPPEMENT
DE GPU

Boite noire: utilisation du GPU à travers une librairie


que le prend en charge.

Conscience partielle du GPU: renseigne le compilateur sur


Comment déléguer certaines boucles ou données au GPU.

CUDA: écriture à la main des noyaux GPU (Kernel).

23
6.LA PROGRAMMATION DE
GPU
La programmation GPU, est
l'utilisation du processeur
graphique dans le but d'effectuer
des calculs le processeur central
(CPU) de l'ordinateur.
En raison de l'architecture
particulière des GPU, les calculs
pouvant être parallélisés, comme
par exemple l'addition ou la
multiplication de matrices, sont
exécutés beaucoup plus
rapidement par le GPU que par le
CPU.

24
LES LANGAGES UTILISÉ POUR
PROGRAMMER GPU

OpenCL, OpenGL,CUDA……..

25
CARTE GRAPHIQUE KHRONOS GROUP PROGRAMMER
PAR LANGUAGE OPENCL
26
CARTE GRAPHIQUE SILICON GRAPHICS PROGRAMMER27
PAR LANGUAGE OPENGL
CARTE GRAPHIQUE NVIDIA PARGRAMER PAR
LANGUAGE CUDA 28
7.CUDA

Généralités
 CUDA (Compute Unified Device Architecture) est une architecture
de programmation parallèle développée par NVIDIA. Elle étend le
langage C avec des fonctionnalités permettant la programmation sur
processeur graphique.

 La compilation d'un code CUDA nécessite l'emploi du compilateur


nvcc développé par NVIDIA. Ce compilateur s'utilise de la même
manière que GCC(GNU Compiler Collection ) :

nvcc code.cu -o executable

29
 Déroulement de l'exécution
Un programme tournant sur GPU
s'exécute en 5 étapes :
1) Déclaration et allocation de la mémoire
hôte et de la mémoire de la carte
graphique.
2) Initialisation de la mémoire hôte.
3) Transfert des données de la mémoire
hôte à la mémoire de la carte
graphique.
4) Exécution des fonctions GPU (kernels).
5) Retour des données à la mémoire hôte.

30
 Programmation

Programme CUDA

// HOST CODE: //DEVICE CODE:

Code CPU faisant appel au Code CUDA appelé


GPU KERNEL exécuté en
parallèle sur GPU

xxx.h xxx.cu
31
1. Sélection du processeur graphique:
La sélection du GPU utilisé par le programme s'effectuer
à l'aide de la fonction cudaSetDevice:
cudaError_t cudaSetDevice (int device)

32
2. Allocation en mémoire device et transfert des
données CPU => GPU

 L'allocation
de la mémoire s'exécute à l'aide de la
fonction cudaMalloc :
cudaError_t cudaMalloc (void ** devPtr, size_t size)

33
 Letransfert des données s'exécute via la fonction
cudaMemcpy :
cudaError_t cudaMemcpy (void * dst, const void * src,
size_t count,enum cudaMemcpyKind kind)

cudaMemcpyHostToDevice dans le cas d'un transfert CPU ==> GPU


cudaMemcpyDeviceToHost dans le cas d'un transfert GPU ==> CPU

34
3. Appel du kernel

 Le kernel est une fonction calcule sur le device (GPU).


kernel<<<Nombre_de_blocs,Nombre_de_threads_par_blc>>>(arg
uments);

35
4. Récupération des résultats et libération de la
mémoire

La récupération des résultats sur le CPU s'effectue


grâce à la fonction cudaMemcpy, avec la variable
kind mise à cudaMemcpyDeviceToHost.
Lorsque l'espace mémoire allouée sur le GPU peut
être libéré, un appel à cudaFree doit être exécuté:
cudaError_t cudaFree(void * devPtr)
devPtr contient l'adresse mémoire à libérer.

36
EXEMPLE

37

Vous aimerez peut-être aussi