SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Programmation parallèle sur GPU avec CUDA par   Maxime Fromentin Consultant In Fine Consulting le  26/04/2011
SOMMAIRE ,[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object],[object Object],[object Object]
GPU | ÉVOLUTION DES PERFORMANCES  ,[object Object],[object Object],[object Object],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  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],CUDA Application Source file: C/C++ (.cpp) Source file: CUDA (.cu) Compiling: Visual C++ Compiling: nvcc Linking: Visual C++ Executable
CUDA | DÉFINITION  ,[object Object],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 ,[object Object],[object Object]
PARTIE II : CUDA more in-depth Exemple
CUDA | ORGANISATION DES THREADS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CUDA | ORGANISATION DES THREADS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CUDA | EXÉCUTION DES THREADS ,[object Object],[object Object],[object Object],[object Object],[object Object]
CUDA | MODÈLE D’EXÉCUTION
CUDA | STRUCTURE D’UN PROGRAMME ,[object Object],[object Object],[object Object],[object Object],[object Object],   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 ,[object Object],[object Object],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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
BIBLIOGRAPHIE ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
QUESTIONS?

Weitere ähnliche Inhalte

Was ist angesagt?

CPU vs. GPU presentation
CPU vs. GPU presentationCPU vs. GPU presentation
CPU vs. GPU presentation
Vishal Singh
 
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Sofien Benrhouma
 

Was ist angesagt? (20)

Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
Cours routage dynamique (ri pv1,ripv2,ripng)
Cours routage dynamique (ri pv1,ripv2,ripng) Cours routage dynamique (ri pv1,ripv2,ripng)
Cours routage dynamique (ri pv1,ripv2,ripng)
 
Cuda
CudaCuda
Cuda
 
CPU vs. GPU presentation
CPU vs. GPU presentationCPU vs. GPU presentation
CPU vs. GPU presentation
 
Rapport PFE Lung Cancer Detection - MOHAMMED BOUSSARDI
Rapport PFE Lung Cancer Detection - MOHAMMED BOUSSARDIRapport PFE Lung Cancer Detection - MOHAMMED BOUSSARDI
Rapport PFE Lung Cancer Detection - MOHAMMED BOUSSARDI
 
Modèle en cascade
Modèle en cascadeModèle en cascade
Modèle en cascade
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & Spark
 
Introduction a Flutter
Introduction a FlutterIntroduction a Flutter
Introduction a Flutter
 
Les reseaux
Les reseauxLes reseaux
Les reseaux
 
Apache Spark with Scala
Apache Spark with ScalaApache Spark with Scala
Apache Spark with Scala
 
Rapport projet: relisation d'une app desktop
Rapport projet: relisation d'une app desktop Rapport projet: relisation d'une app desktop
Rapport projet: relisation d'une app desktop
 
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011
 
Compte rendu : Le routage dynamique RIP V1
Compte rendu : Le routage dynamique RIP V1Compte rendu : Le routage dynamique RIP V1
Compte rendu : Le routage dynamique RIP V1
 
Intelligence Artificielle - Algorithmes de recherche
Intelligence Artificielle - Algorithmes de rechercheIntelligence Artificielle - Algorithmes de recherche
Intelligence Artificielle - Algorithmes de recherche
 
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
 
Rapport projet fin d'étude
Rapport projet fin d'étudeRapport projet fin d'étude
Rapport projet fin d'étude
 
Methodes de gestion de projets - introduction au processus unifié
Methodes de gestion de projets - introduction au processus unifiéMethodes de gestion de projets - introduction au processus unifié
Methodes de gestion de projets - introduction au processus unifié
 
réaliser une plateforme d’automatisation et de génération des rapports de test
réaliser une plateforme d’automatisation et de génération des rapports de testréaliser une plateforme d’automatisation et de génération des rapports de test
réaliser une plateforme d’automatisation et de génération des rapports de test
 

Andere mochten auch

Andere mochten auch (19)

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

Ähnlich wie Programmation sur GPU avec CUDA

OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
Paris Open Source Summit
 
Isbs slides 2010
Isbs slides 2010Isbs slides 2010
Isbs slides 2010
RMwebsite
 
ALT.Net Montréal: NETMF et Gadgeteer
ALT.Net Montréal: NETMF et GadgeteerALT.Net Montréal: NETMF et Gadgeteer
ALT.Net Montréal: NETMF et Gadgeteer
Gabriel Mongeon
 

Ähnlich wie Programmation sur GPU avec CUDA (20)

OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at geny...
 
Graphics card as computation engine
Graphics card as computation engineGraphics card as computation engine
Graphics card as computation engine
 
Presentaion fpga µc µp quelles est la solution
Presentaion  fpga µc µp quelles est la solutionPresentaion  fpga µc µp quelles est la solution
Presentaion fpga µc µp quelles est la solution
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
Softshake 2013 - Vivre en parallèle
Softshake 2013 - Vivre en parallèleSoftshake 2013 - Vivre en parallèle
Softshake 2013 - Vivre en parallèle
 
Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013
 
COURS VHDL PROGRAMMATION ET _ETAPES pour comprendre
COURS VHDL   PROGRAMMATION ET _ETAPES pour comprendreCOURS VHDL   PROGRAMMATION ET _ETAPES pour comprendre
COURS VHDL PROGRAMMATION ET _ETAPES pour comprendre
 
20190520 - IBM Cloud Paris-Saclay Meetup - Hardis Group
20190520  - IBM Cloud Paris-Saclay Meetup - Hardis Group20190520  - IBM Cloud Paris-Saclay Meetup - Hardis Group
20190520 - IBM Cloud Paris-Saclay Meetup - Hardis Group
 
spark_intro_1208
spark_intro_1208spark_intro_1208
spark_intro_1208
 
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
 
Net duino et le .net micro framework
Net duino et le .net micro frameworkNet duino et le .net micro framework
Net duino et le .net micro framework
 
Architecture des ordinateurs
Architecture des ordinateursArchitecture des ordinateurs
Architecture des ordinateurs
 
Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloads
 
Paug renderscript-mars-2013
Paug renderscript-mars-2013Paug renderscript-mars-2013
Paug renderscript-mars-2013
 
Isbs slides 2010
Isbs slides 2010Isbs slides 2010
Isbs slides 2010
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
ALT.Net Montréal: NETMF et Gadgeteer
ALT.Net Montréal: NETMF et GadgeteerALT.Net Montréal: NETMF et Gadgeteer
ALT.Net Montréal: NETMF et Gadgeteer
 
Hacking your Home @bdx.io
Hacking your Home @bdx.ioHacking your Home @bdx.io
Hacking your Home @bdx.io
 
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
 
cours-syst (1).pdf
cours-syst (1).pdfcours-syst (1).pdf
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.
  • 3. PARTIE I : Introduction aux GPUS et CUDA
  • 4.
  • 5.
  • 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.
  • 8.
  • 9.
  • 10. PARTIE II : CUDA more in-depth Exemple
  • 11.
  • 12.
  • 13.
  • 14. CUDA | MODÈLE D’EXÉCUTION
  • 15.
  • 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.
  • 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.
  • 22.