SlideShare une entreprise Scribd logo
1  sur  25
AlGorille
        Project Team




   Calcul sur GPUs
Journée de prospective industrielle d’ASR
       UPMC‐Paris 6, 3/11/2011
       UPMC P i 6 3/11/2011


            Stephane Vialle
    SUPELEC – UMI GT‐CNRS 2958  &  
      AlGorille INRIA Project Team
I – Les unités vectorielles s’invitent 
                    dans les nœuds de calculs 
                    dans les nœuds de calculs




Calcul sur GPUs                                                                                                                  Stephane Vialle
Les unités vectorielles s’invitent dans les nœuds de calcul

                                      Evolution des CPUs
                                      Evolution des CPUs
Chaque cœur CPU inclut une 
 h                     l
petite unité vectorielle 
(ex: SSE ou AVX)

  • La puissance des CPUs
   n’augmentent plus  
        g         p
   qu’avec le parallélisme

  • Les CPUs cumulent un
    Les CPUs cumulent un 
   grain moyen et un grain 
   fin de parallélisme
   (multi‐cœurs + unités vect.)
   (multi cœurs + unités vect )

                 W. Kirshenmann, EDF & EPI 
              AlGorille, d’après une première 
              AlGorille d’après une première
                 étude menée par SpiralGen
Calcul sur GPUs                                                                                                                  Stephane Vialle
Les unités vectorielles s’invitent dans les nœuds de calcul

                                      Calcul «
                                      Calcul « vectoriel »
                                          Type de code source
                                          Type de code source                                   Exécution
 float a, b, r;                                                  scalaire                       séquentielle
 r = a+b;

 float a[N], b[N], r[N ];                                        scalaire, mais                  séquentielle, mais
 for (int i = 0; i < N; i++)                                     vectorisable                    parallélisable
    r[i] = a[i] + b[i]
     [i]    [i]   b[i];

 float a[N], b[N], r[N];                                         vectoriel                        séquentielle sur un cœur 
    r = a + b;                                                                                    scalaire, ou
                                                                                                  scalaire ou
                                                                                                  parallèle sur un multi‐
                                                                                                  cœurs scalaires, ou
                                                                                                                  ,
                                                                                                  massivement parallèle sur 
                Possibilité d’accélérations                                                       des unités vectorielles
                               importantes

Calcul sur GPUs                                                                                                                  Stephane Vialle
Les unités vectorielles s’invitent dans les nœuds de calcul

                                    Evolution des GPUs
                                    Evolution des GPUs




 Le GPU est un co‐processeur vectoriel puissant et bon marché, porté par le jeu vidéo
 Le gain de puissance peut être significatif (x100), ou modeste (x2), ou inexistant ! 
     • identifier les cas favorables au GPGPU
     • savoir à quoi se comparer pour mesurer le gain de perf
       savoir à quoi se comparer pour mesurer le gain de perf.
     • savoir écrire des codes GPUs optimisés
Calcul sur GPUs                                                                                                                  Stephane Vialle
Les unités vectorielles s’invitent dans les nœuds de calcul

                        CPUs et unités vectorielles
                             et unités vectorielles
      1 CPU multi‐cœurs                         1 CPU multi‐cœurs                             1 CPU multi‐cœurs associé 
    avec des unités SSE/AVX
    avec des unités SSE/AVX                     dont un cœur GPU
                                                dont un cœur GPU                              à un (ou n) GPU many coeurs
                                                                                              à un (ou n) GPU many‐coeurs




         On trouve des unités vectorielles à divers niveaux vis‐à‐vis du CPU :
             • petites et dans les cœurs CPUs
             • moyennes dans un cœur spécifique du processeur
               moyennes dans un cœur spécifique du processeur
             • puissantes dans la carte fille à coté de la carte mère
              Quelle(s) unités vestorielles utiliser ?


Calcul sur GPUs                                                                                                                  Stephane Vialle
Les unités vectorielles s’invitent dans les nœuds de calcul

                    Multiplication des mémoires
                    Multiplication des mémoires
      1 CPU multi‐cœurs                         1 CPU multi‐cœurs                             1 CPU multi‐cœurs associé 
    avec des unités SSE/AVX                     dont un cœur GPU                              à un (ou n) GPU many‐coeurs


            cache        cache                     cache        cache                   cache        cache          cache        cache


            cache        cache
                            h                      cache cache
                                                          cache
                                                             h                          cache
                                                                                           h         cache          cache        cache
                                                                                                                                    h
                                                       RAM 
               RAM CPU                                                                      RAM CPU                     RAM GPU
                                                    CPU & GPU


        Plus on utilise un co‐processeur vectoriel puissant :
             • plus il a sa propre mémoire (RAM et cache)
               plus il a sa propre mémoire (RAM et cache)
             • plus il faut de temps pour transférer les données entre les cœurs CPUs
              et les cœurs vectoriels
             Ne pas négliger les temps de transferts des données

Calcul sur GPUs                                                                                                                  Stephane Vialle
Les unités vectorielles s’invitent dans les nœuds de calcul

Complexification de la gestion des données
Complexification de la gestion des données
      1 CPU multi‐cœurs                         1 CPU multi‐cœurs                             1 CPU multi‐cœurs associé 
    avec des unités SSE/AVX
    avec des unités SSE/AVX                     dont un cœur GPU
                                                dont un cœur GPU                               à un (ou n) GPU many coeurs
                                                                                               à un (ou n) GPU many‐coeurs




   Pour être efficaces les unités vectorielles demandent :
       • un stockage des données dans un ordre « favorable » 
       • des accès aux données « dans le bon ordre »   (accès « coalescents » 
                                                           sur GPUs)
   Pour chaque technologie vectorielle la stratégie de stockage 
   P      h          h l i       i ll l        é i d       k                                                                     Etude 
   et d’accès est différente !                                                                                                  menée 
                                                                                                                              avec EDF
        Portage des calculs + portage du stockage et de l ordre d accès aux données
        Portage des calculs + portage du stockage et de l’ordre d’accès aux données
        Quelle pérennité des codes de calculs ?
Calcul sur GPUs                                                                                                                  Stephane Vialle
II – Programmation GPGPU native 
                                        (en CUDA sur GPU Nvidia)
                                        (en CUDA sur GPU Nvidia)




Calcul sur GPUs                                                                                                                  Stephane Vialle
Programmation GPGPU native

                                        Aspects matériels
                                        Aspects matériels
 Un « GPU » Nvidia est :
     • un ensemble de machines 
       vectorielles indépendantes 
       partageant une mémoire globale
       partageant une mémoire globale
     • une hiérarchie de mémoires de 
       vitesses et de volumes différents
     • un co‐processeur vectoriel sous le 
       contrôle du CPU




                             CPU + RAM

Calcul sur GPUs                                                                                                                  Stephane Vialle
Programmation GPGPU native

                                          Aspects logiciels
                                          Aspects logiciels
 Un programme CPU+GPU est :
     • un programme CPU séquentiel ou 
       multi‐threads (mono ou multi‐cœurs)
     • des appels de fonctions vectorielles 
       exécutées sur le GPU (« rpc vectoriel »)
     • une décomposition explicite d
           dé          iti      li it des calculs 
                                            l l
       vectoriels  en une grille de blocs de 
       threads

     CPU           Transfert de             GPU
                   données
                                                           Calculs
                                                           vectoriels
                   Transfert de
                   résultats

Calcul sur GPUs                                                                                                                  Stephane Vialle
Programmation GPGPU native

                             Liaison matériel logiciel
                             Liaison matériel‐logiciel
 Programmation
     • Du code d’un calcul élémentaire 
       sur une unité vectorielle
     • De la définition de la grille de
       De la définition de la grille de 
       blocs de threads GPU
     • De l’exécution de cette          Ordonnancement par le GPU
       grille de blocs
         ill d bl                         • d bl
                                            des blocs (de la grille) sur les 
                                                      (d l      ll )     l
                                            machines vectorielles du GPU                                                   Exécution
                                                             • des threads (d’un bloc) sur
                                                                des threads (d un bloc) sur 
                                                               les unités de calculs d’une 
                                                               machine vectorielle
  Possibilité d’influer et 
  d’optimiser l’ordonnancement et 
  l exécution du calcul vectoriel ….
  l’exécution du calcul vectoriel
  … depuis le code source.
Calcul sur GPUs                                                                                                                  Stephane Vialle
Programmation GPGPU native

       Difficultés de la prog. GPGPU native
       Difficultés de la prog. GPGPU native
         • Programmation à base de tableaux et d’indices d’accès
           Programmation à base de tableaux et d indices d accès
             nombreuses sources de « bugs »

         • Mi
           Mise au point difficile : pas d’outil de debug confortable sur le 
                      i t diffi il       d’ til d d b        f t bl       l
           « périphérique GPU »
              temps de développement élevés

         • Obtention de bonnes performances pas facile sur des applications réelles 
           et complexes :
              • Optimisation des stockage et accès aux données
              • Optimisation par « programmation explicite du cache »
              • Optimisation de la granularité de la grille de blocs de threads
                 p                 g                 g
              • Optimisation de l’enchainement des calculs et des transferts CPU/GPU
                démarche demandant de l’expertise et du temps


Calcul sur GPUs                                                                                                                  Stephane Vialle
III – Modèles, outils et stratégie de 
                        développement




Calcul sur GPUs                                                                                                                  Stephane Vialle
Modèles, outils et stratégie de développement

                 Développement mono noeud
                 Développement mono‐noeud
                                                        1 CPU multi‐cœurs + 1 GPU many‐cœurs
                                       C/C++                 Multithreading CPU                      Multithreading GPU
                                       gcc, icc, …           Pthreads, Windows                       CUDA, OpenCL
                                                             Threads, OpenMP, 
                                                              h d
                                                             TBB…
                                       gcc, icc,
                                       gcc, icc, …                                        HMPP (CAPS)
                                                                                          HMPP (CAPS)
 Un nœud de calcul 
  des clusters de                      gcc, icc, …               Autres env. de haut niveau en cours de dev.
  GPU de Supélec
            p

                                                  Compétences requises
      • Pouvoir combiner différents environnements de développement
      • Savoir combiner différents modèles et paradigmes de programmation
      • Savoir mettre au point et optimiser des architectures hybrides (CPUs + GPUs)
Calcul sur GPUs                                                                                                                  Stephane Vialle
Modèles, outils et stratégie de développement

                 Développement multi noeuds
                 Développement multi‐noeuds
                                                             Supercalculateur Bull « Titane »
                                                             installé au CCRT (CEA)
                                                             i    llé CCRT (CEA)


                                                                 On cumule 3 paradigmes de 
                                                                 On cumule 3 paradigmes de
                                                                 programmation parallèle 
                                                                 (pour grains gros, moyen et fin)

                                      1 CPU multi‐cœurs + 1 GPU many‐cœurs
    /
   C/C++                Envois de messages Multithreading CPU
                           o s de essages   u      ead g U                                                Multithreading GPU
                                                                                                           u      ead g U
   gcc, icc, …          MPI, …                               Pthreads, Windows                            CUDA, OpenCL
                                                             Threads, OpenMP, TBB…
   gcc, icc, …                     MPI (?)                                                HMPP (CAPS)
   gcc, icc, …            Autres env. de haut niveau en cours de dev.                                        CUDA, OpenCL
   gcc, icc, …                                 Autres env. de haut niveau en cours de dev.

Calcul sur GPUs                                                                                                                  Stephane Vialle
Modèles, outils et stratégie de développement
 Développements à base de bibliothèques vectorielles
 Développements à base de bibliothèques vectorielles

     Code C/C++  (+ multithreading CPU + envois de messages CPU)  
                  + appels de fonctions de bibliothèques vectorielles
     Ex : bibliothèques GPU de FFT, BLAS, RNG, autres …


          Surcout de développement : faible 
           Expertise complémentaire nécessaire : faible
           Accroissement des performances : significatif si 
            • le problème se prête à une vectorisation
            • les bibliothèques sont adaptées au problème (à tout le problème)
              les bibliothèques sont adaptées au problème (à tout le problème)
            • les transferts de données CPU – GPU nécessaires à l’utilisation des 
              bibliothèques sont limités 


Calcul sur GPUs                                                                                                                  Stephane Vialle
Modèles, outils et stratégie de développement
          Développements complets de codes vectoriels
          Développements complets de codes vectoriels

     Code C/C++  (+ multithreading CPU + envois de messages CPU)  
      ode /      (    u     ead g U e o s de essages U)
                  + code GPU dédié au problème
                  (+ appels de fonctions de bibliothèques vectorielles)

          Surcout de développement : élevé
           Expertise complémentaire nécessaire : élevée
             p          p
           Accroissement des performances : significatif et meilleur si 
            • le problème se prête à une vectorisation
            •lles codes GPU développés sont correctement optimisés
                    d       dé l      é                            é

          Validation du code hybride : très important !
           • comparaison des résultats à ceux d’un code purement CPU
           • développement et validation « step by step » : noyau par noyau



Calcul sur GPUs                                                                                                                  Stephane Vialle
IV – Exemples de performances
                        p       p




Calcul sur GPUs                                                                                                                  Stephane Vialle
Exemple de performances

                                 Exemple de gains très importants
                                 Exemple de gains très importants
                                      Calculs de Monte‐Carlo totalement réalisés sur GPU
                         Exotic European pricer on clusters of GPU and                                     Exotic European pricer on clusters of GPU and
                                       CPU with PLCG                                                                     CPU using PLCG
                     1E+05                                                                          1E+4




                                                                                 Consummed Watt.h
Total Exec Time(s)
                 )




                     1E+04                                                                          1E+3
                     1E+03
                                                                                                    1E+2
                     1E+02
      E




                                                                                                    1E+1
                     1E+01

                     1E+00                                                                          1E+0
                             1        10          100      1000          10000                                1    2    4    8   16 32      64   128 256
                                           Nb of nodes                                                                       Nb of nodes



                     Gros travail de portage complet des calculs sur GPUs
                     Gros travail de portage complet des calculs sur GPUs
                     Calculs sur GPU sans transferts CPU – GPU (sauf à l’initialisation et à la fin du pgm)
                     Calculs distribués «
                     Calculs distribués « embarrassingly parallel » sur cluster (pas de communications)
                                                                  » sur cluster (pas de communications)

Calcul sur GPUs                                                                                                                  Stephane Vialle
Exemple de performances

                                      Exemples de gains plus variées
                                      Exemples de gains plus variées
                                 Pricer ‐ parallel MC                                            EDP Solver ‐ Synchronous                                               Jacobi Relaxation
                     1E+5                                                             1E+3                                                              1E+4




                                                                                                                                   Execution time (s)
                                                                    cution time (s)
                     1E+4
    ution time (s)




                                                                                      1E+2                                                              1E+3
                     1E+3

                     1E+2
                                                                                      1E+1                                                              1E 2
                                                                                                                                                        1E+2




                                                                 Exec
Execu




                     1E+1

                     1E+0                                                             1E+0                                                              1E+1
                            1            10              100                                 1              10               100                                1              10           100
                                    Number of nodes                                                    Number of nodes
                                                                                                       Number of nodes                                                    Number of nodes
                                                                                                                                                                          Number of nodes


                                               Monocore‐CPU cluster                          Multicore‐CPU cluster           Manycore‐GPU cluster

                                Pricer
                                P i – parallel MC
                                          ll l MC                                                EDP Solver ‐ Synchronous                                               Jacobi Relaxation
                                                                                                                                                                            bi l      i
                     1E+4                                                             1E+2                                                               1E+3

                     1E+3
                                                                        Wh)




                                                                                                                                                         1E+2
                                                                Energy (W
         h)




                                                                                                                                            h)
Energy (Wh




                                                                                                                                   Energy (Wh
                     1E+2                                                             1E+1
                                                                                                                                                         1E+1
                     1E+1

                     1E+0                                                             1E+0                                                               1E+0
                            1             10            100                                  1              10              100                                     1          10           100
                                   Number of nodes                                                    Number of nodes                                                     Number of nodes

Calcul sur GPUs                                                                                                                  Stephane Vialle
IV – Conclusion et perspectives
                                   p p




Calcul sur GPUs                                                                                                                  Stephane Vialle
Conclusion et perspectives

                              Bilan actuel du GPGPU
                              Bilan actuel du GPGPU
   Les clusters hybrides sont de plus en plus nombreux (grands ou petits)
    es c uste s yb des so t de p us e p us o b eu (g a ds ou pet ts)
   Certains codes hybrides sont très performants
                                 p
   Certaines sociétés ont beaucoup investi dans le GPGPU
       Ex : Energie: Total
            Finance : Banques


   Développer un code GPU complet reste une tâche longue et complexe

   Les unités vectorielles des cœurs CPU gagnent en puissance
       Intel « sandy bridge » vs GPU ???


        Quels sont les investissements pérennes … ?


Calcul sur GPUs                                                                                                                  Stephane Vialle
Conclusion et perspectives

               Vision (personnelle) de l avenir
               Vision (personnelle) de l’avenir
  Les unités vectorielles sont et seront présentes dans nos calculateurs sous une 
  forme ou sous une autre (il y a la place dans les puces, et il y a des besoins)
  Programmer des unités vectorielles demande une compétence spécifique 
  (algorithmique, programmation mise au point, optimisation)
  ( l ih i                  i      i      i       i i i )
  Les modèles de programmation vectoriels sont liés à l’architecture pour être efficace
  (format de stockage des données et stratégie d accès aux données), ils devraient le 
  (format de stockage des données et stratégie d’accès aux données) ils devraient le
  rester pendant « quelques années »

      Investir dans de l’acquisition de compétences en calcul vectoriel.
      I    ti d     d l’      i iti d         ét            l l    t i l
       Apprendre à utiliser les unités vectorielles disponibles dès aujourd’hui.
      Isoler les noyaux vectoriels du reste du code.
      Isoler les noyaux vectoriels du reste du code
      Prévoir que le format de stockage des « vecteurs » peut changer.
      Comparer les performances des codes hybrides à celles des codes scalaires   
      optimisés pour juger l’intérêt d’un système hybride.
Calcul sur GPUs                                                                                                                  Stephane Vialle
Calculs sur GPUs




                                            Questions ?



Calcul sur GPUs                                                                                                                  Stephane Vialle

Contenu connexe

En vedette

Autumn collection JavaOne 2014
Autumn collection JavaOne 2014Autumn collection JavaOne 2014
Autumn collection JavaOne 2014José Paumard
 
50 new things you can do with java 8
50 new things you can do with java 850 new things you can do with java 8
50 new things you can do with java 8José Paumard
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidHoussem Lahiani
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationTomcat Expert
 
In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionYann Caron
 
API Asynchrones en Java 8
API Asynchrones en Java 8API Asynchrones en Java 8
API Asynchrones en Java 8José Paumard
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJosé Paumard
 
Introduction to CUDA
Introduction to CUDAIntroduction to CUDA
Introduction to CUDARaymond Tay
 
Graphics Processing Unit - GPU
Graphics Processing Unit - GPUGraphics Processing Unit - GPU
Graphics Processing Unit - GPUChetan Gole
 
GRAPHICS PROCESSING UNIT (GPU)
GRAPHICS PROCESSING UNIT (GPU)GRAPHICS PROCESSING UNIT (GPU)
GRAPHICS PROCESSING UNIT (GPU)self employed
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 

En vedette (20)

Autumn collection JavaOne 2014
Autumn collection JavaOne 2014Autumn collection JavaOne 2014
Autumn collection JavaOne 2014
 
Example Application of GPU
Example Application of GPUExample Application of GPU
Example Application of GPU
 
Le Réseau et Java
Le Réseau et JavaLe Réseau et Java
Le Réseau et Java
 
50 new things you can do with java 8
50 new things you can do with java 850 new things you can do with java 8
50 new things you can do with java 8
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'Android
 
GPU Computing
GPU ComputingGPU Computing
GPU Computing
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 Presentation
 
In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introduction
 
APACHE TOMCAT
APACHE TOMCATAPACHE TOMCAT
APACHE TOMCAT
 
API Asynchrones en Java 8
API Asynchrones en Java 8API Asynchrones en Java 8
API Asynchrones en Java 8
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
 
Tomcat Server
Tomcat ServerTomcat Server
Tomcat Server
 
Apache tomcat
Apache tomcatApache tomcat
Apache tomcat
 
GPU: Understanding CUDA
GPU: Understanding CUDAGPU: Understanding CUDA
GPU: Understanding CUDA
 
Introduction to CUDA
Introduction to CUDAIntroduction to CUDA
Introduction to CUDA
 
Graphics Processing Unit - GPU
Graphics Processing Unit - GPUGraphics Processing Unit - GPU
Graphics Processing Unit - GPU
 
GRAPHICS PROCESSING UNIT (GPU)
GRAPHICS PROCESSING UNIT (GPU)GRAPHICS PROCESSING UNIT (GPU)
GRAPHICS PROCESSING UNIT (GPU)
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 

Plus de Marc Daumas

Dispositifs CIR et JEI
Dispositifs CIR et JEIDispositifs CIR et JEI
Dispositifs CIR et JEIMarc Daumas
 
Ingénierie Dirigée par les Modèles
Ingénierie Dirigée par les ModèlesIngénierie Dirigée par les Modèles
Ingénierie Dirigée par les ModèlesMarc Daumas
 
Systèmes embarqués critiques
Systèmes embarqués critiquesSystèmes embarqués critiques
Systèmes embarqués critiquesMarc Daumas
 
Système, Virtualisation, Nuage
Système, Virtualisation, NuageSystème, Virtualisation, Nuage
Système, Virtualisation, NuageMarc Daumas
 
Aspects réglementaires du CIR
Aspects réglementaires du CIRAspects réglementaires du CIR
Aspects réglementaires du CIRMarc Daumas
 
Introduction de la journée de prospective industrielle d'ASR
Introduction de la journée de prospective industrielle d'ASRIntroduction de la journée de prospective industrielle d'ASR
Introduction de la journée de prospective industrielle d'ASRMarc Daumas
 

Plus de Marc Daumas (6)

Dispositifs CIR et JEI
Dispositifs CIR et JEIDispositifs CIR et JEI
Dispositifs CIR et JEI
 
Ingénierie Dirigée par les Modèles
Ingénierie Dirigée par les ModèlesIngénierie Dirigée par les Modèles
Ingénierie Dirigée par les Modèles
 
Systèmes embarqués critiques
Systèmes embarqués critiquesSystèmes embarqués critiques
Systèmes embarqués critiques
 
Système, Virtualisation, Nuage
Système, Virtualisation, NuageSystème, Virtualisation, Nuage
Système, Virtualisation, Nuage
 
Aspects réglementaires du CIR
Aspects réglementaires du CIRAspects réglementaires du CIR
Aspects réglementaires du CIR
 
Introduction de la journée de prospective industrielle d'ASR
Introduction de la journée de prospective industrielle d'ASRIntroduction de la journée de prospective industrielle d'ASR
Introduction de la journée de prospective industrielle d'ASR
 

Calculs sur GPU

  • 1. AlGorille Project Team Calcul sur GPUs Journée de prospective industrielle d’ASR UPMC‐Paris 6, 3/11/2011 UPMC P i 6 3/11/2011 Stephane Vialle SUPELEC – UMI GT‐CNRS 2958  &   AlGorille INRIA Project Team
  • 2. I – Les unités vectorielles s’invitent  dans les nœuds de calculs  dans les nœuds de calculs Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 3. Les unités vectorielles s’invitent dans les nœuds de calcul Evolution des CPUs Evolution des CPUs Chaque cœur CPU inclut une  h l petite unité vectorielle  (ex: SSE ou AVX) • La puissance des CPUs n’augmentent plus   g p qu’avec le parallélisme • Les CPUs cumulent un Les CPUs cumulent un  grain moyen et un grain  fin de parallélisme (multi‐cœurs + unités vect.) (multi cœurs + unités vect ) W. Kirshenmann, EDF & EPI  AlGorille, d’après une première  AlGorille d’après une première étude menée par SpiralGen Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 4. Les unités vectorielles s’invitent dans les nœuds de calcul Calcul « Calcul « vectoriel » Type de code source Type de code source Exécution float a, b, r; scalaire séquentielle r = a+b; float a[N], b[N], r[N ]; scalaire, mais  séquentielle, mais for (int i = 0; i < N; i++) vectorisable parallélisable r[i] = a[i] + b[i] [i] [i] b[i]; float a[N], b[N], r[N]; vectoriel séquentielle sur un cœur  r = a + b; scalaire, ou scalaire ou parallèle sur un multi‐ cœurs scalaires, ou , massivement parallèle sur  Possibilité d’accélérations  des unités vectorielles importantes Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 5. Les unités vectorielles s’invitent dans les nœuds de calcul Evolution des GPUs Evolution des GPUs Le GPU est un co‐processeur vectoriel puissant et bon marché, porté par le jeu vidéo Le gain de puissance peut être significatif (x100), ou modeste (x2), ou inexistant !  • identifier les cas favorables au GPGPU • savoir à quoi se comparer pour mesurer le gain de perf savoir à quoi se comparer pour mesurer le gain de perf. • savoir écrire des codes GPUs optimisés Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 6. Les unités vectorielles s’invitent dans les nœuds de calcul CPUs et unités vectorielles et unités vectorielles 1 CPU multi‐cœurs 1 CPU multi‐cœurs  1 CPU multi‐cœurs associé  avec des unités SSE/AVX avec des unités SSE/AVX dont un cœur GPU dont un cœur GPU à un (ou n) GPU many coeurs à un (ou n) GPU many‐coeurs On trouve des unités vectorielles à divers niveaux vis‐à‐vis du CPU : • petites et dans les cœurs CPUs • moyennes dans un cœur spécifique du processeur moyennes dans un cœur spécifique du processeur • puissantes dans la carte fille à coté de la carte mère Quelle(s) unités vestorielles utiliser ? Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 7. Les unités vectorielles s’invitent dans les nœuds de calcul Multiplication des mémoires Multiplication des mémoires 1 CPU multi‐cœurs 1 CPU multi‐cœurs  1 CPU multi‐cœurs associé  avec des unités SSE/AVX dont un cœur GPU à un (ou n) GPU many‐coeurs cache cache cache cache cache cache cache cache cache cache h cache cache cache h cache h cache cache cache h RAM  RAM CPU RAM CPU RAM GPU CPU & GPU Plus on utilise un co‐processeur vectoriel puissant : • plus il a sa propre mémoire (RAM et cache) plus il a sa propre mémoire (RAM et cache) • plus il faut de temps pour transférer les données entre les cœurs CPUs et les cœurs vectoriels Ne pas négliger les temps de transferts des données Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 8. Les unités vectorielles s’invitent dans les nœuds de calcul Complexification de la gestion des données Complexification de la gestion des données 1 CPU multi‐cœurs 1 CPU multi‐cœurs  1 CPU multi‐cœurs associé  avec des unités SSE/AVX avec des unités SSE/AVX dont un cœur GPU dont un cœur GPU à un (ou n) GPU many coeurs à un (ou n) GPU many‐coeurs Pour être efficaces les unités vectorielles demandent : • un stockage des données dans un ordre « favorable »  • des accès aux données « dans le bon ordre »   (accès « coalescents »  sur GPUs) Pour chaque technologie vectorielle la stratégie de stockage  P h h l i i ll l é i d k Etude  et d’accès est différente ! menée  avec EDF Portage des calculs + portage du stockage et de l ordre d accès aux données Portage des calculs + portage du stockage et de l’ordre d’accès aux données Quelle pérennité des codes de calculs ? Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 9. II – Programmation GPGPU native  (en CUDA sur GPU Nvidia) (en CUDA sur GPU Nvidia) Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 10. Programmation GPGPU native Aspects matériels Aspects matériels Un « GPU » Nvidia est : • un ensemble de machines  vectorielles indépendantes  partageant une mémoire globale partageant une mémoire globale • une hiérarchie de mémoires de  vitesses et de volumes différents • un co‐processeur vectoriel sous le  contrôle du CPU CPU + RAM Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 11. Programmation GPGPU native Aspects logiciels Aspects logiciels Un programme CPU+GPU est : • un programme CPU séquentiel ou  multi‐threads (mono ou multi‐cœurs) • des appels de fonctions vectorielles  exécutées sur le GPU (« rpc vectoriel ») • une décomposition explicite d dé iti li it des calculs  l l vectoriels  en une grille de blocs de  threads CPU Transfert de GPU données Calculs vectoriels Transfert de résultats Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 12. Programmation GPGPU native Liaison matériel logiciel Liaison matériel‐logiciel Programmation • Du code d’un calcul élémentaire  sur une unité vectorielle • De la définition de la grille de De la définition de la grille de  blocs de threads GPU • De l’exécution de cette  Ordonnancement par le GPU grille de blocs ill d bl • d bl des blocs (de la grille) sur les  (d l ll ) l machines vectorielles du GPU Exécution • des threads (d’un bloc) sur des threads (d un bloc) sur  les unités de calculs d’une  machine vectorielle Possibilité d’influer et  d’optimiser l’ordonnancement et  l exécution du calcul vectoriel …. l’exécution du calcul vectoriel … depuis le code source. Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 13. Programmation GPGPU native Difficultés de la prog. GPGPU native Difficultés de la prog. GPGPU native • Programmation à base de tableaux et d’indices d’accès Programmation à base de tableaux et d indices d accès nombreuses sources de « bugs » • Mi Mise au point difficile : pas d’outil de debug confortable sur le  i t diffi il d’ til d d b f t bl l « périphérique GPU » temps de développement élevés • Obtention de bonnes performances pas facile sur des applications réelles  et complexes : • Optimisation des stockage et accès aux données • Optimisation par « programmation explicite du cache » • Optimisation de la granularité de la grille de blocs de threads p g g • Optimisation de l’enchainement des calculs et des transferts CPU/GPU démarche demandant de l’expertise et du temps Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 14. III – Modèles, outils et stratégie de  développement Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 15. Modèles, outils et stratégie de développement Développement mono noeud Développement mono‐noeud 1 CPU multi‐cœurs + 1 GPU many‐cœurs C/C++ Multithreading CPU Multithreading GPU gcc, icc, … Pthreads, Windows  CUDA, OpenCL Threads, OpenMP,  h d TBB… gcc, icc, gcc, icc, … HMPP (CAPS) HMPP (CAPS) Un nœud de calcul  des clusters de  gcc, icc, … Autres env. de haut niveau en cours de dev. GPU de Supélec p Compétences requises • Pouvoir combiner différents environnements de développement • Savoir combiner différents modèles et paradigmes de programmation • Savoir mettre au point et optimiser des architectures hybrides (CPUs + GPUs) Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 16. Modèles, outils et stratégie de développement Développement multi noeuds Développement multi‐noeuds Supercalculateur Bull « Titane » installé au CCRT (CEA) i llé CCRT (CEA) On cumule 3 paradigmes de  On cumule 3 paradigmes de programmation parallèle  (pour grains gros, moyen et fin) 1 CPU multi‐cœurs + 1 GPU many‐cœurs / C/C++ Envois de messages Multithreading CPU o s de essages u ead g U Multithreading GPU u ead g U gcc, icc, … MPI, … Pthreads, Windows  CUDA, OpenCL Threads, OpenMP, TBB… gcc, icc, … MPI (?) HMPP (CAPS) gcc, icc, … Autres env. de haut niveau en cours de dev. CUDA, OpenCL gcc, icc, … Autres env. de haut niveau en cours de dev. Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 17. Modèles, outils et stratégie de développement Développements à base de bibliothèques vectorielles Développements à base de bibliothèques vectorielles Code C/C++  (+ multithreading CPU + envois de messages CPU)   + appels de fonctions de bibliothèques vectorielles Ex : bibliothèques GPU de FFT, BLAS, RNG, autres … Surcout de développement : faible  Expertise complémentaire nécessaire : faible Accroissement des performances : significatif si  • le problème se prête à une vectorisation • les bibliothèques sont adaptées au problème (à tout le problème) les bibliothèques sont adaptées au problème (à tout le problème) • les transferts de données CPU – GPU nécessaires à l’utilisation des  bibliothèques sont limités  Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 18. Modèles, outils et stratégie de développement Développements complets de codes vectoriels Développements complets de codes vectoriels Code C/C++  (+ multithreading CPU + envois de messages CPU)   ode / ( u ead g U e o s de essages U) + code GPU dédié au problème (+ appels de fonctions de bibliothèques vectorielles) Surcout de développement : élevé Expertise complémentaire nécessaire : élevée p p Accroissement des performances : significatif et meilleur si  • le problème se prête à une vectorisation •lles codes GPU développés sont correctement optimisés d dé l é é Validation du code hybride : très important ! • comparaison des résultats à ceux d’un code purement CPU • développement et validation « step by step » : noyau par noyau Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 19. IV – Exemples de performances p p Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 20. Exemple de performances Exemple de gains très importants Exemple de gains très importants Calculs de Monte‐Carlo totalement réalisés sur GPU Exotic European pricer on clusters of GPU and Exotic European pricer on clusters of GPU and CPU with PLCG CPU using PLCG 1E+05 1E+4 Consummed Watt.h Total Exec Time(s) ) 1E+04 1E+3 1E+03 1E+2 1E+02 E 1E+1 1E+01 1E+00 1E+0 1 10 100 1000 10000 1 2 4 8 16 32 64 128 256 Nb of nodes Nb of nodes Gros travail de portage complet des calculs sur GPUs Gros travail de portage complet des calculs sur GPUs Calculs sur GPU sans transferts CPU – GPU (sauf à l’initialisation et à la fin du pgm) Calculs distribués « Calculs distribués « embarrassingly parallel » sur cluster (pas de communications) » sur cluster (pas de communications) Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 21. Exemple de performances Exemples de gains plus variées Exemples de gains plus variées Pricer ‐ parallel MC EDP Solver ‐ Synchronous Jacobi Relaxation 1E+5 1E+3 1E+4 Execution time (s) cution time (s) 1E+4 ution time (s) 1E+2 1E+3 1E+3 1E+2 1E+1 1E 2 1E+2 Exec Execu 1E+1 1E+0 1E+0 1E+1 1 10 100 1 10 100 1 10 100 Number of nodes Number of nodes Number of nodes Number of nodes Number of nodes Monocore‐CPU cluster Multicore‐CPU cluster Manycore‐GPU cluster Pricer P i – parallel MC ll l MC EDP Solver ‐ Synchronous Jacobi Relaxation bi l i 1E+4 1E+2 1E+3 1E+3 Wh) 1E+2 Energy (W h) h) Energy (Wh Energy (Wh 1E+2 1E+1 1E+1 1E+1 1E+0 1E+0 1E+0 1 10 100 1 10 100 1 10 100 Number of nodes Number of nodes Number of nodes Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 22. IV – Conclusion et perspectives p p Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 23. Conclusion et perspectives Bilan actuel du GPGPU Bilan actuel du GPGPU Les clusters hybrides sont de plus en plus nombreux (grands ou petits) es c uste s yb des so t de p us e p us o b eu (g a ds ou pet ts) Certains codes hybrides sont très performants p Certaines sociétés ont beaucoup investi dans le GPGPU Ex : Energie: Total Finance : Banques Développer un code GPU complet reste une tâche longue et complexe Les unités vectorielles des cœurs CPU gagnent en puissance Intel « sandy bridge » vs GPU ??? Quels sont les investissements pérennes … ? Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 24. Conclusion et perspectives Vision (personnelle) de l avenir Vision (personnelle) de l’avenir Les unités vectorielles sont et seront présentes dans nos calculateurs sous une  forme ou sous une autre (il y a la place dans les puces, et il y a des besoins) Programmer des unités vectorielles demande une compétence spécifique  (algorithmique, programmation mise au point, optimisation) ( l ih i i i i i i i ) Les modèles de programmation vectoriels sont liés à l’architecture pour être efficace (format de stockage des données et stratégie d accès aux données), ils devraient le  (format de stockage des données et stratégie d’accès aux données) ils devraient le rester pendant « quelques années » Investir dans de l’acquisition de compétences en calcul vectoriel. I ti d d l’ i iti d ét l l t i l Apprendre à utiliser les unités vectorielles disponibles dès aujourd’hui. Isoler les noyaux vectoriels du reste du code. Isoler les noyaux vectoriels du reste du code Prévoir que le format de stockage des « vecteurs » peut changer. Comparer les performances des codes hybrides à celles des codes scalaires    optimisés pour juger l’intérêt d’un système hybride. Calcul sur GPUs                                                                                                                  Stephane Vialle
  • 25. Calculs sur GPUs Questions ? Calcul sur GPUs                                                                                                                  Stephane Vialle