Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Disruptif or not disruptif :le GPU
Des myri-alus dans 4cm²
Emmanuel Quémener
Disruptif : “qui sert à rompre”, de disrumpere (rompre)Myriade : “nombre de dix mille”
Emmanuel QUÉMENER CC BY-NC-SA 2/28February 19, 2018
Blaise Pascal Center« Maison de la modélisation » & ...
Hôtel
ProjetsFormations
Conférences
Emmanuel QUÉMENER CC BY-NC-SA 3/28February 19, 2018
CBP également centre d’essaisPlate-forme expérimentale avec 11 plateaux techniques
● Multi-nœuds: 5 clusters de 4 à 64 nœuds, Nœuds/Cœurs : 4/24, 8/64, 8/64, 64/512● Multi-cœurs : plus de 100 machines de 2 à 28 cœurs,
– Nœuds/Serveurs : de 8 à 28 cœurs, Workstations : de 2 à 16 cœurs, 16 types de CPU différents
● GPU & Accélerateur : 52 modèles différents GPU (AMD & Nvidia), 1 Intel MIC– GPGPU : 9 ; GPU Nvidia : 31 ; GPU AMD/ATI : 12 types ; Xeon Phi 7120P
● Intégration : 24 machines virtuelles : Debian de Lenny à Sid sur 32 & 64 bits, ...● Exotic hardware : 3 machines ARMv7 sous Debian Jessie ou Ubuntu● Visualisation 3D : 2 stations , 2 videoprojecteurs, 20 moniteurs, 4 lunettes● Stations virtuelles 3D : plus 40 hosts with x2go/VirtualGL● COMOD avec SIDUS : « Compute On My Own Device » pour utilisateurs de labos
– SIDUS est « Single Instance Distributing Universal System »
● Prototype Galaxy pour le traitement intensif de données biologiques
Emmanuel Quemener 4/28February 19, 2018
Plateau multi-shaders : (GP)GPU52 modèles différents...
GPU Gamer : 18● Nvidia GT 8800GS● Nvidia GTX 560 Ti● Nvidia GTX 680● Nvidia GTX 690● Nvidia GTX Titan● Nvidia GTX 780● Nvidia GTX 780 Ti● Nvidia GTX 750● Nvidia GTX 750 Ti● Nvidia GTX 960● Nvidia GTX 970● Nvidia GTX 980● Nvidia GTX 980 Ti● Nvidia GTX 1050 Ti● Nvidia GTX 1060● Nvidia GTX 1070● Nvidia GTX 1080● Nvidia GTX 1080 Ti
GPU desktop & pro : 13● Nvidia Quadro 600● Nvidia Quadro 4000● Nvidia Quadro K2000● Nvidia Quadro K4000● Nvidia Quadro FX4800● Nvidia NVS 310● Nvidia NVS 315● Nvidia GT 430● Nvidia GT 620● Nvidia GT 640● Nvidia GT 710● Nvidia GT 730● Nvidia GT 1030
GPU AMD Gamer & al : 12
● AMD Radeon HD 5850● AMD Radeon HD 7970● AMD R9 380● AMD R9 290X● AMD R9 295x2● AMD R9 Fury● AMD Nano Fury● AMD Radeon HD 6450● AMD Radeon HD 6670● AMD R7 240● AMD Kaveri A10-7850K● AMD RX Vega 64
GPGPU : 9● Nvidia Tesla C1060● Nvidia Tesla M2050● Nvidia Tesla M2070● Nvidia Tesla M2090● Nvidia Tesla K20m● Nvidia Tesla K40c● Nvidia Tesla K40m● Nvidia Tesla K80● Nvidia Tesla P100
Emmanuel QUÉMENER CC BY-NC-SA 5/28February 19, 2018
Centre Blaise Pascal ~ Dryden FRPetit exemple illustratif
● Nasa X-29● Cellule de F-5● Moteur de F-18● Train de F-16● Études de
– Plans « canard »– Incidence >50°– « Fly-By-Wire »
Recycler, réutiliser & explorer de nouveaux domaines
Emmanuel QUÉMENER CC BY-NC-SA 6/28February 19, 2018
Quel point de vue ?Le point de vue d’un physicien...● Approche « système » du physicien
– Héritage des ordinateurs analogique– Un « système » informatique :
● réseau / matériel / OS / logiciels / codes / usages / ...
● Approche « Saint Thomas »– Appréhension par ma seule mesure
● Pilote d’essai – Caractérisation, recherche d’une exploitation optimale
Emmanuel QUÉMENER CC BY-NC-SA 7/28February 19, 2018
Il y a une génération (humaine)...Un film de série B de 1984
● 1984 : The Last Starfighter– 27 minutes de CGI– 22.5 10 opérations par image⁹
– 1 Cray X-MP (130 kW)– 66 jours (en fait, il a fallu 1 an)
● 2017: sur la GTX 1080Ti (250 W)– 3.4 seconds– Comparaison GTX1080Ti / Cray
● Performance : x1600000 !● Consommation / ~ 10⁹
Emmanuel QUÉMENER CC BY-NC-SA 8/28February 19, 2018
Pourquoi le GPU est « disruptif » ?Le « grand détournement » en HPC
● Dans une conférence à l’ENS-Cachan 2006Q1, ceci... – x100 en 5 ans
● Entre 2000 et 2015– GeForce 2 Go/GTX 980Ti : de 286 à 2816000 MOperations/s : x10000– Pour un CPU de station de travail : x100
Emmanuel QUÉMENER CC BY-NC-SA 9/28February 19, 2018
Au commencement de toutres choses● Nvidia lance le « superordinateur personnel »● Quand : 2008-11-19 Qui : Nvidia● Où : sur Tom's Hardware;-)● Quoi : une carte PCIe Tesla C1060 PCIe avec 240 cœurs● Combien : 933 Gflops Float32 (mais 78 Gflops Float64)
Emmanuel QUÉMENER CC BY-NC-SA 10/28February 19, 2018
Pourquoi un GPU est-il si puissant ?Pour construire une image 3D !● 2 approches:
– Raytracing : PovRay (« dimensions » de UMPA)– Shadering : 3 opérations
● « Raytracing » :– De l’œil au contact de chaque objet
● « Shadering »– Model2World: objets vectoriels placés dans la scène– World2View: objets vectoriels projetés sur un « plan » vectoriel– View2Projection: pixellisation du « plan » vectoriel
Emmanuel QUÉMENER CC BY-NC-SA 11/28February 19, 2018
Pourquoi le GPU est-il si puissant ?Shadering & Calcul Matriciel
● Model 2 World: 3 produits de matrice– Rotation– Translation– Mise à l’échelle
● World 2 View: 2 produits de matrice– Positionnement de la caméra– Ligne de vue
● View 2 Projection– Pixellisation
Donc, à l’origine, le GPU, un gros multiplicateur de Matrice
W2V
M2W
V2P
Emmanuel QUÉMENER CC BY-NC-SA 12/28February 19, 2018
Combien de composants ?Grosse différence entre GPU/CPU
● Opérations– Multiplication de matrice– vectorisation– "Pipelining"– Shader (multi) processor
● Implementation : 1993– OpenGL, Glide, Direct3D,
● Généricité : 2002– CgToolkit, CUDA, OpenCL
GTX 1080 TiGTX 1080 Ti
3584 3584 cudacorescudacores
Emmanuel Quemener 13/28February 19, 2018
Comment différencier CPU/GPUQuestion de battement, de cœurs ?
● Sur un GPU, cohérence entre performances théorique & pratiques● Sur un CPU, performance relative meilleure
Performance ThéoriquePerformance en 32 bits
“Pi Dart Dash”
Domaine des (GP)GPUs
Domaine des CPUs
Emmanuel QUÉMENER CC BY-NC-SA 14/28February 19, 2018
Pourquoi un GPU est-il si puissant ?Le retour à une base générique
Dans le GPU● Unités très spécialisées● Efficacité du pipelining● Perte de généricité● Scènes variables● Nature des détails
La solution :Revenir à des fonctions plus générales !
Emmanuel Quemener 15/28February 19, 2018
Tesla P100 GTX 1080Ti Vega64 Xeon Phi Ryzen7 1800 Skylake i7-6700K E5-2680v4 x20.00
1000.00
2000.00
3000.00
4000.00
5000.00
6000.00
7000.00
8000.00
9000.00
10000.00
OpenBLAS DP
clBLAS DP
Thunking DP
CuBLAS DP
OpenBLAS SP
clBLAS SP
Thunking SP
CuBLAS SP
Est-ce que le GPU est si puissant ?xGEMM pour mes meilleures MyriALUs...
Teslafor
Pros
AMDFor Alt’
CPU
GTXfor
Gamers
Emmanuel Quemener 16/28February 19, 2018
BLAS, le match : CPU vs GPUxGEMM quand x=D(P) or S(P)
Tesl
a C10
60
Tesl
a M20
90
Tesl
a K20m
Tesl
a K80
Tesl
a P100
Quadr
o k400
0
GTX 5
60 Ti
GTX 6
90
GTX 7
80
GTX Ti
tan
GTX 7
80Ti
GTX 98
0
GTX 9
80Ti
GTX 1
080
GTX 1
080T
i
HD7970
R9-29
5x #1
R9 Fur
y
Nano
Xeon
Phi
FX95
90
Ryzen
7 18
00
E6300
x555
0 x2
E5-266
5 x2
E5-26
40v3
x2
E5-268
7v3 x2
E5-264
0v4 x2
E5-268
0v4 x2
0.00
1000.00
2000.00
3000.00
4000.00
5000.00
6000.00
7000.00
8000.00
9000.00
10000.00OpenBLAS DP clBLAS DP
Thunking DP CuBLAS DP
OpenBLAS SP clBLAS SP
Thunking SP CuBLAS SPTeslafor
Pros
GTXfor
Gamers
AMDForAlt*
CPU
CuBLAS
clBLAS
OpenBLAS
Emmanuel QUÉMENER CC BY-NC-SA 17/28February 19, 2018
Déjà, en 2010, des trucs étranges ...La Tesla C1060 ...
● Un produit matriciel : xGEMM– Propriété: Transposé (A * B) = - Transposé (A) * Transposé (B)
● Résultats (en Gflops): Yess!– SP: FBLAS / CBLAS: 12, CuBLAS: 350/327: x27 !!!– DP: FBLAS / CBLAS: 6, CuBLAS: 73/70: x11!
● Surprise : Mmmm! CuBLAS préfère the x16!– SP: 16000², 350, but 15999² or 16001², 97: x3.6!– DP: 10000², 73, but 9999² or 10001², 31: x2.35
Emmanuel QUÉMENER CC BY-NC-SA 18/28February 19, 2018
Ce que Nvidia ne diffuse pas...xGEMM sur un large domaine...
GTX 1080
La performance est là, mais pas tout le temps...Taille
Tesla P100
Performance
Emmanuel QUÉMENER CC BY-NC-SA 19/28February 19, 2018
Petit tour d’horizon du parallélisme
● OpenCL «apparaît» comme le plus polyvalent :-)● CUDA ne peut être utilisé qu’avec les GPU Nvidia● Les accélérateurs « semblent » plus agnostiques...
Cluster Node CPU Node GPU Node Nvidia Accelerator FPGA
MPI Yes Yes Non No Yes* No
PVM Yes Yes No No Yes* No
OpenMP No Yes No No Yes* No
Pthreads No Yes No No Yes* No
OpenCL No Yes Yes Yes Yes Yes
CUDA No No No Yes No No
TBB No Yes No No Yes* No
Modèles de programmation parallèle
Emmanuel QUÉMENER CC BY-NC-SA 20/28February 19, 2018
Différences entre CUDA/OpenCLLe « kernel », le noyau de calcul
__device__ ulong MainLoop(ulong iterations,uint seed_w,uint seed_z,size_t work)
{
uint jcong=seed_z+work;
ulong total=0;
for (ulong i=0;i<iterations;i++) {
float x=CONGfp ;
float y=CONGfp ;
ulong inside=((x*x+y*y) <= THEONE) ? 1:0;
total+=inside;
}
__global__ void MainLoopBlocks(ulong *s,ulong iterations,uint seed_w,uint seed_z)
{
ulong total=MainLoop(iterations,seed_z,seed_w,blockIdx.x);
s[blockIdx.x]=total;
__syncthreads();
}
ulong MainLoop(ulong iterations,uint seed_z,uint seed_w,size_t work)
{
uint jcong=seed_z+work;
ulong total=0;
for (ulong i=0;i<iterations;i++) {
float x=CONGfp ;
float y=CONGfp ;
ulong inside=((x*x+y*y) <= THEONE) ? 1:0;
total+=inside;
}
return(total);
}
__kernel void MainLoopGlobal(__global ulong *s,ulong iterations,uint seed_w,uint seed_z)
{
ulong total=MainLoop(iterations,seed_z,seed_w,get_global_id(0));
barrier(CLK_GLOBAL_MEM_FENCE);
s[get_global_id(0)]=total;
}
Emmanuel QUÉMENER CC BY-NC-SA 21/28February 19, 2018
Agir en « intégrateur »Pour ne pas réinventer la roue...
● Les librairies classiques utilisables avec les GPU– Nvidia fournit plein d’implémentations (BLAS, FFT, ...)– OpenCL en fournit certaines, mais pas complètes !
Librairies de programmation parallèlesCluster Nœud CPU Nœud GPU Nœud Nvidia Accélerateur
BLAS BLACSMKL
OpenBLASMKL
clBLAS CuBLASclBLAS
MKLclBLAS
LAPACK ScalapackMKL
AtlasMKL
clMAGMA MAGMA MagmaMIC
FFT FFTw3 FFTw3 clFFT CuFFT clFFT FFTw3 clFFT
Emmanuel QUÉMENER CC BY-NC-SA 22/28February 19, 2018
Pourquoi OpenCL ?Une histoire pas vraiment « politiquement correcte »
● Autour de 2005, MacOSX a besoin de plus de puissance– Des traitements peuvent être déchargés au GPU– CUDA émerge comme le successeur de CgToolkit
● Mais Apple ne veut pas être prisonnier...– (comme ses utilisateurs ;-) )
● Apple lance la création du consortium Khronos– AMD, IBM et ARM viennent rapidement– … et Intel & Nvidia traînent les pieds mais arrivent...
Emmanuel QUÉMENER CC BY-NC-SA 23/28February 19, 2018
Ce que OpenCL offre...10 implémentations sur x86● 3 implémentations pour CPU:
– Celle d’AMD: l’historique ...– Intel's: très efficace (mais pas toujours)– Celle OpenSource PortableCL (POCL)
● 4 implémentations pour GPU:– Celle d’AMD : pour ses cartes...– Celle de Nvidia: pour les circuits éponymes– "Beignet": version Open Source pour les circuits Intel (très récents)– Mesa: version Open Source pour les circuits récents mais pas trop...
● 1 implémentation pour Accélérateur:– Intel's: for the MIC Xeon Phi Knight Corner
● 1 implémentation pour FPGA :– Celle d’Altera notamment (racheté par Intel)
● Pour les autres plates-formes, possible (possible mais pas la moindre expérience)
Emmanuel QUÉMENER CC BY-NC-SA 24/28February 19, 2018
Après le CPU et le GPU,Définition du QPU et de l’EPU● PR: "Parallel Rate" or « Régime de parallélisme »● CPU: Central Processing Unit● GPU: Graphical Processing Unit● QPU: Quantum Processing Unit
– Pour un usage, on lance avec PR = 1– Exemple: lancement de Threads = 1, Blocks = 1 ou Work Items = 1
● EPU: Equivalent Processing Unit– Pour un usage, performance optimale obtenue pour un certain PR– Exemple: pour une GTX1080Ti, maximum pour 16x le nombre de « cudacores »
Emmanuel QUÉMENER CC BY-NC-SA 25/28February 19, 2018
X555
0
E5-26
65
E5-26
20v2
E5-26
37v2
E5-26
87v3
Xeon
Phi
R9-29
5X
R9-29
0
GTX Ti
tan
Quadr
o K40
00
Tesla
K40
c
GTX 9
80Ti
GTX 1
080
1000000
10000000
100000000
1000000000
PiOpenCLPiOCL BasePiOpenCL Boost
Pour 1 de QPU, « bas régime » ...Le CPU explose le GPU!● De 20 à 50x plus lent !
● 1.5 ordre de magnitudeX5550
E5-2665
E5-2620v2
E5-2637v2
E5-2687v3
Xeon Phi
R9-295X
R9-290
GTX Titan
Quadro K4000
Tesla K40c
GTX 980Ti
GTX 1080
0.00
E+00
5.00
E+07
1.00
E+08
1.50
E+08
2.00
E+08
2.50
E+08
PiOpenCL
PiOCL Base
PiOpenCL Boost
Emmanuel QUÉMENER CC BY-NC-SA 26/28February 19, 2018
Pour préparer la prochaine…Et Python dans tout ça ?
MPI/C
MPI+OpenMP/C
MPI+PyOpenCL NoHT
MPI+PyOpenCL HT
0.00
E+00
2.00
E+10
4.00
E+10
6.00
E+10
8.00
E+10
1.00
E+11
1.20
E+11
1.40
E+11
Itops
ITOPS
● 64 nœuds avec 512 cœurs● 3 implémentations (2 hybrides)
Emmanuel QUÉMENER CC BY-NC-SA 27/28February 19, 2018
Tesla
C10
60
Tesla
M20
70
Tesla
M20
90
Tesla
K20
m
Tesla
K40
m
Tesla
K80
#1
Tesla
K80
+pT
hrea
ds
Tesla
P10
0
NVS 315
Quadr
o 400
0
Quadr
o K20
00
Quadr
o K40
00
GTX 560T
i
GTX 680
GTX 690 #
1
GTX 780
GTX Titan
GTX 780T
i
GTX 750
GTX 750T
i
GTX 960
GTX 970
GTX 980
GTX 980T
i
GTX 1050
Ti
GTX 1080
GTX 1080
Ti
GT 430
GT 620
GT 640
GT 710
GT 730
HD 5850
HD 6450
HD 7970
Kaver
i A10
-785
0K G
PU
R7 240
Nano F
ury
R9 Fur
y
R9 380
R9 290
R9 295
X2 #1
MIC
Phi
7120
P
AMD F
X-959
0
AMD R
yzen
7 180
0
1x In
tel P
entiu
m M 75
5
1x In
tel P
entiu
m E63
00
2x In
tel X
5550
4c M
PI+C
2x In
tel X
5550
4c
2x In
tel 26
87v3
10c
2x In
tel 26
80v4
14c
Cluster
64n8
c MPI+
PyCL N
oHT
Cluster
64n8
c MPI+
PyCL H
T
Cluster
64n8
c MPI/C
Cluster
64n8
c MPI+
OpenM
P/C
0E+00
2E+10
4E+10
6E+10
8E+10
1E+11
1E+11
1E+11
2E+11
2E+11
Pi Monte Carlo: le match ...Python vs C & CPU vs GPU vs Phi
Teslafor
Pros
GTXfor
Gamers
AMD/ATI
CPU
Emmanuel QUÉMENER CC BY-NC-SA 28/28February 19, 2018
Et que faut-il en retenir ?Caractériser pour éviter les regrets● Ce qu’il faut retenir :
– Dans une machine standard, en 2018, la « puissance brute » est dans le GPU– Pour un parallélisme faible, le CPU est beaucoup plus efficace que le GPU– Le GPU l’emporte seulement si le régime de parallélisme est supérieur à 1000– Le GPU ne délivre sa puissance optimale « que » pour certains PR– Sans caractérisation systématique, des déconvenues sont à prévoir– OpenCL est le meilleur compromis pour programmer les *PU– Python reste la meilleure approche pour programmer OpenCL
● Que faut-il faire ? Expérimenter !