SlideShare une entreprise Scribd logo
Programmation parallèle sur GPU avec CUDA par   Maxime Fromentin Consultant In Fine Consulting le  26/04/2011
SOMMAIRE Introduction  sur les GPUs, CUDA et les domaines d’application Explication plus technique sur CUDA, présentation d’un exemple Questions
PARTIE I : Introduction aux GPUS et CUDA
GPU |  DÉFINITION Déf: 1)  Hardware spécialisé dans le rendu graphique 2) Microprocesseur présent sur les cartes graphiques au sein d’un ordinateur ou d’une console de jeux vidéo Principaux constructeurs  : NVIDIA, ATI/AMD, Intel Corporation Différence avec les CPUs : Hardware spécialisé dans le rendu graphique Designer pour supporter un parallélisme de masse Créer autant de threads que possible!
GPU | ÉVOLUTION DES PERFORMANCES  Les GPU sont des circuits massivement parallèles Des centaines de cœurs Des milliers de threads Floating-Point Operations per Second entre GPU et CPU
GPU | COMPARAISON DES ARCHITECTURES G80 GT200 Fermi Transistors 681 millions 1,4 milliards 3,0 milliards CUDA cores 128 240 512 Double précision (par cycle) - 30 FMA 256 FMA Simple précision (par cycle) 128 MAD 240 MAD 512 FMA Special Function Units (par SM) 2 2 4 Warp scheduler (par SM) 1 1 2 Shared memory (par SM) 16 Ko 16 Ko 48 Ko ou 16 Ko Cache L1 (par SM) - - 48 Ko ou 16 Ko Cache L2 - - 768 Ko Mémoire ECC Non Non Oui Kernels concurrents Non Non jusqu’à 16 Adresses 32 bits 32 bits 64 bits
CUDA | DÉFINITION  Avec l’évolution des performances,  les GPUs deviennent programmables  CUDA  – Compute Unified Architecture Framework et ensemble d’outils qui permettent le design, l’implémentation et la vérification des applications GPUs Extension du langage C Toolkit incluant un compilateur spécialisé: nvcc : méta-compilateur distribue la compilation entre le CPU natif et le GPU CUDA Application Source file: C/C++ (.cpp) Source file: CUDA (.cu) Compiling: Visual C++ Compiling: nvcc Linking: Visual C++ Executable
CUDA | DÉFINITION  Plus de 200 millions de périphériques sont capables d’exécuter des applications CUDA ! Des performances entre 5X et 100X supérieures aux CPUs !
CUDA ET FINANCE  Plus à voir sur :  http://www.nvidia.fr/object/cuda_app_tesla_fr.html SciFinance : “ By harnessing the power of NVIDIA GPUs, SciFinance parallel codes for Monte Carlo pricing models run blazingly fast: up to  50x-300x  faster than serial code.”
PARTIE II : CUDA more in-depth Exemple
CUDA | ORGANISATION DES THREADS Les threads sont organisées dans une hiérarchie à 2 niveaux : Grille Blocs Coordonnées uniques Indices de bloc : 2D Indices de thread : 3D Tous les blocs d’une grille ont les même dimensions Une grille par kernel
CUDA | ORGANISATION DES THREADS blockIdx.x  et  blockIdx.y  permet d’identifier le bloc La grille comprend  gridDim.x  x  gridDim.y  blocs threadIdx.x ,  threadIdx.y ,  threadIdx.z  permettent  d’identifier le thread à l’intérieur d’un bloc Plusieurs contraintes à prendre en compte: Maximum sur les coordonnées Grille (65536 x 65536) Bloc (512, 512, 64) Nombre de threads par SM Maximum = 512 Typiquement 256
CUDA | EXÉCUTION DES THREADS Par groupe de 32 (warp) Tous les threads d’un warp exécutent la même instruction ! Si dans if/then/else, un thread du warp prend une autre branche que le reste du groupe, tout le groupe exécute les 2 branches ! (on utilise des  predicated   instructions  pour ne pas stocker les résultats pour les threads concernées). DIVERGENCE Perte de performance
CUDA | MODÈLE D’EXÉCUTION
CUDA | STRUCTURE D’UN PROGRAMME Un programme CUDA comprend : Des phases s’exécutant sur  l’hôte  (CPU) Phases séquentielles, entrées/sorties (interactions avec le système d’exploitation) Des phases s’exécutant sur le(s)  device (s) (GPU) Parallélisme sur les données    Limiter les interactions entres CPU et GPU pour augmenter les performances
CUDA | STRUCTURE D’UN PROGRAMME // allocation de la mémoire sur le device cudaMalloc((void**)a_d, size); … // transfert des données du CPU vers le device (GPU) cudaMemcpy(a_d, a, size, cudaMemcpyHostToDevice); … // appel du kernel (programme qui tourne sur le GPU) addVectors<<< xxx, xxx>>>(n, a_d, b_d, c_d); // récupération du résultat cudaMemcpy(c, c_d, size, cudaMemcpyDeviceToHost);
CUDA | EXEMPLE : MULTIPLICATION DE MATRICES A, B, C sont carrées n x n C = A * B Code séquentiel en c++ void matmul(int n, float* a, float*b, float* c) { for (int i=0; i<n, i++) { for (int j=0; j<n; j++) { float s = 0; for (int k=0; k<n; k++) s += a[i*n+k] * b[i*k+j]; c[i*n+j] = s; } } }
CUDA | EXEMPLE : MULTIPLICATION DE MATRICES
CUDA | EXEMPLE : MULTIPLICATION DE MATRICES …  cudaMemcpy(xd, x, size, cudaMemcpyHostToDevice); cudaMemcpy(yd, y, size, cudaMemcpyHostToDevice); const int threadsPerBlock = 16; int nblocks = (n + threadsPerBlock - 1) / (threadsPerBlock);  dim3 dimGrid(nblocks,nblocks,1); dim3 dimBlock(threadsPerBlock,threadsPerBlock,1); multMatKernel<<<dimGrid, dimBlock>>>(n, xd, yd, zd); cudaMemcpy(z, zd, size, cudaMemcpyDeviceToHost); //std::cout << x[0] << &quot; + &quot; << y[0] << &quot; = &quot; << z[0] << std::endl; cudaFree(xd); cudaFree(yd); cudaFree(zd);
CUDA | EXEMPLE : MULTIPLICATION DE MATRICES __global__ void multMatKernel(int n, float *x, float *y, float *z) { int xx= blockIdx.x * blockDim.x + threadIdx.x; int yy= blockIdx.y * blockDim.y + threadIdx.y; if(xx<n && yy <n) { float res =0.0f; for(int i=0;i<n;i++) res+=x[yy+n*i]*y[xx*n+i]; z[xx*n+yy] =res; } }    Des optimisations encore possibles en utilisant la mémoire locale
CONCLUSION Avantages: Des performances entre 5X et 100X supérieures au CPU Une prise en main dans le domaine scientifique et de l’industrie Prix inférieurs à un cluster! Moins de place requise Inconvénients: Une prise en main plus difficile Des optimisations plus compliquées à entreprendre (algorithme, mémoire,…) et changeantes avec les versions de GPU.
BIBLIOGRAPHIE Site CUDA:  http://www.nvidia.fr/object/cuda_home_new_fr.html Exemples CUDA à télécharger : http://developer.download.nvidia.com/compute/cuda/1.1- Beta/x86_website/Computational_Finance.html SciFinance http://www.scicomp.com/ Projet de parallélisation automatique: http://www.hpc-project.com/ Article: Binomial option pricing model: http://developer.download.nvidia.com/compute/cuda/1_1/Website/projects/binomialOptions/doc/binomialOptions.pdf Blog In Fine Consulting http://blog.infine.com/
QUESTIONS?

Contenu connexe

PPTX
PPTX
PPT
Cloud et Virtualisation
PDF
Manuel des TP : Atelier systèmes 2
PDF
Rapport- Conception et réalisation d'une plateforme social learning
PDF
Rapport exposé eXtreme Programming XP
PDF
Corrige tp java
PPTX
Présentation PFE Hachem Selmi et Ahmed Dridi Big data
Cloud et Virtualisation
Manuel des TP : Atelier systèmes 2
Rapport- Conception et réalisation d'une plateforme social learning
Rapport exposé eXtreme Programming XP
Corrige tp java
Présentation PFE Hachem Selmi et Ahmed Dridi Big data

Tendances (20)

PDF
Présentation Modul\'Data Center
PDF
Un introduction à Pig
PDF
TP1 Big Data - MapReduce
PDF
Exercices sur-python-turtle-corrige
PDF
Chapitre 04 : les fonctions
PPTX
Presentation of summer Internship (présentation stage d\'été)
PDF
Cours de programmation en c
PDF
Rapport de stage de fin d'études ISI 2015
PDF
Programmation en C
PDF
Architectures parallèles.pdf
PDF
Rapport de stage du fin d'étude
ODP
Les arbres de décisions
DOCX
Tp fichier et dossier
ODP
La gestion de fichier
PDF
Cours java v1.4
PPSX
Cours Génie Logiciel - Cours 2 - Cycles de vie
PDF
Systeme embarque
PPTX
Base de données distribuée
PDF
Diaporama initiation informatique
PPT
Cours langage c
Présentation Modul\'Data Center
Un introduction à Pig
TP1 Big Data - MapReduce
Exercices sur-python-turtle-corrige
Chapitre 04 : les fonctions
Presentation of summer Internship (présentation stage d\'été)
Cours de programmation en c
Rapport de stage de fin d'études ISI 2015
Programmation en C
Architectures parallèles.pdf
Rapport de stage du fin d'étude
Les arbres de décisions
Tp fichier et dossier
La gestion de fichier
Cours java v1.4
Cours Génie Logiciel - Cours 2 - Cycles de vie
Systeme embarque
Base de données distribuée
Diaporama initiation informatique
Cours langage c
Publicité

En vedette (19)

PDF
Personal branding, créer sa marque personnelle, surveiller on e-reputation.
PPTX
Conférence estime de soi, Gilles Payet, 17 janvier 2017
PDF
Les Jeunes et le Vin, un désamour, vraiment ? Une étude Verallia
PDF
Optimiser votre profil LinkedIn
PPTX
Atelier sur l'utilisation efficace de linkedin et viadeo, gilles payet pour s...
PDF
Personnal branding et profil LinkedIn
PDF
Qu'est-ce que LinkedIn ? Comment l'utiliser ?
PDF
Linkedin tutoriel utilisation
PPTX
LinkedIn 101
PDF
Introduction à LinkedIn
PPTX
Formation Linkedin 2017
PPTX
+Conférence décrocher un job en 2016 : 7 secrets pour sortir du lot
PPTX
Utiliser efficacement linkedin et viadeo pour décrocher des entretiens
PPTX
Candidatures seniors, 10 idées fortes pour donner du sens à vos actions
PPTX
Projet professionnel : rebondir avec un projet qui explore toutes les pistes
PPTX
Résilience comment développer sa capacité à surmonter les epreuves et les ec...
PPTX
Conférence émotions et trac avant un entretien, clés et exercices pratiques
PPTX
Utiliser son réseau pour décrocher un emploi
PDF
Utiliser Facebook pour votre business
Personal branding, créer sa marque personnelle, surveiller on e-reputation.
Conférence estime de soi, Gilles Payet, 17 janvier 2017
Les Jeunes et le Vin, un désamour, vraiment ? Une étude Verallia
Optimiser votre profil LinkedIn
Atelier sur l'utilisation efficace de linkedin et viadeo, gilles payet pour s...
Personnal branding et profil LinkedIn
Qu'est-ce que LinkedIn ? Comment l'utiliser ?
Linkedin tutoriel utilisation
LinkedIn 101
Introduction à LinkedIn
Formation Linkedin 2017
+Conférence décrocher un job en 2016 : 7 secrets pour sortir du lot
Utiliser efficacement linkedin et viadeo pour décrocher des entretiens
Candidatures seniors, 10 idées fortes pour donner du sens à vos actions
Projet professionnel : rebondir avec un projet qui explore toutes les pistes
Résilience comment développer sa capacité à surmonter les epreuves et les ec...
Conférence émotions et trac avant un entretien, clés et exercices pratiques
Utiliser son réseau pour décrocher un emploi
Utiliser Facebook pour votre business
Publicité

Similaire à Programmation sur GPU avec CUDA (20)

PDF
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
PPT
Graphics card as computation engine
PPTX
Presentaion fpga µc µp quelles est la solution
PDF
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
PPTX
Vivre en parallèle - Softshake 2013
PPTX
Softshake 2013 - Vivre en parallèle
PDF
COURS VHDL PROGRAMMATION ET _ETAPES pour comprendre
PDF
20190520 - IBM Cloud Paris-Saclay Meetup - Hardis Group
PPTX
spark_intro_1208
PDF
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
PPTX
Net duino et le .net micro framework
PPT
Architecture des ordinateurs
PDF
Sizing PoC LSF & PowerAI for Engineers schools workloads
PDF
Paug renderscript-mars-2013
PDF
Isbs slides 2010
PPT
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
PPTX
ALT.Net Montréal: NETMF et Gadgeteer
PDF
Hacking your Home @bdx.io
PDF
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
PDF
cours-syst (1).pdf
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
Graphics card as computation engine
Presentaion fpga µc µp quelles est la solution
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
Vivre en parallèle - Softshake 2013
Softshake 2013 - Vivre en parallèle
COURS VHDL PROGRAMMATION ET _ETAPES pour comprendre
20190520 - IBM Cloud Paris-Saclay Meetup - Hardis Group
spark_intro_1208
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
Net duino et le .net micro framework
Architecture des ordinateurs
Sizing PoC LSF & PowerAI for Engineers schools workloads
Paug renderscript-mars-2013
Isbs slides 2010
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
ALT.Net Montréal: NETMF et Gadgeteer
Hacking your Home @bdx.io
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
cours-syst (1).pdf

Programmation sur GPU avec CUDA

  • 1. Programmation parallèle sur GPU avec CUDA par Maxime Fromentin Consultant In Fine Consulting le 26/04/2011
  • 2. SOMMAIRE Introduction sur les GPUs, CUDA et les domaines d’application Explication plus technique sur CUDA, présentation d’un exemple Questions
  • 3. PARTIE I : Introduction aux GPUS et CUDA
  • 4. GPU | DÉFINITION Déf: 1) Hardware spécialisé dans le rendu graphique 2) Microprocesseur présent sur les cartes graphiques au sein d’un ordinateur ou d’une console de jeux vidéo Principaux constructeurs : NVIDIA, ATI/AMD, Intel Corporation Différence avec les CPUs : Hardware spécialisé dans le rendu graphique Designer pour supporter un parallélisme de masse Créer autant de threads que possible!
  • 5. GPU | ÉVOLUTION DES PERFORMANCES Les GPU sont des circuits massivement parallèles Des centaines de cœurs Des milliers de threads Floating-Point Operations per Second entre GPU et CPU
  • 6. GPU | COMPARAISON DES ARCHITECTURES G80 GT200 Fermi Transistors 681 millions 1,4 milliards 3,0 milliards CUDA cores 128 240 512 Double précision (par cycle) - 30 FMA 256 FMA Simple précision (par cycle) 128 MAD 240 MAD 512 FMA Special Function Units (par SM) 2 2 4 Warp scheduler (par SM) 1 1 2 Shared memory (par SM) 16 Ko 16 Ko 48 Ko ou 16 Ko Cache L1 (par SM) - - 48 Ko ou 16 Ko Cache L2 - - 768 Ko Mémoire ECC Non Non Oui Kernels concurrents Non Non jusqu’à 16 Adresses 32 bits 32 bits 64 bits
  • 7. CUDA | DÉFINITION Avec l’évolution des performances, les GPUs deviennent programmables CUDA – Compute Unified Architecture Framework et ensemble d’outils qui permettent le design, l’implémentation et la vérification des applications GPUs Extension du langage C Toolkit incluant un compilateur spécialisé: nvcc : méta-compilateur distribue la compilation entre le CPU natif et le GPU CUDA Application Source file: C/C++ (.cpp) Source file: CUDA (.cu) Compiling: Visual C++ Compiling: nvcc Linking: Visual C++ Executable
  • 8. CUDA | DÉFINITION Plus de 200 millions de périphériques sont capables d’exécuter des applications CUDA ! Des performances entre 5X et 100X supérieures aux CPUs !
  • 9. CUDA ET FINANCE Plus à voir sur : http://www.nvidia.fr/object/cuda_app_tesla_fr.html SciFinance : “ By harnessing the power of NVIDIA GPUs, SciFinance parallel codes for Monte Carlo pricing models run blazingly fast: up to 50x-300x faster than serial code.”
  • 10. PARTIE II : CUDA more in-depth Exemple
  • 11. CUDA | ORGANISATION DES THREADS Les threads sont organisées dans une hiérarchie à 2 niveaux : Grille Blocs Coordonnées uniques Indices de bloc : 2D Indices de thread : 3D Tous les blocs d’une grille ont les même dimensions Une grille par kernel
  • 12. CUDA | ORGANISATION DES THREADS blockIdx.x et blockIdx.y permet d’identifier le bloc La grille comprend gridDim.x x gridDim.y blocs threadIdx.x , threadIdx.y , threadIdx.z permettent d’identifier le thread à l’intérieur d’un bloc Plusieurs contraintes à prendre en compte: Maximum sur les coordonnées Grille (65536 x 65536) Bloc (512, 512, 64) Nombre de threads par SM Maximum = 512 Typiquement 256
  • 13. CUDA | EXÉCUTION DES THREADS Par groupe de 32 (warp) Tous les threads d’un warp exécutent la même instruction ! Si dans if/then/else, un thread du warp prend une autre branche que le reste du groupe, tout le groupe exécute les 2 branches ! (on utilise des predicated instructions pour ne pas stocker les résultats pour les threads concernées). DIVERGENCE Perte de performance
  • 14. CUDA | MODÈLE D’EXÉCUTION
  • 15. CUDA | STRUCTURE D’UN PROGRAMME Un programme CUDA comprend : Des phases s’exécutant sur l’hôte (CPU) Phases séquentielles, entrées/sorties (interactions avec le système d’exploitation) Des phases s’exécutant sur le(s) device (s) (GPU) Parallélisme sur les données  Limiter les interactions entres CPU et GPU pour augmenter les performances
  • 16. CUDA | STRUCTURE D’UN PROGRAMME // allocation de la mémoire sur le device cudaMalloc((void**)a_d, size); … // transfert des données du CPU vers le device (GPU) cudaMemcpy(a_d, a, size, cudaMemcpyHostToDevice); … // appel du kernel (programme qui tourne sur le GPU) addVectors<<< xxx, xxx>>>(n, a_d, b_d, c_d); // récupération du résultat cudaMemcpy(c, c_d, size, cudaMemcpyDeviceToHost);
  • 17. CUDA | EXEMPLE : MULTIPLICATION DE MATRICES A, B, C sont carrées n x n C = A * B Code séquentiel en c++ void matmul(int n, float* a, float*b, float* c) { for (int i=0; i<n, i++) { for (int j=0; j<n; j++) { float s = 0; for (int k=0; k<n; k++) s += a[i*n+k] * b[i*k+j]; c[i*n+j] = s; } } }
  • 18. CUDA | EXEMPLE : MULTIPLICATION DE MATRICES
  • 19. CUDA | EXEMPLE : MULTIPLICATION DE MATRICES … cudaMemcpy(xd, x, size, cudaMemcpyHostToDevice); cudaMemcpy(yd, y, size, cudaMemcpyHostToDevice); const int threadsPerBlock = 16; int nblocks = (n + threadsPerBlock - 1) / (threadsPerBlock); dim3 dimGrid(nblocks,nblocks,1); dim3 dimBlock(threadsPerBlock,threadsPerBlock,1); multMatKernel<<<dimGrid, dimBlock>>>(n, xd, yd, zd); cudaMemcpy(z, zd, size, cudaMemcpyDeviceToHost); //std::cout << x[0] << &quot; + &quot; << y[0] << &quot; = &quot; << z[0] << std::endl; cudaFree(xd); cudaFree(yd); cudaFree(zd);
  • 20. CUDA | EXEMPLE : MULTIPLICATION DE MATRICES __global__ void multMatKernel(int n, float *x, float *y, float *z) { int xx= blockIdx.x * blockDim.x + threadIdx.x; int yy= blockIdx.y * blockDim.y + threadIdx.y; if(xx<n && yy <n) { float res =0.0f; for(int i=0;i<n;i++) res+=x[yy+n*i]*y[xx*n+i]; z[xx*n+yy] =res; } }  Des optimisations encore possibles en utilisant la mémoire locale
  • 21. CONCLUSION Avantages: Des performances entre 5X et 100X supérieures au CPU Une prise en main dans le domaine scientifique et de l’industrie Prix inférieurs à un cluster! Moins de place requise Inconvénients: Une prise en main plus difficile Des optimisations plus compliquées à entreprendre (algorithme, mémoire,…) et changeantes avec les versions de GPU.
  • 22. BIBLIOGRAPHIE Site CUDA: http://www.nvidia.fr/object/cuda_home_new_fr.html Exemples CUDA à télécharger : http://developer.download.nvidia.com/compute/cuda/1.1- Beta/x86_website/Computational_Finance.html SciFinance http://www.scicomp.com/ Projet de parallélisation automatique: http://www.hpc-project.com/ Article: Binomial option pricing model: http://developer.download.nvidia.com/compute/cuda/1_1/Website/projects/binomialOptions/doc/binomialOptions.pdf Blog In Fine Consulting http://blog.infine.com/