La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Traitement de linformation Programmation massivement parallèle Arrière plan: Nvidia.frNvidia.fr Benoît Pencrec'h.

Présentations similaires


Présentation au sujet: "Traitement de linformation Programmation massivement parallèle Arrière plan: Nvidia.frNvidia.fr Benoît Pencrec'h."— Transcription de la présentation:

1 Traitement de linformation Programmation massivement parallèle Arrière plan: Nvidia.frNvidia.fr Benoît Pencrec'h

2 1 - Convolution matricielle et processeur graphique : un couple idéal Convolution et complexité arithmétique Les processeurs graphiques, une architecture taillée pour le calcul Un couple permettant une exécution hautement parallèle 2 - Implémentations et optimisations Programmer sur GPU avec lAPI Cuda Convolution 2D Convolution 2D optimisée Convolution 3D, une histoire de boucle… 3 - Résultats : qualité, performances et limites Qualité des résultats Benchmark des convolutions 2D et 3D Les transferts mémoires, goulot détranglement Un autre moyen dexécuter la convolution : Fourrier 09/03/20142Benoît Pencrec'h

3 Convolution et complexité arithmétique Convolution matricielle et processeur graphique : un couple idéal La convolution mesure la quantité de chevauchement entre deux fonctions Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h3 Pour des termes de type discret elle sexprime La convolution dun pixel N dune image I par un noyau K de rayon R sexprime :

4 Convolution et complexité arithmétique Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h4 Noyau Schéma : université Harvay Mudduniversité Harvay Mudd

5 Convolution et complexité arithmétique Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h5 Pour une image de taille m. m et un noyau de taille n. n, la convolution demande n². m² multiplications En 3D, la convolution requiert n³. m³ multiplications ! 30 s pour convoluer une image Px (noyau 9.9) 7 min 30 s pour convoluer un volume Px (noyau 3.3.3)

6 Convolution et complexité arithmétique Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h6 Il existe une solution pour diminuer le nombre de calculs : abaisse le nombre de multiplications à 2n.m² en 2D et 3n.m³ en 3D la séparation du noyau Schémas : réalisation personnelle

7 Les processeurs graphiques, une architecture taillée pour le calcul Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h7 Habituellement destinés aux rendus de scènes 3D (jeux vidéos, CAO, …) Gère moins dinstructions que le CPU mais possède une puissance de calcul brute bien plus importante Autrefois spécialisé dans la 3D, ils est devenu universel

8 Les processeurs graphiques, une architecture taillée pour le calcul Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h8 Puissance de calcul des GPU Nvidia vs CPU Intel Graphe : nvidia programming guidenvidia programming guide

9 GPU Les processeurs graphiques, une architecture taillée pour le calcul Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h9 CPU Schémas : nvidia programming guidenvidia programming guide

10 Les processeurs graphiques, une architecture taillée pour le calcul Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h10 Stream Processor 1 thread Exécution séquentielle 2 ko de registres Schémas : nvidia programming guidenvidia programming guide

11 Les processeurs graphiques, une architecture taillée pour le calcul Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h11 8 threads (bloc) Exécution parallèle 16 ko de mémoire partagée SIMT (Single Instruction Multiple Threads) Schémas : nvidia programming guidenvidia programming guide

12 Les processeurs graphiques, une architecture taillée pour le calcul Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h12 plusieurs SIMT exécution parallèle mémoire globale GPU Complet Schémas : nvidia programming guidenvidia programming guide

13 Un couple permettant une exécution hautement parallèle Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h13 Pour exprimer leur puissance, les GPU requièrent des calculs indépendants La convolution possède cette particularité : chaque pixel résultat est une somme de produits indépendante du résultat voisin Lutilisation de la convolution sur processeurs graphiques est donc pertinente

14 Programmer sur GPU avec lAPI Cuda Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h14 CUDA Compute Unified Device Architecture API propriétaire apparue en 2006 avec larchitecture G80 (Ge force 8) Se présente comme une extension du langage C (compilateur spécifique NVCC) Permet décrire des fonctions C dénommées Kernels qui seront exécutées N fois en parallèle sur N différents threads

15 Programmer sur GPU avec lAPI Cuda Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h15 Chaque thread va effectuer une des additions N additions seront exécutées simultanément Kernel GPU Parallèle Code CPU Séquentiel // Kernel definition __global__ void VecAdd(float* A, float* B, float* C) { int i = threadIdx.x; C[i] = A[i] + B[i]; } int main() {... // Kernel invocation with N threads VecAdd >>(A, B, C); } Addition de vecteurs en Cuda Extraits de code : nvidia programming guidenvidia programming guide

16 Programmer sur GPU avec lAPI Cuda Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h16 Pour simplifier lexécution de tâches plus complexes, les threads bénéficient dune hiérarchie bien définie. Lindice de thread (threadId) peux prendre une (thradId.x) deux (threadId.y) ou trois (threadId.z) dimensions. Apparaissent dès lors blocs de threads (blockId) à une deux ou trois dimension suivant la même structure. Lensemble des blocs forment une grille de thread (1D ou 2D mais pas 3D) qui est ensuite envoyée au GPU

17 Programmer sur GPU avec lAPI Cuda Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h17 Représentation de la grille de thread Schémas : nvidia programming guidenvidia programming guide

18 Programmer sur GPU avec lAPI Cuda Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h18 // Kernel definition __global__ void MatAdd(float A[N][N], float B[N][N], float C[N][N]) { int i = threadIdx.x; int j = threadIdx.y; C[i][j] = A[i][j] + B[i][j]; } int main() {... int numBlocks = 1; dim3 threadsPerBlock(N, N); MatAdd >>(A, B, C); } Addition de matrices en Cuda Appel du kernel avec 1 bloc de N*N threads Chaque thread du bloc exécute une addition Extraits de code : nvidia programming guidenvidia programming guide

19 Convolution 2D Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h19 On découpe limage en blocs de 16*16 threads Chaque pixel résultat est calculé par un thread Un thread exécute séquentiellement les sommes / produits nécessaires au calcul dun pixel résultat Tous les pixels résultats sont calculés en parallèle

20 Convolution 2D Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h20 Schémas : réalisation personnelle Il reste cependant un problème : les effets de bord

21 Convolution 2D Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h21 Schémas : réalisation personnelle solution : placer des zéros autour de limage Dans le kernel on choisira de faire des tests sur les indices de thread (plus performant)

22 Convolution 2D optimisée Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h22 lexécution est divisée en deux passes (i.e. deux kernels) Une passe horizontale qui traite des rangées de 16 pixels Une passe verticale traite des colonnes 16 pixels Cette implémentation est basée sur lexemple ConvolutionSeparable du SDK Nvidia Première optimisation : utilisation de la convolution séparable

23 Convolution 2D optimisée Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h23 Deuxième optimisation : chargement de limage directement dans la mémoire partagée du GPU (mémoire shared) Sans mémoire sharedAvec mémoire shared Schémas : nvidia programming guidenvidia programming guide

24 Convolution 3D, une histoire de boucle… Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h24 Z slices z x y Schémas : réalisation personnelle Problème : on ne peux pas définir une grille de thread en 3D Solution : On découpe le volume en slices traitées par nos kernels 2D

25 Convolution 3D, une histoire de boucle… Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h25 Cette méthode nécessite cependant dadapter les kernels 2D Le noyau étant 3D, les kernels doivent récupérer les valeurs des slices les entourant

26 Convolution 3D, une histoire de boucle… Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h26 Illustration : réalisation personnelle noyau n-1 5 noyau n 10 noyau n+1 5 Slice volume n-1 Slice volume n+1 Slice volume n Z 20

27 Qualité des résultats Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h27 La qualité (i.e la justesse) des résultats est constamment vérifiée par : Le calcul de la norme relative entre limplémentation CPU et la version GPU (contrôle automatique) Lexport des images et volumes résultats dans un fichier (contrôle visuel) Image dorigineImage covoluée (Gauss) CPUImage covoluée (Gauss) GPU Illustration: réalisation personnelle

28 Benchmark des convolutions 2D et 3D Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h28 Fabriquant et modèle Nombre de cœurs Fréquence des cœurs CPUIntel Xeon L GHz GPUNvidia Geforce GTX GHz Système de test

29 Benchmark des convolutions 2D et 3D Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h29 x2,5

30 Benchmark des convolutions 2D et 3D Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h30 x3

31 Les transferts mémoires, goulot détranglement Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h31 x65 !

32 Les transferts mémoires, goulot détranglement Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h32

33 Un autre moyen dexécuter la convolution : Fourrier Convolution matricielle et processeur graphique : un couple idéal Implémentations et optimisations Résultats : performances et limites 09/03/2014Benoît Pencrec'h33

34 09/03/2014Benoît Pencrec'h34 Une expérience enrichissante Cuda est un langage simple à mettre en œuvre donnant de bons résultats Au cours de ce stage jaurai: Acquis une bonne connaissance des GPU et de la programmation parallèle, Appris à interfacer des fonctions C et CUDA avec Matlab, Utilisé un outil de versionning de Code, Familiarisé avec un OS libre, Appris à développer sans IDE en utilisant loutil Make et les makefiles, Approfondi mes connaissances en langage C.

35 Sources Index de la documentation Nvidia CUDA Site : Université Harvay Mudd Site : 09/03/2014Benoît Pencrec'h35


Télécharger ppt "Traitement de linformation Programmation massivement parallèle Arrière plan: Nvidia.frNvidia.fr Benoît Pencrec'h."

Présentations similaires


Annonces Google