Post on 07-Oct-2020
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 1 / 3305.11.12 | FB Computer Science | Scientific Computing |
Raytracing in GA mittelsOpenACC
Michael Burger, M.Sc.FG Scientific ComputingTU Darmstadtmichael.burger@sc.tu-darmstadt.de
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 2 / 33
Agenda
● GPU-Computing und moderne GPU Architekturen
● Raytracing in Geometrischer Algebra
● Resultate des Raytracings auf parallelen Architekturen
● Kurzeinführung OpenACC
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 3 / 33
Ideen des GPU-Computing
● SIMD, pipelined, seriell● Viele Berechnungen relativ langsam, gepipelined ausführen statt schnell und
seriell● Gilt auch für Multicore-CPUs
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 4 / 33
GPU Architektur: AMD Evergreen / Northern Islands
• OpenCL-Hierarchie:Kernel → Groups → Items
• Parallelität der Work Items ausnutzen
• Parallelität der Multivektoren-Berechnungen ausnutzen
• AMDs Verwendung von VLIW → Compilerabhängigkeit
• AMD APP Profiler ermöglicht Analysen
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 5 / 33
GPU Architektur: Southern Islands
• 4D / 5D zu 1D
• GNC entspricht SIMD (64 Multiplay-ADD)
• Ziel: höhere Auslastung
• Dynamische Ressourcenzuteilung
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 6 / 33
GPU Architektur: Nvidia Kepler
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 7 / 33
GPU Architektur
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 8 / 33
Raytracing
1. Berechne Sichtstrahl
2. Prüfe auf Schnitt mit Objekten
3. Finde den nächsten Schnittpunkt
4. Erzeuge Reflexionsstrahlen und Schattenfühler
5. Berechne lokale Farbe
6. Wiederhole mit Reflexionsstrahlen 2-5
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 9 / 33
Raytracing auf CPU / GPU
• Raytracer mit Kugeln und Dreiecken als Szenenobjekte• Kugelraytracer als Proof of Concept
→ Ergebnisse vergleichbar mit Dreiecks-Raytracern• Kugeln als Hüllkugeln bei Dreiecken
→ Model-Splitting
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 10 / 33
Raytracing auf CPU / GPU
• Mehr Objekte direkt darstellbar(Punkte, Kugeln, Ebenen, …)
• Produkte der Algebra nützlich
• Parallelität durch Multivektoren (pro Blade ein Koeffizient zu berechnen)
• x und n 3D Vektoren mit Basis e1, e2 und e3
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 11 / 33
Raytracing auf CPU / GPU
Typ Sprache AlgebraStandard CPU C++ GA / LA
CPU Parallel C++, OpenMP GA / LA
Standard GPU OpenCL GA / LA
GPU Register Optimized OpenCL GA
GPU RAM Optimized OpenCL GA / LA
GPU Bounding-Hierarchy OpenCL GA / LA
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 12 / 33
Raytracing auf CPU / GPU
• Zur Veranschaulichung und zum Szenen-Erstellen
• Leistungsmessungen mittels Konsolen-Renderer
• Funktionalitäten für FPGA
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 13 / 33
Raytracing auf CPU / GPU
LA (CPU) GA (CPU) LA (GPU) GA (GPU)0
20
40
60
80
100
120
140
160
Renderingzeit-Vergleich
Renderzeit
Tracerplattform
Rel
ativ
e D
auer
in %
• Leistung auf CPU ~ Anzahl der Operationen
• GA nutzt Grafikhardware effektiver• Differenz beim Raycasting etwas größer als beim Raytracing
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 14 / 33
Raytracing auf CPU / GPU
Cow Bunny Ramses Fertility0
0,5
1
1,5
2
2,5
3
3,5
Vergleich 4D / 1D Architektur
HD 6970HD 7850
Model
Ren
derz
eit i
n S
ekun
den
• Auf neuer Architektur deutlich effektiver berechenbar
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 15 / 33
Raytracing auf CPU / GPU
Lux Renderer, LuxRay-Engine (OpenCL), Screenshot von www.ht4u.net
● AMDs HD7970 Ghz über viermal schneller als GTX680
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 16 / 33
Raytracing auf CPU/GPU
HD6970 Q6600 V2p@100 Mhz V2p@2,4 Ghz0
200
400
600
800
1000
1200
0,86
953,45 931,31
34,49
Vergleich der PlattformenRaycasting ohne Shading
Plattform
Rec
henz
eit i
n S
ekun
den
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 17 / 33
OpenACC
Eine sehr kurze Einführung in OpenACC :)
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 18 / 33
Was ist OpenACC?
● Nutze Direktive im Quellcode● Seriellen Code auf CPU● Parallelen Code auf Accelerator
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 19 / 33
OpenACC Pragmas
# pragma acc parallel [clause]
● Startet parallele Region● Workers auf dem Accelerator werden initialisiert, Anzahl während der Region
konstant
# pragma acc kernels [clause]● Compiler zerlegt den Code in Kernels, die auf Device ausgeführt werden● Normalerweise erhält jede Schleife einen Kernel
#pragma acc loop [clause]● Schleife wird parallelisiert
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 20 / 33
OpenACC Pragmas
if( condition ) async [( scalar-integer-expression )] num_gangs( scalar-integer-expression ) num_workers( scalar-integer-expression ) vector_length( scalar-integer-expression )
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 21 / 33
OpenACC Data Pragmas
#pragma acc data [clause]
if( condition ) copy( list ) copyin( list ) copyout( list ) create( list ) present( list ) present_or_copy( list ) present_or_copyin( list ) present_or_copyout( list ) present_or_create( list ) deviceptr( list )
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 22 / 33
Position von OpenACC
● Wie fügt sich OpenACC in bestehende Struktur?● Flexibilität?● Aufwand?
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 23 / 33
OpenACC und OpenMP
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 24 / 33
Schön und gut, aber...
● Datenmanagement sehr wichtig● Datentransfer zeitintensiv
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 25 / 33
Beispiel: Jacobi Solver
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 26 / 33
Beispiel: Jacobi Solver
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 27 / 33
Beispiel: Jacobi Solver
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 28 / 33
Beispiel: Jacobi Solver
● Zeitverhalten der Version sehr schlecht● Profiling ergibt viel Aufwand für Datentransfer● Wenig Laufzeit für eigentliche Berechnungen
● Ursache?● Lösung?
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 29 / 33
Beispiel: Jacobi Solver
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 30 / 33
Beispiel: Jacobi Solver
● Optimierung durch Kenntnis der Zielhardware● Gang = #Cuda Blocks / Vector = #threads in Block● Vector sollte Vielfaches von 32 sein●
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 31 / 33
Real-Wolrd Example OpenACC
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 32 / 33
Real-World Example Raytracer?
● Erzielbarer Performancegewinn im Vergleich zu OpenMP?● Rückstand OpenCL-Variante auf gleicher Karte● AMD OpenCL vs Nvidia OpenACC
05.11.12 | FB Computer Science | Scientific Computing | Michael Burger | 33 / 33
Quellen
● Michael Burger, „Das effiziente Raytracen von Dreiecksnetzen auf Mehrkernprozessoren, GPUs und FPGAs mittels Geometrischer Algebra“, 2011http://www.gaalop.de/wp-content/uploads/Masterarbeit-Michael-Burger.pdf
● Timo Stich, „GPU Computing with OpenACC Directives“, 2012https://sharepoint.campus.rwth-aachen.de/units/rz/HPC/public/Shared%20Documents/Forms/OpenACC%20Workshop%202012.aspx
● Timo Stich & Sandra Wienke, „OpenACC Workshop – Programming Lab“, 2012https://sharepoint.campus.rwth-aachen.de/units/rz/HPC/public/Shared%20Documents/Forms/OpenACC%20Workshop%202012.aspx
● Sandra Wienke et al, „OpenACC – First Experiences with Real-World Applications“, in Euro Par 2012
● OpenACC-Standard.Org, „The OpenACC Application Programming Interface“, 2011
● http://www.openacc.org/sites/default/files/OpenACC.1.0_0.pdf