SlideShare une entreprise Scribd logo
1  sur  110
Multi-GPU-Computing:
Eins, zwei, drei, ganz viele
Jörn Dinkla
para//el 2015
Karlsruhe, 22. 4. 2015
Version 0.1
 Tablet, PC, Großrechner, Cloud, Spielkonsole,
Autos …
GPU-Computing ist überall
 Schnelle erste Erfolge
 2x – 5x Speedup
 Dann wird es schwieriger …
 Oft sind 10x drin
Speedup
2 3 4 5 6 7 8 9 10 11 …
„Enabler“
 Bis zu 16 GPU pro Knoten
 Abhängig von
 Mainboard, CPU, Chipsatz, PCIe-Controller
Multi-GPU
 2 GPUs
 3 GPUs
 …
 Erreichbar? Amdahl‘s Gesetz?
X-facher Speedup?
4 6 8 10 12 14 16 18 20
6 9 12 15 18 21 24 27 30
Frameworks im Überblick
C ++ 11
C ++
C
Device
Framework
CUDA
C++
AMP
DirectX
AMDTreiber
TDD
WDDM
Thrust
C++-
Wrapper
Library
OpenCL
Bolt
Intel
AMD
 CUDA
⊕ Am meisten verbreitet
⊕ C++ 11
⊖ nur NVIDIA-Hardware
 C++ AMP
⊕ C++ 11
⊖ Einschränkungen wegen DirectX (bisher)
⊖ geringe Verbreitung
 OpenCL
⊕ Apple, Intel, AMD
⊖ Geringer Abstraktionsgrad, C99
⊖ Nicht so viele Libraries wie bei CUDA
Vor- und Nachteile
1. Partitioning
2. Communication
3. Agglomeration
4. Mapping
 Siehe http://www.mcs.anl.gov/~itf/dbpp/
PCAM-Methodik
 … und parallele Datenstrukturen
 … und partitionierte Datenstrukturen
 Aufgabenstellung ähnlich
 Egal ob Multi-
 -CPU,
 -Core
 oder -GPU
Parallele Algorithmen
Speicher und Synchronisation
1 GPU, Daten passen
 Partionierung u. „Swapping“ erforderlich
1 GPU, Daten passen nicht
 Partionierung erforderlich
2 GPUs, Daten passen
Szenario für
den Vortrag
 Partionierung u. „Swapping“ erforderlich
2 GPUs, Daten passen nicht
 Listen, Arrays
 2D: Ebenen, Bilder
 3D: Volumen
 Ganz
 Als Vektor/Liste von Ebenen
 Grids, Gitter
 Einfach zu partitionieren
Regelmäßige Datenstrukturen
Regelmäßige Datenstrukturen
Teilung nach Anzahl Elemente
x y*z x/2 * y
y z x*y/2
z 2 x*y*z/2
Kopie
 Bäume
 Teilbäume als Partitionen
 Graphen
 Zusammenhangskomponenten
 Klein genug? Gleich groß?
Unregelmäßige Datenstrukturen
 Graph Partitioning / Clustering
 Aufteilung gemäß Kostenfunktion
 Im allg. NP vollständig
 Minimale „cuts“
 Social Networks und Big Data
 Apache Spark und GraphX
 Kernighan-Lin, 𝑂(𝑛3
)
 Buluc et. al. „Recent Advances in GP“ 2013
Unregelmäßige Datenstrukturen
 Homogen (Gleiche GPUs)
 Gleiche Arbeit
 Inhomogen (Unterschiedliche GPUs)
 Messen und gewichten
 Wie bei CPUs
 Work-Balancing / Job-Stealing
 Scheduling-Theory
 Divisible Load Theory
Scheduling
 Nicht das Rad neu erfinden!
 „best practices“
 „think parallel“
 Tip
 McCool et. al.
 „Structured Parallel Programming“
 Intel-lastig, Cilk Plus, TBB
Parallele Patterns
Parallele Patterns
Siehe http://www.parallelbook.com/
 P: Elemente
 C: Keine
 „embarassingly parallel“
 A: Granularität
 CPU vs. GPU
 Großer Unterschied!
 M:
 TBB, OpenMP, CUDA, etc.
Map mit PCAM
 Beispiele
 Durchschnitt, Smoothing
 PDEs
 P, A, M wie Map
 C: Nachbarschaft
 Optimierung
 Speicherzugriffe und Cache
 Berechnungen speichern
Stencil mit PCAM
 Wärmeleitungsgleichung in 2D
 Stencil
o[x,y] += c* ( i[x-1,y] + i[x+1,y]
+ i[x,y-1] + i[x, y+1]
- 4 * i[x,y] )
Beispiel: Heat-Simulation
 Initialisiere Wärmequelle heat
 prev := 0
 Für alle Iterationen
 Addiere Wärmequellen prev += heat
 current := stencil(prev)
 Tausche prev und current
Ablauf
 Daten
 Buffer(float) für Wärmequelle
 Buffer(float) für prev und current
 Kernel
 add_heat() bzw. mask()
 stencil()
 Optional
 Buffer(uchar4)
 Kernel für Umwandlung
Zu implementieren …
Obfuscation
Aus Wilt „The CUDA Handbook“, S. 218
„Index-
Schlacht“
OptimiertNachteil: Speicherorganisation
fest verdrahtet
 Größe / Extension
 width, height
 index(x,y)
 in_bounds(x,y)
 in_bounds_strict(x,y)
Extent2
0 1 2 3
0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1
2
3
Stencil-Kernel (CUDA 7.0)
 Vor Kernel-Aufruf
 Wechsel der Abstraktionsebene
 Host zu Device
 Von C++-Datenstrukturen zu Device-Pointern
Aufruf des Kernels
Kernel-Aufruf
 Basis BaseBuffer
 HostBuffer
 Unpinned (C++)
 Pinned (CUDA, nicht swapbar)
 Lokaler Speicher (NUMA)
 DeviceBuffer (CUDA)
 ManagedBuffer (CUDA)
Buffer
 GPU besteht aus mehreren SM/CU
 Thread-Block wird festen SM zugewiesen
 Warp / Wavefront
 Kleinste Scheduling-Einheit
 32 bei NVIDIA, 64 bei AMD
 Occupancy
Warps und Wavefronts
W0SM* W1 W2 W3 W4 -- -- --
 Thread-Block (Work group, tile)
 Performance, abhängig von Hardware
 Grid (NDRange)
 Beispiel
 Daten 8x8
 Grid 2x2
 Block 4x4
Grid = Data/Block
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
0 1
2 3
Daten, Pixel, Voxel Grid
 kernel<<<g, tb, sm, s>>>(params)
 Kernel-Konfiguration
 dim3 Grid g
 dim3 Thread-Block tb
 Größe des Shared-Memory sm
 cudaStream_t s
 Oft abhängig vom Extent2
 CudaExecConfig(Extent2& e)
CudaExecConfig
mask() / add_heat()
 Single Instruction Multiple Threads!
 Mask-Bit für jeden Thread im Warp
SIMT - Divergenz
0 1 2 3
int tid = treadIdx.x;
if (tid < 2) {
call_expensive_function()
} else {
call_expensive_function2()
}
Warps Code
 CUDA
 Nsight (Visual Studio, Eclipse)
 nvvp, Visual Profiler (Eclipse)
 Kommandozeile nvprof
 OpenCL
 Intel Vtune (*)
 AMD CodeXL
 C++ AMP
 Visual Studio 2013
 Concurrency Visualizer
Profiling
 Computation Bound
 Alle Prozessoren 100% ausgelastet
 Memory Bound
 Bandbreite zum Speicher voll ausgelastet
 Latency Bound
 Warten auf die Daten
Arten der Auslastung
NVVP sagt zu stencil()
Arithmetische
Intensität 1/5
 Nicht optimal
 Arithmetische Intensität niedrig
 #Berechnungen / #Speichertransfers
 Möglichkeiten
 Mask()
 Textur-Speicher ausprobieren
 Stencil()
 Zwischenspeichern im Shared-Memory
Fazit Single GPU
 Partitionierte Map
Map mit Multi-GPU
 „Overlap“
Stencil mit Multi-GPU
 Halo
 Ghost Cells
 „Overlap“
Iterierter Stencil
 Initialisiere Wärmequelle heat
 Für jede GPU
 Initialisiere Buffer prev und current
 Kopiere Teil von heat auf‘s Device
 prev := 0
 Für alle Iterationen
 Für jede GPU
 Addiere Wärmequellen prev += heat
 current := stencil(prev)
 Tausche prev und current
 Kopiere Halo/Ghost Cells zu Nachbarn
 Kopiere Ergebnisse aller GPUs auf Host
Ablauf (Multi)
 Host (wie bisher)
 Wärmequellen
 Endergebnis
 Benötigt pro GPU
 Buffer für prev und current
 Heat-Buffer (Ausschnitt)
Datenstrukturen (Multi)
 cudaGetDeviceCount(int* count)
 Ermittelt Anzahl der Devices
 cudaGetDeviceProperties(cudaDevice
Prop* prop, int device)
 Eigenschaften des Devices
 cudaSetDevice(int device)
 Setzt Device für aktuellen Thread
 Betrifft alle folgenden cuda*-Funktionen
Multi-GPU mit CUDA
 Jeder Thread hat CUDA-Kontext
 Dieser speichert aktuelle GPU
 Kernel
 Nur Speicher auf gleichem Device!
 Vorsicht bei Bibliotheken
 Z. B. Thrust
Multi-GPU mit CUDA
Partition, CudaPartition
GPU
 Explizit einschalten
 cudaDeviceCanAccessPeer(&i,d,e)
 cudaDeviceEnablePeerAccess(e,0)
 Einschränkungen
 Nicht Windows u. WDDM
Peer-to-Peer-Kopien
D2D
2D-Partition
2D-Partition auf Device
 mask()-Kernel
 Verschiedene Extents für Quelle und Ziel
mask()
Erinnerung: mask()
mask() mit Offset
Pos2
 Mit_overlap zu mit_overlap
 Kernel nur für inneren Bereich aufrufen
stencil()
Erinnerung: stencil()
stencil() mit Offset
Multi-GPU in CUDA
Halo vergessen?
Kopieren der Halos
XExtent2
Region2
Init in CUDA
Update in CUDA #1
Update in CUDA #2
Async!
 Wichtig: cudaDeviceSynchronize() parallel
Analyse mit NVVP / Nsight
Orange seq.
Orange par.
 Aktuelle Hardware
 Intel i7-5930K, 4,0 Ghz
 16 GB DDR4 RAM, 2,4 Ghz
 2x NVIDIA GTX 970, Standard-Clocks
 2x 16x PCIe 3.0
 OS
 Windows 7 bzw. Ubuntu 14.10
Benchmark Testsystem
Speedups
10x
Speedups Multi-GPU
1,955x
 1,955 Speedup bei 2 GPUs
 Und was bei 3, 4 oder mehr Karten?
 Problem:
 PCIe-Bus skaliert nur begrenzt
 Bandbreite ist begrenzt
 Anzahl der Geräte ist begrenzt
Und bei mehr GPUs?
 Lane ist 1 bit, full duplex
 Punkt-zu-Punkt Verbindung
 1,2,4,8,12 oder 16 Lanes
 Geschwindigkeiten
 2.0: pro Lane 500MB/s, max. 8 GB/s
 3.0: pro Lane 1GB/s, max. 16 GB/s (*)
 Controller
 Hat max. Anzahl Lanes
PCIe
 Grafikkarte x16
 CPU hat 40 Lanes
 => max. 2 x16 + 1x8
 bis zu 4 x8
PCIe
D2D
 Anzahl PCIe-Slots auf Mainboard
 Anzahl Lanes des PCIe-Controller
 Anzahl der Switches / IOHs
 4, 8 oder 16 GPUs
 Wichtig ist die Bandbreite nicht zu überladen
 Praxiserfahrung:
 3 GPUs waren bei vielen Kopien schneller
als 4 GPUs
Anzahl der GPUs
PCIe Switch
D2D D2DD2D
 Kein D2D über QPI
NUMA
D2D D2D
 Rechts-Links
 „Rechts“ Erst Kopie von g zu g+1
 „Links“ Dann von g zu g -1
Kopieren der Halos
PCIe-Bus
 …
 Für alle Iterationen
 Für jede GPU
 Addiere Wärmequellen prev += heat
 current := stencil(prev)
 Tausche prev und current
 Kopiere Halo/Ghost Cells zu Nachbarn
 …
Ablauf (Multi)
Kopieren der Halo‘s #2
 Aktuelle GPUs können gleichzeitig
 Kernel, 1 Kopie hin u. 1 Kopie zurück
Streaming
 …
 Für alle Iterationen
 Für jede GPU
 Berechne nur den Halo („Spezialkernel“)
 Kopiere Asynchron zu Nachbarn
 Berechne Teil ohne Halo
 …
Modifizierter Ablauf (Multi)
Kopieren der Halo‘s #2
Code-Komplexität
vs. Performance
 Abhängig von Implementierung und Hardware
 Wie groß sind die Halos?
 Lässt sich die Kopie hinter dem Kernel
verstecken?
 Ab wie vielen GPUs ist der Bus ausgelastet?
 Gibt es Stau („contention“) auf dem Bus?
Lohnt sich das?
 Viele melden Erfolge …
Linearer Speedup
http://on-demand.gputechconf.com/gtc/2015/posters/GTC_2015_Computational_Physics_03_P5122_WEB.pdf http://on-demand.gputechconf.com/gtc/2015/presentation/S5585-Wei-Xia.pdf
 2016 Pascal
 4 „Connections“ per GPU
 Jede 20GB/s peak, 16GB/s praktisch
 US DoE, Summit 2017 150-300 PetaFLOPS
NVLINK
C++ AMP
 Daten: array, array_view
 Kernel: parallel_for_each
Single GPU mit AMP
DoubleBuffer<T>
Single GPU mit AMP #2
 restrict(amp)
 Extent2 hat schon __device__
Extent2AMP
Single GPU mit AMP #3
x, y: andere
Reihenfolge!
 GPU heißt „accelerator“
 accelerator_view ist logische Sicht
 Argument zu parallel_for_each
Multi-GPU mit C++ AMP #1
view
 array_view logische Sicht auf ein array
 array<float> name(size, view)
Multi-GPU mit C++ AMP #2
 „D2D“-Kopien
 Aber:
 Über Host
 Nicht parallel zu parallel_for_each
Multi-GPU mit C++ AMP #3
OpenCL-stencil()
Kein
Extent2
Kein C++
11
OpenCL und C++Bindings
 Platform
 Device
 Context
 Program
 Kernel
 Buffer, Image
 CommandQueue
 Event
Übersicht OpenCL
Platform
Device
 Context wird mit vector<> angelegt
 Für jedes Device eine Queue
Single-Context, Multi-Device
 OpenCL-Objekte „shared“
 MemObjects, Programs, Kernels
 MemObjects brauchen explizite Kopie
 Kein D2D
 Support für Partitions / Multi-GPU
 Offsets für Kernel und Kopien
 SubBuffer
Single-Context, Multi-Device
 Pro Device einen Context
 Alles separat und redundant
 Evtl. einfacher zu programmieren
 Scatter/Gather/Broadcast statt SubBuffer
 Aufpassen bei der Datenhaltung
 Einfache Erweiterung
 Multi-Node oder heterogenes System
Multi-Context & Multi-Device
 Von Single- zu Multi-GPU
1. Partionierung einführen
2. Vervielfachung der Datenstrukturen
3. Kernel erweitern
 Mit Offsets und weiteren Extents
Zusammenfassung
 Parallele Algorithmen
 … und partitionierte Datenstrukturen
 Hardware
 PCIe-Problematik
 Kompetenter PC-Hersteller notwendig
 Fazit
 Gute Speedups möglich
 Wenn Halo-Kopien klein
 und/oder hinter Kernel versteckt
 Skaliert wegen PCIe nur begrenzt
Fazit
Multi-Node
 Das gleiche Partitionierungsproblem
 Kommunikation zwischen Nodes
 Kein Shared-Host-Memory mehr
 MPI_Send()
 MPI_Recv()
 GPU-spezifische Erweiterungen
 OpenMPI, MVAPICH2
Multi-Node mit MPI
 Titan
 18688 Opterons und 18688 Tesla K20X
 Nr. 2 in Top 500
Multi-Node
Nur am Rande
…
 Folien
http://dinkla.net/parallel2015
 Sourcecode
https://github.com/jdinkla/parallel2015_gpuco
mputing
Organisatorisch
 Schwerpunkte
 Parallele Systeme
 C++ und Java/JVM
 GPU-Computing
 CUDA, OpenCL, C++ AMP
 Big Data, BI, Data Science
 http://www.dinkla.com
Last but not least
Fragen?
Sprechen Sie mich
an oder
joern@dinkla.com

Contenu connexe

En vedette

Ankaufprogramm der EZB gibt weiter Impulse für Aktien
Ankaufprogramm der EZB gibt weiter Impulse für AktienAnkaufprogramm der EZB gibt weiter Impulse für Aktien
Ankaufprogramm der EZB gibt weiter Impulse für AktienNEWSROOM für Unternehmer
 
Struktur badan pengurus IPPM Risey-sayati
Struktur badan pengurus IPPM Risey-sayatiStruktur badan pengurus IPPM Risey-sayati
Struktur badan pengurus IPPM Risey-sayatiJems Wutoi
 
Innovative Vertriebswege mit MEDIONconnect - Swen Schollenbruch (MEDION AG)
Innovative Vertriebswege mit MEDIONconnect - Swen Schollenbruch (MEDION AG)Innovative Vertriebswege mit MEDIONconnect - Swen Schollenbruch (MEDION AG)
Innovative Vertriebswege mit MEDIONconnect - Swen Schollenbruch (MEDION AG)eCommerce_Day
 
ObserveIt -Record and replay SSH, RDP & Citrix sessions-German
ObserveIt -Record and replay SSH, RDP & Citrix sessions-GermanObserveIt -Record and replay SSH, RDP & Citrix sessions-German
ObserveIt -Record and replay SSH, RDP & Citrix sessions-GermanObserveIT
 
T-Systems: DevTestOps - das Geheimnis bestet App-Performance
T-Systems: DevTestOps - das Geheimnis bestet App-PerformanceT-Systems: DevTestOps - das Geheimnis bestet App-Performance
T-Systems: DevTestOps - das Geheimnis bestet App-PerformanceDynatrace
 
Wieseneinsaaten im Fruehjahr - Frühjahr-Einsaatversuche: Wenn Einsaaten die W...
Wieseneinsaaten im Fruehjahr - Frühjahr-Einsaatversuche: Wenn Einsaaten die W...Wieseneinsaaten im Fruehjahr - Frühjahr-Einsaatversuche: Wenn Einsaaten die W...
Wieseneinsaaten im Fruehjahr - Frühjahr-Einsaatversuche: Wenn Einsaaten die W...Johann HUMER
 
Social Software & Politik
Social Software & PolitikSocial Software & Politik
Social Software & Politikdavidroethler
 
Break even analysis
Break even analysisBreak even analysis
Break even analysisRAJESHWARRAI
 
Facebook und B2B - Traumhochzeit oder Mission Impossible? (@AllFacebook Mark...
Facebook und B2B - Traumhochzeit oder Mission Impossible? (@AllFacebook Mark...Facebook und B2B - Traumhochzeit oder Mission Impossible? (@AllFacebook Mark...
Facebook und B2B - Traumhochzeit oder Mission Impossible? (@AllFacebook Mark...AllFacebook.de
 
Peacock Container General Presentation
Peacock Container General PresentationPeacock Container General Presentation
Peacock Container General PresentationJesse Vermeijden
 
Get your idea made - PCA10
Get your idea made - PCA10Get your idea made - PCA10
Get your idea made - PCA10Peter Keller
 
Early Civilizations in the Fertile Crescent
Early Civilizations in the Fertile CrescentEarly Civilizations in the Fertile Crescent
Early Civilizations in the Fertile CrescentMichael Fernandez
 
How will UK’s demand for milk change post-quota?
How will UK’s demand for milk change post-quota?How will UK’s demand for milk change post-quota?
How will UK’s demand for milk change post-quota?AHDB Dairy
 
2015-00 USA Automotive OEM Capacity
2015-00 USA Automotive OEM Capacity2015-00 USA Automotive OEM Capacity
2015-00 USA Automotive OEM CapacityUli Kaiser
 

En vedette (20)

NHA Green Build 09
NHA Green Build 09NHA Green Build 09
NHA Green Build 09
 
Verständlichkeit studie in der automotive-branche 1
Verständlichkeit studie in der automotive-branche 1Verständlichkeit studie in der automotive-branche 1
Verständlichkeit studie in der automotive-branche 1
 
Ankaufprogramm der EZB gibt weiter Impulse für Aktien
Ankaufprogramm der EZB gibt weiter Impulse für AktienAnkaufprogramm der EZB gibt weiter Impulse für Aktien
Ankaufprogramm der EZB gibt weiter Impulse für Aktien
 
Struktur badan pengurus IPPM Risey-sayati
Struktur badan pengurus IPPM Risey-sayatiStruktur badan pengurus IPPM Risey-sayati
Struktur badan pengurus IPPM Risey-sayati
 
Innovative Vertriebswege mit MEDIONconnect - Swen Schollenbruch (MEDION AG)
Innovative Vertriebswege mit MEDIONconnect - Swen Schollenbruch (MEDION AG)Innovative Vertriebswege mit MEDIONconnect - Swen Schollenbruch (MEDION AG)
Innovative Vertriebswege mit MEDIONconnect - Swen Schollenbruch (MEDION AG)
 
ObserveIt -Record and replay SSH, RDP & Citrix sessions-German
ObserveIt -Record and replay SSH, RDP & Citrix sessions-GermanObserveIt -Record and replay SSH, RDP & Citrix sessions-German
ObserveIt -Record and replay SSH, RDP & Citrix sessions-German
 
Jaggery India - Hycom Process Pvt. Ltd.
Jaggery India -  Hycom Process Pvt. Ltd.Jaggery India -  Hycom Process Pvt. Ltd.
Jaggery India - Hycom Process Pvt. Ltd.
 
T-Systems: DevTestOps - das Geheimnis bestet App-Performance
T-Systems: DevTestOps - das Geheimnis bestet App-PerformanceT-Systems: DevTestOps - das Geheimnis bestet App-Performance
T-Systems: DevTestOps - das Geheimnis bestet App-Performance
 
Honey, I shrunk the data - Mehr Platz am IBM Domino Server
Honey, I shrunk the data - Mehr Platz am IBM Domino ServerHoney, I shrunk the data - Mehr Platz am IBM Domino Server
Honey, I shrunk the data - Mehr Platz am IBM Domino Server
 
Wieseneinsaaten im Fruehjahr - Frühjahr-Einsaatversuche: Wenn Einsaaten die W...
Wieseneinsaaten im Fruehjahr - Frühjahr-Einsaatversuche: Wenn Einsaaten die W...Wieseneinsaaten im Fruehjahr - Frühjahr-Einsaatversuche: Wenn Einsaaten die W...
Wieseneinsaaten im Fruehjahr - Frühjahr-Einsaatversuche: Wenn Einsaaten die W...
 
Auslandsaktivitäten 2013
Auslandsaktivitäten 2013Auslandsaktivitäten 2013
Auslandsaktivitäten 2013
 
Social Software & Politik
Social Software & PolitikSocial Software & Politik
Social Software & Politik
 
Break even analysis
Break even analysisBreak even analysis
Break even analysis
 
Facebook und B2B - Traumhochzeit oder Mission Impossible? (@AllFacebook Mark...
Facebook und B2B - Traumhochzeit oder Mission Impossible? (@AllFacebook Mark...Facebook und B2B - Traumhochzeit oder Mission Impossible? (@AllFacebook Mark...
Facebook und B2B - Traumhochzeit oder Mission Impossible? (@AllFacebook Mark...
 
Peacock Container General Presentation
Peacock Container General PresentationPeacock Container General Presentation
Peacock Container General Presentation
 
Get your idea made - PCA10
Get your idea made - PCA10Get your idea made - PCA10
Get your idea made - PCA10
 
Early Civilizations in the Fertile Crescent
Early Civilizations in the Fertile CrescentEarly Civilizations in the Fertile Crescent
Early Civilizations in the Fertile Crescent
 
How will UK’s demand for milk change post-quota?
How will UK’s demand for milk change post-quota?How will UK’s demand for milk change post-quota?
How will UK’s demand for milk change post-quota?
 
2015-00 USA Automotive OEM Capacity
2015-00 USA Automotive OEM Capacity2015-00 USA Automotive OEM Capacity
2015-00 USA Automotive OEM Capacity
 
Mis in lego
Mis in legoMis in lego
Mis in lego
 

Similaire à Multi-GPU-Computing: Eins, zwei, drei, ganz viele

Tipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
Tipps & Tricks für den erfolgreichen Einsatz von GPU-ComputingTipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
Tipps & Tricks für den erfolgreichen Einsatz von GPU-ComputingJörn Dinkla
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisJörn Dinkla
 
20111006 roadshow-sandy-bridge
20111006 roadshow-sandy-bridge20111006 roadshow-sandy-bridge
20111006 roadshow-sandy-bridgeWerner Fischer
 
Geforce PräSentation by Sebastian Berndt
Geforce PräSentation by Sebastian BerndtGeforce PräSentation by Sebastian Berndt
Geforce PräSentation by Sebastian Berndtgueste16dcd
 
Zukunftstrends: was bringt 2013 für die IT?
Zukunftstrends: was bringt 2013 für die IT?Zukunftstrends: was bringt 2013 für die IT?
Zukunftstrends: was bringt 2013 für die IT?Werner Fischer
 
Gesichtserkennung in Kamerastreams
Gesichtserkennung in KamerastreamsGesichtserkennung in Kamerastreams
Gesichtserkennung in KamerastreamsChristian Kehl
 
Atmel AVR RISC μC unter GNU/Linux programmieren
Atmel AVR RISC μC unter GNU/Linux programmierenAtmel AVR RISC μC unter GNU/Linux programmieren
Atmel AVR RISC μC unter GNU/Linux programmierenrzbrk
 
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)data://disrupted®
 
FROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFromDual GmbH
 
DOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningDOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningFromDual GmbH
 
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 Server
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 ServerDOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 Server
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 ServerJomaSoft
 
Citrix Day 2014: HDX 3D for Professional Graphics
Citrix Day 2014: HDX 3D for Professional GraphicsCitrix Day 2014: HDX 3D for Professional Graphics
Citrix Day 2014: HDX 3D for Professional GraphicsDigicomp Academy AG
 
Oracle Engineered Systems - Chance oder Risiko?
Oracle Engineered Systems - Chance oder Risiko?Oracle Engineered Systems - Chance oder Risiko?
Oracle Engineered Systems - Chance oder Risiko?Trivadis
 
Analyse und Evaluierung von Parameterabhängigkeiten anhand der Laufzeit von M...
Analyse und Evaluierung von Parameterabhängigkeiten anhand der Laufzeit von M...Analyse und Evaluierung von Parameterabhängigkeiten anhand der Laufzeit von M...
Analyse und Evaluierung von Parameterabhängigkeiten anhand der Laufzeit von M...inovex GmbH
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
 

Similaire à Multi-GPU-Computing: Eins, zwei, drei, ganz viele (20)

Tipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
Tipps & Tricks für den erfolgreichen Einsatz von GPU-ComputingTipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
Tipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der Praxis
 
Grafikkarten Vergleich
Grafikkarten VergleichGrafikkarten Vergleich
Grafikkarten Vergleich
 
20111006 roadshow-sandy-bridge
20111006 roadshow-sandy-bridge20111006 roadshow-sandy-bridge
20111006 roadshow-sandy-bridge
 
Geforce PräSentation by Sebastian Berndt
Geforce PräSentation by Sebastian BerndtGeforce PräSentation by Sebastian Berndt
Geforce PräSentation by Sebastian Berndt
 
Shuttle Produktübersicht
Shuttle ProduktübersichtShuttle Produktübersicht
Shuttle Produktübersicht
 
Zukunftstrends: was bringt 2013 für die IT?
Zukunftstrends: was bringt 2013 für die IT?Zukunftstrends: was bringt 2013 für die IT?
Zukunftstrends: was bringt 2013 für die IT?
 
Gesichtserkennung in Kamerastreams
Gesichtserkennung in KamerastreamsGesichtserkennung in Kamerastreams
Gesichtserkennung in Kamerastreams
 
Atmel AVR RISC μC unter GNU/Linux programmieren
Atmel AVR RISC μC unter GNU/Linux programmierenAtmel AVR RISC μC unter GNU/Linux programmieren
Atmel AVR RISC μC unter GNU/Linux programmieren
 
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
Hochleistungsspeichersysteme für Datenanalyse an der TU Dresden (Michael Kluge)
 
FROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance Tuning
 
DOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningDOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance Tuning
 
Pc präsentation
Pc präsentationPc präsentation
Pc präsentation
 
Boston webcast gpu_2016-12
Boston webcast gpu_2016-12Boston webcast gpu_2016-12
Boston webcast gpu_2016-12
 
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 Server
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 ServerDOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 Server
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 Server
 
Citrix Day 2014: HDX 3D for Professional Graphics
Citrix Day 2014: HDX 3D for Professional GraphicsCitrix Day 2014: HDX 3D for Professional Graphics
Citrix Day 2014: HDX 3D for Professional Graphics
 
Oracle Engineered Systems - Chance oder Risiko?
Oracle Engineered Systems - Chance oder Risiko?Oracle Engineered Systems - Chance oder Risiko?
Oracle Engineered Systems - Chance oder Risiko?
 
Hazelcast
HazelcastHazelcast
Hazelcast
 
Analyse und Evaluierung von Parameterabhängigkeiten anhand der Laufzeit von M...
Analyse und Evaluierung von Parameterabhängigkeiten anhand der Laufzeit von M...Analyse und Evaluierung von Parameterabhängigkeiten anhand der Laufzeit von M...
Analyse und Evaluierung von Parameterabhängigkeiten anhand der Laufzeit von M...
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
 

Plus de Jörn Dinkla

Presentation of the book "Mikado Method"
Presentation of the book "Mikado Method"Presentation of the book "Mikado Method"
Presentation of the book "Mikado Method"Jörn Dinkla
 
Korrekte nebenläufige Anwendungen mit Koroutinen und TDD
Korrekte nebenläufige Anwendungen mit Koroutinen und TDDKorrekte nebenläufige Anwendungen mit Koroutinen und TDD
Korrekte nebenläufige Anwendungen mit Koroutinen und TDDJörn Dinkla
 
Nebenlaeufigkeit mit Koroutinen strukturieren
Nebenlaeufigkeit mit Koroutinen strukturierenNebenlaeufigkeit mit Koroutinen strukturieren
Nebenlaeufigkeit mit Koroutinen strukturierenJörn Dinkla
 
Plain react, hooks and/or Redux ?
Plain react, hooks and/or Redux ?Plain react, hooks and/or Redux ?
Plain react, hooks and/or Redux ?Jörn Dinkla
 
A short introduction to Kotlin
A short introduction to KotlinA short introduction to Kotlin
A short introduction to KotlinJörn Dinkla
 
Concurrency in Kotlin with coroutines
Concurrency in Kotlin with coroutinesConcurrency in Kotlin with coroutines
Concurrency in Kotlin with coroutinesJörn Dinkla
 
Nebenläufigkeit mit Kotlins Koroutinen
Nebenläufigkeit mit Kotlins KoroutinenNebenläufigkeit mit Kotlins Koroutinen
Nebenläufigkeit mit Kotlins KoroutinenJörn Dinkla
 
GPU-Computing mit CUDA und OpenCL
GPU-Computing mit CUDA und OpenCLGPU-Computing mit CUDA und OpenCL
GPU-Computing mit CUDA und OpenCLJörn Dinkla
 
Die ‚komplexe‘ Perspektive - Einführung in die digitale Wirtschaft
Die ‚komplexe‘ Perspektive - Einführung in die digitale WirtschaftDie ‚komplexe‘ Perspektive - Einführung in die digitale Wirtschaft
Die ‚komplexe‘ Perspektive - Einführung in die digitale WirtschaftJörn Dinkla
 
Geschäftsmodelle - Ein kurzer Überblick
Geschäftsmodelle -Ein kurzer ÜberblickGeschäftsmodelle -Ein kurzer Überblick
Geschäftsmodelle - Ein kurzer ÜberblickJörn Dinkla
 
Buchvorstellung "Libertarian Anarchy: Against the State" von Gerard Casey
Buchvorstellung "Libertarian Anarchy: Against the State" von Gerard CaseyBuchvorstellung "Libertarian Anarchy: Against the State" von Gerard Casey
Buchvorstellung "Libertarian Anarchy: Against the State" von Gerard CaseyJörn Dinkla
 
Introduction To Parallel Computing
Introduction To Parallel ComputingIntroduction To Parallel Computing
Introduction To Parallel ComputingJörn Dinkla
 
Subversion Schulung
Subversion SchulungSubversion Schulung
Subversion SchulungJörn Dinkla
 
Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4Jörn Dinkla
 

Plus de Jörn Dinkla (15)

Presentation of the book "Mikado Method"
Presentation of the book "Mikado Method"Presentation of the book "Mikado Method"
Presentation of the book "Mikado Method"
 
Korrekte nebenläufige Anwendungen mit Koroutinen und TDD
Korrekte nebenläufige Anwendungen mit Koroutinen und TDDKorrekte nebenläufige Anwendungen mit Koroutinen und TDD
Korrekte nebenläufige Anwendungen mit Koroutinen und TDD
 
Nebenlaeufigkeit mit Koroutinen strukturieren
Nebenlaeufigkeit mit Koroutinen strukturierenNebenlaeufigkeit mit Koroutinen strukturieren
Nebenlaeufigkeit mit Koroutinen strukturieren
 
Plain react, hooks and/or Redux ?
Plain react, hooks and/or Redux ?Plain react, hooks and/or Redux ?
Plain react, hooks and/or Redux ?
 
A short introduction to Kotlin
A short introduction to KotlinA short introduction to Kotlin
A short introduction to Kotlin
 
Concurrency in Kotlin with coroutines
Concurrency in Kotlin with coroutinesConcurrency in Kotlin with coroutines
Concurrency in Kotlin with coroutines
 
Nebenläufigkeit mit Kotlins Koroutinen
Nebenläufigkeit mit Kotlins KoroutinenNebenläufigkeit mit Kotlins Koroutinen
Nebenläufigkeit mit Kotlins Koroutinen
 
GPU-Computing mit CUDA und OpenCL
GPU-Computing mit CUDA und OpenCLGPU-Computing mit CUDA und OpenCL
GPU-Computing mit CUDA und OpenCL
 
Die ‚komplexe‘ Perspektive - Einführung in die digitale Wirtschaft
Die ‚komplexe‘ Perspektive - Einführung in die digitale WirtschaftDie ‚komplexe‘ Perspektive - Einführung in die digitale Wirtschaft
Die ‚komplexe‘ Perspektive - Einführung in die digitale Wirtschaft
 
Geschäftsmodelle - Ein kurzer Überblick
Geschäftsmodelle -Ein kurzer ÜberblickGeschäftsmodelle -Ein kurzer Überblick
Geschäftsmodelle - Ein kurzer Überblick
 
Buchvorstellung "Libertarian Anarchy: Against the State" von Gerard Casey
Buchvorstellung "Libertarian Anarchy: Against the State" von Gerard CaseyBuchvorstellung "Libertarian Anarchy: Against the State" von Gerard Casey
Buchvorstellung "Libertarian Anarchy: Against the State" von Gerard Casey
 
Introduction To Parallel Computing
Introduction To Parallel ComputingIntroduction To Parallel Computing
Introduction To Parallel Computing
 
Subversion Schulung
Subversion SchulungSubversion Schulung
Subversion Schulung
 
Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4
 
Ant im Detail
Ant im DetailAnt im Detail
Ant im Detail
 

Multi-GPU-Computing: Eins, zwei, drei, ganz viele

  • 1. Multi-GPU-Computing: Eins, zwei, drei, ganz viele Jörn Dinkla para//el 2015 Karlsruhe, 22. 4. 2015 Version 0.1
  • 2.  Tablet, PC, Großrechner, Cloud, Spielkonsole, Autos … GPU-Computing ist überall
  • 3.  Schnelle erste Erfolge  2x – 5x Speedup  Dann wird es schwieriger …  Oft sind 10x drin Speedup 2 3 4 5 6 7 8 9 10 11 … „Enabler“
  • 4.  Bis zu 16 GPU pro Knoten  Abhängig von  Mainboard, CPU, Chipsatz, PCIe-Controller Multi-GPU
  • 5.  2 GPUs  3 GPUs  …  Erreichbar? Amdahl‘s Gesetz? X-facher Speedup? 4 6 8 10 12 14 16 18 20 6 9 12 15 18 21 24 27 30
  • 6. Frameworks im Überblick C ++ 11 C ++ C Device Framework CUDA C++ AMP DirectX AMDTreiber TDD WDDM Thrust C++- Wrapper Library OpenCL Bolt Intel AMD
  • 7.  CUDA ⊕ Am meisten verbreitet ⊕ C++ 11 ⊖ nur NVIDIA-Hardware  C++ AMP ⊕ C++ 11 ⊖ Einschränkungen wegen DirectX (bisher) ⊖ geringe Verbreitung  OpenCL ⊕ Apple, Intel, AMD ⊖ Geringer Abstraktionsgrad, C99 ⊖ Nicht so viele Libraries wie bei CUDA Vor- und Nachteile
  • 8. 1. Partitioning 2. Communication 3. Agglomeration 4. Mapping  Siehe http://www.mcs.anl.gov/~itf/dbpp/ PCAM-Methodik
  • 9.  … und parallele Datenstrukturen  … und partitionierte Datenstrukturen  Aufgabenstellung ähnlich  Egal ob Multi-  -CPU,  -Core  oder -GPU Parallele Algorithmen
  • 11. 1 GPU, Daten passen
  • 12.  Partionierung u. „Swapping“ erforderlich 1 GPU, Daten passen nicht
  • 13.  Partionierung erforderlich 2 GPUs, Daten passen Szenario für den Vortrag
  • 14.  Partionierung u. „Swapping“ erforderlich 2 GPUs, Daten passen nicht
  • 15.  Listen, Arrays  2D: Ebenen, Bilder  3D: Volumen  Ganz  Als Vektor/Liste von Ebenen  Grids, Gitter  Einfach zu partitionieren Regelmäßige Datenstrukturen
  • 16. Regelmäßige Datenstrukturen Teilung nach Anzahl Elemente x y*z x/2 * y y z x*y/2 z 2 x*y*z/2 Kopie
  • 17.  Bäume  Teilbäume als Partitionen  Graphen  Zusammenhangskomponenten  Klein genug? Gleich groß? Unregelmäßige Datenstrukturen
  • 18.  Graph Partitioning / Clustering  Aufteilung gemäß Kostenfunktion  Im allg. NP vollständig  Minimale „cuts“  Social Networks und Big Data  Apache Spark und GraphX  Kernighan-Lin, 𝑂(𝑛3 )  Buluc et. al. „Recent Advances in GP“ 2013 Unregelmäßige Datenstrukturen
  • 19.  Homogen (Gleiche GPUs)  Gleiche Arbeit  Inhomogen (Unterschiedliche GPUs)  Messen und gewichten  Wie bei CPUs  Work-Balancing / Job-Stealing  Scheduling-Theory  Divisible Load Theory Scheduling
  • 20.  Nicht das Rad neu erfinden!  „best practices“  „think parallel“  Tip  McCool et. al.  „Structured Parallel Programming“  Intel-lastig, Cilk Plus, TBB Parallele Patterns
  • 22.  P: Elemente  C: Keine  „embarassingly parallel“  A: Granularität  CPU vs. GPU  Großer Unterschied!  M:  TBB, OpenMP, CUDA, etc. Map mit PCAM
  • 23.  Beispiele  Durchschnitt, Smoothing  PDEs  P, A, M wie Map  C: Nachbarschaft  Optimierung  Speicherzugriffe und Cache  Berechnungen speichern Stencil mit PCAM
  • 24.  Wärmeleitungsgleichung in 2D  Stencil o[x,y] += c* ( i[x-1,y] + i[x+1,y] + i[x,y-1] + i[x, y+1] - 4 * i[x,y] ) Beispiel: Heat-Simulation
  • 25.  Initialisiere Wärmequelle heat  prev := 0  Für alle Iterationen  Addiere Wärmequellen prev += heat  current := stencil(prev)  Tausche prev und current Ablauf
  • 26.  Daten  Buffer(float) für Wärmequelle  Buffer(float) für prev und current  Kernel  add_heat() bzw. mask()  stencil()  Optional  Buffer(uchar4)  Kernel für Umwandlung Zu implementieren …
  • 27. Obfuscation Aus Wilt „The CUDA Handbook“, S. 218 „Index- Schlacht“ OptimiertNachteil: Speicherorganisation fest verdrahtet
  • 28.  Größe / Extension  width, height  index(x,y)  in_bounds(x,y)  in_bounds_strict(x,y) Extent2 0 1 2 3 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3
  • 30.  Vor Kernel-Aufruf  Wechsel der Abstraktionsebene  Host zu Device  Von C++-Datenstrukturen zu Device-Pointern Aufruf des Kernels Kernel-Aufruf
  • 31.  Basis BaseBuffer  HostBuffer  Unpinned (C++)  Pinned (CUDA, nicht swapbar)  Lokaler Speicher (NUMA)  DeviceBuffer (CUDA)  ManagedBuffer (CUDA) Buffer
  • 32.  GPU besteht aus mehreren SM/CU  Thread-Block wird festen SM zugewiesen  Warp / Wavefront  Kleinste Scheduling-Einheit  32 bei NVIDIA, 64 bei AMD  Occupancy Warps und Wavefronts W0SM* W1 W2 W3 W4 -- -- --
  • 33.  Thread-Block (Work group, tile)  Performance, abhängig von Hardware  Grid (NDRange)  Beispiel  Daten 8x8  Grid 2x2  Block 4x4 Grid = Data/Block 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 Daten, Pixel, Voxel Grid
  • 34.  kernel<<<g, tb, sm, s>>>(params)  Kernel-Konfiguration  dim3 Grid g  dim3 Thread-Block tb  Größe des Shared-Memory sm  cudaStream_t s  Oft abhängig vom Extent2  CudaExecConfig(Extent2& e) CudaExecConfig
  • 35.
  • 37.  Single Instruction Multiple Threads!  Mask-Bit für jeden Thread im Warp SIMT - Divergenz 0 1 2 3 int tid = treadIdx.x; if (tid < 2) { call_expensive_function() } else { call_expensive_function2() } Warps Code
  • 38.  CUDA  Nsight (Visual Studio, Eclipse)  nvvp, Visual Profiler (Eclipse)  Kommandozeile nvprof  OpenCL  Intel Vtune (*)  AMD CodeXL  C++ AMP  Visual Studio 2013  Concurrency Visualizer Profiling
  • 39.  Computation Bound  Alle Prozessoren 100% ausgelastet  Memory Bound  Bandbreite zum Speicher voll ausgelastet  Latency Bound  Warten auf die Daten Arten der Auslastung
  • 40. NVVP sagt zu stencil() Arithmetische Intensität 1/5
  • 41.  Nicht optimal  Arithmetische Intensität niedrig  #Berechnungen / #Speichertransfers  Möglichkeiten  Mask()  Textur-Speicher ausprobieren  Stencil()  Zwischenspeichern im Shared-Memory Fazit Single GPU
  • 42.  Partitionierte Map Map mit Multi-GPU
  • 44.  Halo  Ghost Cells  „Overlap“ Iterierter Stencil
  • 45.  Initialisiere Wärmequelle heat  Für jede GPU  Initialisiere Buffer prev und current  Kopiere Teil von heat auf‘s Device  prev := 0  Für alle Iterationen  Für jede GPU  Addiere Wärmequellen prev += heat  current := stencil(prev)  Tausche prev und current  Kopiere Halo/Ghost Cells zu Nachbarn  Kopiere Ergebnisse aller GPUs auf Host Ablauf (Multi)
  • 46.  Host (wie bisher)  Wärmequellen  Endergebnis  Benötigt pro GPU  Buffer für prev und current  Heat-Buffer (Ausschnitt) Datenstrukturen (Multi)
  • 47.  cudaGetDeviceCount(int* count)  Ermittelt Anzahl der Devices  cudaGetDeviceProperties(cudaDevice Prop* prop, int device)  Eigenschaften des Devices  cudaSetDevice(int device)  Setzt Device für aktuellen Thread  Betrifft alle folgenden cuda*-Funktionen Multi-GPU mit CUDA
  • 48.  Jeder Thread hat CUDA-Kontext  Dieser speichert aktuelle GPU  Kernel  Nur Speicher auf gleichem Device!  Vorsicht bei Bibliotheken  Z. B. Thrust Multi-GPU mit CUDA
  • 50. GPU
  • 51.  Explizit einschalten  cudaDeviceCanAccessPeer(&i,d,e)  cudaDeviceEnablePeerAccess(e,0)  Einschränkungen  Nicht Windows u. WDDM Peer-to-Peer-Kopien D2D
  • 54.  mask()-Kernel  Verschiedene Extents für Quelle und Ziel mask()
  • 57. Pos2
  • 58.  Mit_overlap zu mit_overlap  Kernel nur für inneren Bereich aufrufen stencil()
  • 68. Update in CUDA #2 Async!
  • 69.  Wichtig: cudaDeviceSynchronize() parallel Analyse mit NVVP / Nsight Orange seq. Orange par.
  • 70.  Aktuelle Hardware  Intel i7-5930K, 4,0 Ghz  16 GB DDR4 RAM, 2,4 Ghz  2x NVIDIA GTX 970, Standard-Clocks  2x 16x PCIe 3.0  OS  Windows 7 bzw. Ubuntu 14.10 Benchmark Testsystem
  • 73.  1,955 Speedup bei 2 GPUs  Und was bei 3, 4 oder mehr Karten?  Problem:  PCIe-Bus skaliert nur begrenzt  Bandbreite ist begrenzt  Anzahl der Geräte ist begrenzt Und bei mehr GPUs?
  • 74.  Lane ist 1 bit, full duplex  Punkt-zu-Punkt Verbindung  1,2,4,8,12 oder 16 Lanes  Geschwindigkeiten  2.0: pro Lane 500MB/s, max. 8 GB/s  3.0: pro Lane 1GB/s, max. 16 GB/s (*)  Controller  Hat max. Anzahl Lanes PCIe
  • 75.  Grafikkarte x16  CPU hat 40 Lanes  => max. 2 x16 + 1x8  bis zu 4 x8 PCIe D2D
  • 76.  Anzahl PCIe-Slots auf Mainboard  Anzahl Lanes des PCIe-Controller  Anzahl der Switches / IOHs  4, 8 oder 16 GPUs  Wichtig ist die Bandbreite nicht zu überladen  Praxiserfahrung:  3 GPUs waren bei vielen Kopien schneller als 4 GPUs Anzahl der GPUs
  • 78.  Kein D2D über QPI NUMA D2D D2D
  • 79.  Rechts-Links  „Rechts“ Erst Kopie von g zu g+1  „Links“ Dann von g zu g -1 Kopieren der Halos
  • 81.  …  Für alle Iterationen  Für jede GPU  Addiere Wärmequellen prev += heat  current := stencil(prev)  Tausche prev und current  Kopiere Halo/Ghost Cells zu Nachbarn  … Ablauf (Multi)
  • 83.  Aktuelle GPUs können gleichzeitig  Kernel, 1 Kopie hin u. 1 Kopie zurück Streaming
  • 84.  …  Für alle Iterationen  Für jede GPU  Berechne nur den Halo („Spezialkernel“)  Kopiere Asynchron zu Nachbarn  Berechne Teil ohne Halo  … Modifizierter Ablauf (Multi)
  • 85. Kopieren der Halo‘s #2 Code-Komplexität vs. Performance
  • 86.  Abhängig von Implementierung und Hardware  Wie groß sind die Halos?  Lässt sich die Kopie hinter dem Kernel verstecken?  Ab wie vielen GPUs ist der Bus ausgelastet?  Gibt es Stau („contention“) auf dem Bus? Lohnt sich das?
  • 87.  Viele melden Erfolge … Linearer Speedup http://on-demand.gputechconf.com/gtc/2015/posters/GTC_2015_Computational_Physics_03_P5122_WEB.pdf http://on-demand.gputechconf.com/gtc/2015/presentation/S5585-Wei-Xia.pdf
  • 88.  2016 Pascal  4 „Connections“ per GPU  Jede 20GB/s peak, 16GB/s praktisch  US DoE, Summit 2017 150-300 PetaFLOPS NVLINK
  • 89. C++ AMP  Daten: array, array_view  Kernel: parallel_for_each
  • 92. Single GPU mit AMP #2
  • 93.  restrict(amp)  Extent2 hat schon __device__ Extent2AMP
  • 94. Single GPU mit AMP #3 x, y: andere Reihenfolge!
  • 95.  GPU heißt „accelerator“  accelerator_view ist logische Sicht  Argument zu parallel_for_each Multi-GPU mit C++ AMP #1 view
  • 96.  array_view logische Sicht auf ein array  array<float> name(size, view) Multi-GPU mit C++ AMP #2
  • 97.  „D2D“-Kopien  Aber:  Über Host  Nicht parallel zu parallel_for_each Multi-GPU mit C++ AMP #3
  • 100.  Platform  Device  Context  Program  Kernel  Buffer, Image  CommandQueue  Event Übersicht OpenCL Platform Device
  • 101.  Context wird mit vector<> angelegt  Für jedes Device eine Queue Single-Context, Multi-Device
  • 102.  OpenCL-Objekte „shared“  MemObjects, Programs, Kernels  MemObjects brauchen explizite Kopie  Kein D2D  Support für Partitions / Multi-GPU  Offsets für Kernel und Kopien  SubBuffer Single-Context, Multi-Device
  • 103.  Pro Device einen Context  Alles separat und redundant  Evtl. einfacher zu programmieren  Scatter/Gather/Broadcast statt SubBuffer  Aufpassen bei der Datenhaltung  Einfache Erweiterung  Multi-Node oder heterogenes System Multi-Context & Multi-Device
  • 104.  Von Single- zu Multi-GPU 1. Partionierung einführen 2. Vervielfachung der Datenstrukturen 3. Kernel erweitern  Mit Offsets und weiteren Extents Zusammenfassung
  • 105.  Parallele Algorithmen  … und partitionierte Datenstrukturen  Hardware  PCIe-Problematik  Kompetenter PC-Hersteller notwendig  Fazit  Gute Speedups möglich  Wenn Halo-Kopien klein  und/oder hinter Kernel versteckt  Skaliert wegen PCIe nur begrenzt Fazit
  • 107.  Das gleiche Partitionierungsproblem  Kommunikation zwischen Nodes  Kein Shared-Host-Memory mehr  MPI_Send()  MPI_Recv()  GPU-spezifische Erweiterungen  OpenMPI, MVAPICH2 Multi-Node mit MPI
  • 108.  Titan  18688 Opterons und 18688 Tesla K20X  Nr. 2 in Top 500 Multi-Node Nur am Rande …
  • 110.  Schwerpunkte  Parallele Systeme  C++ und Java/JVM  GPU-Computing  CUDA, OpenCL, C++ AMP  Big Data, BI, Data Science  http://www.dinkla.com Last but not least Fragen? Sprechen Sie mich an oder joern@dinkla.com

Notes de l'éditeur

  1. TSUBAME-KFC, Tokyo Institute of Technology, KFC = Kepler Fluid Cooling, 4,5 GFLOPS/watt http://blogs.nvidia.com/blog/2013/11/19/japans-oil-cooled-kfc-tsubame-supercomputer-may-be-headed-for-green500-greatness/ Einsatzszenarien Tablet Notebook Desktop Server Server-Farm/Cluster Superrechner Lokal/Remote (Cloud bei Amazon z. B.)
  2. ab 10x speedup enabler Realistisch so ca. 10x Speedup Wenn größere Werte angegeben werden, oft wg. denormals oder SFU-Funktionen Floating Point Denormals at full speed SM 2.0, CPU 100x slower "Wie werde ich Optimierungsexperte?" „Enabler“ Rewrite der Software kann sich lohnen there ain’t no such thing as a free lunch Robert Heinlein. The Moon is a harsh mistress. 1966. Verweis auf Optimierung später … “das gucken wir uns noch genauer an”…
  3. SLI-Band, spezielle Hardware notwendig
  4. ab 10x speedup enabler Realistisch so ca. 10x Speedup Wenn größere Werte angegeben werden, oft wg. denormals oder SFU-Funktionen Floating Point Denormals at full speed SM 2.0, CPU 100x slower "Wie werde ich Optimierungsexperte?" „Enabler“ Rewrite der Software kann sich lohnen there ain’t no such thing as a free lunch Robert Heinlein. The Moon is a harsh mistress. 1966. Verweis auf Optimierung später … “das gucken wir uns noch genauer an”…
  5. Abstraktion der gleichen Hardware, daher alle ähnlich CUDA Runtime und CUDA Driver C++ Accelerated Massive Parallelism Kein C++ 11, nur VS 2012 TODO Bei AMP sind die Kernel doch schon reduziert und kein vollständiges C++
  6. C++ AMP, Prototyp Shevlin Park, Übersetzung von AMP zu OpenCL, aber nur Proof of Concept  bzw. Prototyp, wird von Intel nicht weiter verfolgt OpenCL „Kommiteesprache“ C++ AMP wird zu HLSL kompiliert (Dirext X Shader-Sprache)
  7. Ian Foster “Designing and Building Parallel Programs” aus den 90ern
  8. Annahme ist einfach Halbierung
  9. ETL-Prozesse, Datenbanken, Pregel, Apache Spark, GraphX
  10. ETL-Prozesse, Datenbanken, Pregel, Apache Spark, GraphX Buluc, Aydin; Meyerhenke, Henning; Safro, Ilya; Sanders, Peter; Schulz, Christian (2013). Recent Advances in Graph Partitioning. arXiv:1311.3144 „balance constraint“
  11. Patterns, „best practices“, Einheitliche Sprache, Klärung, dann muss man das Rad nicht immer neu erfinden
  12. http://parallelbook.com/sites/parallelbook.com/files/SC13_20131117_Intel_McCool_Robison_Reinders_Hebenstreit.pdf Map, Stencil Reduktion, Scan Gather, Scatter, Pack, Split, Expand
  13. To embarass s.o. – jemanden in Verlegenheit bringen, peinlich Ein bischen dezenter in der Farbgebung
  14. „Ein weites Feld“, Daumenregel: Überall da, wo es C gibt, gibt es auch Optimierungsmöglichkeiten
  15. Den Wald vor lauter Index-Berechnungen nicht sehen … Mit „Indizes“ jemanden in den Wahnsinn treiben.
  16. Oftmals ist es auch sinnvoll zwischen Extension und Index zu unterscheiden
  17. Pinned by C++ AMP: staging buffer
  18. Thread-Block-Größe Vielfaches von 32/64
  19. Typischerweise für 1D, 2D, 3D
  20. Das sync ist nicht unbedingt notwendig hier, nur wenn man daten in der schleife nach aussen gibt.
  21. Jeder Thread hat eigenen Pfad Complex algorithms tend to be harder to parallelize, are more susceptible to divergence, and offer less flexibility when it comes to optimisationParallel programming is often less about how much work the program performs as it is about whether that work is divergent or not. Algorithmic complexity often leads to divergence, so it is important to try the simplest algorithm first.
  22. http://developer.amd.com/tools-and-sdks/heterogeneous-computing/codexl/ (*) kostet, unterschiedliche Versionen des SDKs für Xeon Phi und die anderen
  23. „Volle Pulle“ „Die Straßen sind voll“ „Wo bleibt das Taxi nur?“
  24. Bei mask sieht es ähnlich aus
  25. Redundantes Lesen
  26. cudaDeviceSynchronize() cudaDeviceReset() Betrifft alle. Hier ist es z. B. wichtig, dass der Kerne
  27. Einschränkungen NVIDIA Nur NVIDIA, nur neuere Nicht bei Windows und WDDM-Treiber
  28. Ausnahmen am Anfang und Ende gibt es nur jeweils einen Overlap Bei einer Kopie, z. B. der Hitze von add_heat()
  29. Erinnern sie sich noch an die Folie, bei der ich Extent2 motiviert habe? Die mit den vielen Berechnungen Spätestens hier wird es einfach übersichtlicher mit Extent2
  30. GPU i kopiert aus dem „Inner“ heraus den Overlap ans Ende von i-1 und an den Anfang von i+1
  31. Immer Extent2 und Pos2 / Offset
  32. CPU, Chipsatz, externer Controller (*) etwas weniger z. B. bei Intel im IOH 16 lanes, 40 lanes ( 28 lanes bei 5820) für 3.0, UND 8 2.0 lanes vom chipsatz, aber intern genutzt, daher nur x4 nutzbar AMD FM2+ 20 lanes, aber nur 16 3.0, 4 lanes vom chipsatz, insg. 8 lanes für peripherie
  33. QPI 40 lanes interne PCIe controller Siehe auch http://www.pcgameshardware.de/Mainboard-Hardware-154107/Specials/PCI-Express-x16-gegen-x8-1136576/
  34. Externe controller - direkt, splitter, switches PCI Express Switches von PLX Hier könnte auch eine weitere CPU an den IOH
  35. Lanes nicht mehr auf dem Chipsatz nur im Prozessor, daher kann man die Karten nur mit zwei Prozessoren nutzen
  36. Parallele Übertragung „no contention“ Bei odd-even, even-odd nicht der Fall
  37. http://on-demand.gputechconf.com/gtc/2015/posters/GTC_2015_Computational_Physics_03_P5122_WEB.pdf
  38. US Department of Energy, Summit und Sierra
  39. Neu in CUDA 7.0 MPS und Multi-GPU-Nodes