Calculs sur GPU

2,151 views
2,008 views

Published on

Support de la présentation de Stéphane Vialle.

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,151
On SlideShare
0
From Embeds
0
Number of Embeds
303
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Calculs sur GPU

  1. 1. AlGorille Project Team Calcul sur GPUsJourné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. 2. I – Les unités vectorielles s’invitent  dans les nœuds de calculs  dans les nœuds de calculsCalcul sur GPUs                                                                                                                  Stephane Vialle
  3. 3. Les unités vectorielles s’invitent dans les nœuds de calcul Evolution des CPUs Evolution des CPUsChaque cœur CPU inclut une  h lpetite 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 SpiralGenCalcul sur GPUs                                                                                                                  Stephane Vialle
  4. 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 importantesCalcul sur GPUs                                                                                                                  Stephane Vialle
  5. 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ésCalcul sur GPUs                                                                                                                  Stephane Vialle
  6. 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. 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éesCalcul sur GPUs                                                                                                                  Stephane Vialle
  8. 8. Les unités vectorielles s’invitent dans les nœuds de calculComplexification de la gestion des donnéesComplexification 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. 9. II – Programmation GPGPU native  (en CUDA sur GPU Nvidia) (en CUDA sur GPU Nvidia)Calcul sur GPUs                                                                                                                  Stephane Vialle
  10. 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 + RAMCalcul sur GPUs                                                                                                                  Stephane Vialle
  11. 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ésultatsCalcul sur GPUs                                                                                                                  Stephane Vialle
  12. 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. 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 tempsCalcul sur GPUs                                                                                                                  Stephane Vialle
  14. 14. III – Modèles, outils et stratégie de  développementCalcul sur GPUs                                                                                                                  Stephane Vialle
  15. 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. 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. 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. 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 noyauCalcul sur GPUs                                                                                                                  Stephane Vialle
  19. 19. IV – Exemples de performances p pCalcul sur GPUs                                                                                                                  Stephane Vialle
  20. 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.hTotal 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. 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 ExecExecu 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 nodesCalcul sur GPUs                                                                                                                  Stephane Vialle
  22. 22. IV – Conclusion et perspectives p pCalcul sur GPUs                                                                                                                  Stephane Vialle
  23. 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. 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. 25. Calculs sur GPUs Questions ?Calcul sur GPUs                                                                                                                  Stephane Vialle

×