Vortragsfolien

Transcrição

Vortragsfolien
Raytracing mit
CUDA
Dorian Weber
Gliederung
• kurze Einführung in CUDA
• Funktionsweise einer traditionellen
Grafikengine (z.B. OpenGL, Direct3D)
• Design- und Architekturentscheidungen
• Implementation
• Demonstration
2
CUDA
• „Compute Unified Device Architecture“
von NVIDIA
• nutzt die Grafikkarte als parallelen CoProzessor
• Architektur ist stark auf grafische
Berechnungen optimiert
3
!"#$
*+%,
-(./("$0&1&2
98":8;66
*+%,3452$(6&
>&82&/
%&'()&
*+%,378&(.&8
<8(=
>&82&/
<8(=
!"#$%
!"#$%
Architektur
4
CUDA Schnittstellen
• Application Programming Interface kommt
in zwei Geschmacksrichtungen
• Drivers API (low level)
• Runtime API (high level)
• APIs schließen sich gegenseitig aus
5
Drivers API
Vorteile
• Null Overhead
• Host-Code unabhängig
vom NVCC
• dynamische
Kernelverwaltung
• keine CUDA Runtime
Library nötig
Nachteile
• low level, imperativ
• kein Emulationsmodus
• Compilierung von
Host- und Devicecode
getrennt
• explizite
Modulverwaltung
6
Runtime API
Vorteile
• high level, imperativ
• automatisches Laden
benötigter Module
• Funktionssetup und
implizites Typecasting
• Emulationsbibliothek
• Compilerintegration
Nachteile
• Vorhalten aller
potentiell benötigten
Module
• Abhängigkeit des
Devicecodes vom
Hostcompiler
• linkt CUDA Runtime
7
!'+8
;"#,:
Speicherhierarchie
„All programming can be
viewed as an exercise in
caching.“
(Terje Mathisen)
;"#,:
!&2&+"2&'()*&+,-&'
!&2&+"2&'()*&+,-&'
.$'#%8,%523
.$'#%8,%523
<&1+52&'
<&1+52&'
<&1+52&'
<&1+52&'
6-'&%8
6-'&%8
6-'&%8
6-'&%8
9#:%"&'
)*&+,-&'
9#:%"&'
)*&+,-&'
9#:%"&'
)*&+,-&'
9#:%"&'
)*&+,-&'
!"#$%"&'()*&+,-&'(./01&,%,-23
4#052%02&'()*&+,-&'(.1&,%,-23
6&72/'5*&+,-&'(.1&,%,-23
8
Klassische 3D Engines
• Rendervorgang mittels Matrizen umgesetzt
• elegante und einheitliche Beschreibung aller
Transformationen
• Bewegung, Rotation, Skalierung,
Projektion, Clipping
• jede beliebige Kombination
(Matrixmultiplikation)
9
!
!
!"# !"# $#$% !"#
#$% !"# !"#! "#
&
&
&
&
&
&
'
&
!"#$#%"&'($#)%*
!"# !(& ! # $#$% !(& ! #
#$% !(& ! # !"# !(& !#
&
&
&
&
&
&
'
&
&
&
&
'
#
# !# !#
&
'
&
&
% & & '
&
&
&
'
'
'
+,-#%.-%/$#%"&0(%#01%&1(021/#")
Beispiel: Rotation
10
!"#$%&'$()*
Rendervorbereitung
78/"0$"%4.2)$).1)"("1%
916%6(":"1
+)",%&'$()*
;<=>..(6)1'$"1%("#'$)?%
@9(%>'3"('%8"("A:1"1
-(./"0$).123'$()*
'9B%6)"%C)#62A:)(3"8"1"%
4(./)@)"("1
+)",4.($%&'$()*
D8"(B#D22)E"%-910$"%
,"E2A:1")6"1
5"16"(1
11
Matrizen für Raytracer?
Vorteile
• einheitliche
Beschreibung
• leicht parallelisierbar
• etabliert (also viel
Hilfe verfügbar)
• intuitive Mathematik
Nachteile
• sehr groß - 4 GPURegister pro Matrix
• viele Multiplikationen
• Gimbal Lock
12
(Einheits-)quaternionen
• leben auf einer 4D Hyperkugel
• ein Realteil, drei Imaginärteile
• Drehungen im Raum sehr elegant zu
beschreiben
• passen in ein GPU Register
13
!
!"# !"# $$%!%"
!"# !"# $$%#% $
!"#! "#$$%%%&
%&! !"# $$
$
!"#$%"&'()*&%+#",#
!
$!$!
$!$
!"# !'( '$%)%"
* '!"# !'( '$%)%"
)
!"# !'( '$%)% $ & ) & '!"# ! '(' $%)% $ ( *
!"# ! '(' $%*%& ) '!"# ! '(' $%*%&
)
%&! ! '(' $
)
%&!! '( ' $
)
-).&"/."0*&",#
Rotation von vorhin
14
Designentscheidungen
• Drivers API
• Quaternionen
• OpenGL Subsystem
• Phongs Lichtmodell
15
Implementation (I)
!"#$%&'#(!"#$"%)*
++(,-.-/0#-(1-&#-(2'3&%&'#(4"5(1-6(7&813/0&.6
!"#$%9:(;(&"'()*+)*
!"#$%9<(;(&"'()*,)*
++(,-.-/0#-(1-#(2.&6=.3%.408>(1-.(1"./0(1-#(2&:-8(?-0%
!&"'(&)*&+,%9@'3&%&'#(;(-+'$&+9@'3&%&'#
!&"'(&)*&+,%9.&/0%"#?(;(&"'(%-./%0!/0)-+'$&+>(!"#$%*
++(-.6&%%8-(1&-(!4.,-(1-3(2&:-83
!"#$%954.,-(;(&"'(-1"23)2)%)!&"'(&)*&+,%>(-+'$&+*
%"'4%#
16
Implementation (II)
!"#$%&'#(!"#$%&"'()')*)!"#$%&*('$()#$+
*+&+#(,(-&#%./0/"#123/4.
55(4.6%&77.(1.#($8.&#6%.#(946%3#1
,-!"./+01)'"(,(!"#+%,-%.#)!"#$%&+
/",,(+01)'"("#08.&:-(;<==(&6%
*+&+#(,(0##",10#"()')*)*+&+#*(+01)'">23/4.+
55(6:-&.?.(@&81(7&%(@.&%./.#(A%/3-8.#("7(1&:2*%$"")3!"#$%&(,(!"#2304)5607)!"#$%&*/+01)'"+
*+&+#(,(0##",10#"()')*)*+&+#*(!"#$%&"'()')*)2*%$"")3!"#$%&./'$()#$+
4)5&)'"-+3!!"#$%&(,(!"#6"8'"9#%),607)!"#$%&*/+01)'"+
*+&+#(,(0##",10#"()')*)*+&+#*(!"#$%&"'()')*)4)5&)'"-+3!!"#$%&./'$()#$+
6#)*%738!!"#$%&(,(!"#6"8*09#%),607)!"#$%&*/+01)'"+
*+&+#(,(0##",10#"()')*)*+&+#*(!"#$%&"'()')*)6#)*%738!!"#$%&./'$()#$+
55().%:*(>>>+
*"#1*,(*+&+#
17
Implementation (III)
!"#$%&'#(!"#$%&'%(#)!"#$%&*
++(,-%.-(/-#($0-&#,%-#(12,%3#/(3"4("#-#/0&56
'()*(!"(7(89!898:;
+,-./"(7(9<==
++(%-,%-(4>?(@-/-,(A2@-$%B('2(-,(C'#(/&-,-D(E%?360(F-,56#&%%-#(G"?/4>?(@-/-,(A2@-$%(0H
)"&&(0(C'D(3$%"-00-#(E%?360(F-,56#&%%-#(G"?/*&+(/&-,-?(12,%3#/(1(!"($0-&#-?(&,%(30,('()*(!"B
+,&&
+,-./"(7(0
'()*(!"(7(1(!"
-"#*-&2'()*(!"32+,-./"
18
Details
• Objekte und Lichtquellen im Texturspeicher
• Renderstruktur im konstanten Speicher
• Rekursionsbehandlung mittels lokalem
Stack (a priori beschränkt)
• Ausnutzung der Asynchronität zwischen
GPU und CPU
19
Was ist getan?
• Framework zur komfortablen Bedienung
der Drivers API - Template-basiert
• Toolset für die Steuerung des Tracers
(insbesondere mathematische Werkzeuge)
• Werkzeuge für das Gerät
20
Was ist getan?
• Raytracer:
• Phong Lichtmodell
• Reflexion & Brechung (allgemein gelöst,
physikalisch korrekt)
• beliebig viele Objekte und Reflektionen
• Echtzeit
21
Was fehlt?
• Objekte sitzen nicht im Texturspeicher
• nur eine (frei positionierbare) Lichtquelle
• ausschließlich Kugeln, allerdings
Vorbereitung für weitere Objekttypen
• kein Schatten
• Stack für Rekursion unnatürlich langsam
22
Demo
23
Vielen Dank für eure
Aufmerksamkeit!
24

Documentos relacionados