SlideShare une entreprise Scribd logo
1  sur  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?

Contenu connexe

Tendances

Reconnaissance faciale
Reconnaissance facialeReconnaissance faciale
Reconnaissance faciale
Aymen Fodda
 
La spécification des besoins
La spécification des besoinsLa spécification des besoins
La spécification des besoins
Ismahen Traya
 
rapport PFE ingénieur génie logiciel INSAT
rapport PFE ingénieur génie logiciel INSATrapport PFE ingénieur génie logiciel INSAT
rapport PFE ingénieur génie logiciel INSAT
Siwar GUEMRI
 

Tendances (20)

Rapport
RapportRapport
Rapport
 
RAPPORT DE PROJET DE FIN D’ETUDES
RAPPORT DE PROJET DE FIN D’ETUDESRAPPORT DE PROJET DE FIN D’ETUDES
RAPPORT DE PROJET DE FIN D’ETUDES
 
Rapport- Conception et réalisation d'une plateforme social learning
Rapport- Conception et réalisation d'une plateforme social learningRapport- Conception et réalisation d'une plateforme social learning
Rapport- Conception et réalisation d'une plateforme social learning
 
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIR
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIRRapport du Projet de Fin d'année Génie informatique ENSA AGADIR
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIR
 
Rapport pfev7
Rapport pfev7Rapport pfev7
Rapport pfev7
 
1601896849 rapport fluttercopie
1601896849 rapport fluttercopie1601896849 rapport fluttercopie
1601896849 rapport fluttercopie
 
Pfe 2015
Pfe 2015Pfe 2015
Pfe 2015
 
Conception et developpement d'un site web pour la suggestion et notification ...
Conception et developpement d'un site web pour la suggestion et notification ...Conception et developpement d'un site web pour la suggestion et notification ...
Conception et developpement d'un site web pour la suggestion et notification ...
 
Reconnaissance faciale
Reconnaissance facialeReconnaissance faciale
Reconnaissance faciale
 
La spécification des besoins
La spécification des besoinsLa spécification des besoins
La spécification des besoins
 
Conception et développement d’une plateforme d'import-export avec paiement en...
Conception et développement d’une plateforme d'import-export avec paiement en...Conception et développement d’une plateforme d'import-export avec paiement en...
Conception et développement d’une plateforme d'import-export avec paiement en...
 
rapport PFE ingénieur génie logiciel INSAT
rapport PFE ingénieur génie logiciel INSATrapport PFE ingénieur génie logiciel INSAT
rapport PFE ingénieur génie logiciel INSAT
 
Rapport pfe 2017 Système de gestion des rendez-vous médicaux
Rapport pfe 2017 Système de gestion des rendez-vous médicaux Rapport pfe 2017 Système de gestion des rendez-vous médicaux
Rapport pfe 2017 Système de gestion des rendez-vous médicaux
 
Conception et développement d'une application de gestion de production et de ...
Conception et développement d'une application de gestion de production et de ...Conception et développement d'une application de gestion de production et de ...
Conception et développement d'une application de gestion de production et de ...
 
Rapport PFE Ilef Ben Slima
Rapport PFE Ilef Ben SlimaRapport PFE Ilef Ben Slima
Rapport PFE Ilef Ben Slima
 
Rapport de projet de fin d'année
Rapport de projet de fin d'année Rapport de projet de fin d'année
Rapport de projet de fin d'année
 
Rapport pfe-ayoub mkharbach
Rapport pfe-ayoub mkharbachRapport pfe-ayoub mkharbach
Rapport pfe-ayoub mkharbach
 
Présentation de la plateforme MonPFE
Présentation de la plateforme MonPFEPrésentation de la plateforme MonPFE
Présentation de la plateforme MonPFE
 
Rapport PFE
Rapport PFERapport PFE
Rapport PFE
 
Rapport PFE
Rapport PFERapport PFE
Rapport PFE
 

En vedette

En vedette (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
 

Similaire à 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
 

Similaire à 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.