This repository was archived by the owner on Jul 13, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchapter11.tex
More file actions
190 lines (173 loc) · 8.43 KB
/
chapter11.tex
File metadata and controls
190 lines (173 loc) · 8.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Test file for the Wuppertal beamer style
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Karsten Kahl, 15.10.2012
% kkahl@math.uni-wuppertal.de
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[12pt,rgb]{beamer}
%%% Switch to for top-aligned frames
%\documentclass[12pt,t]{beamer}
\usetheme[green,presentation,nologo,total,german]{Wuppertal}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options :
%% Style (see outer themes) :
%%% minimal : no navigation; no outline; plain and simple.
%%% presentation (default): no navigation; outline at begin of each section
%%% (suppress with section*)
%%% talk : horizontal section navigation in headline
%%% talkext : horizontal section navigation in headline with logo in top left corner
%%% lecture : adds section and subsection navigation in headline
%%% if #sections or #subsections greater 3 adds logo in top left corner
%% ----------------
%% Color (see color themes) :
%%% vier (default): built around colours of Fakultaet 4
%%%% Additional Color-Option
%%% inverted: white on black.
%% ----------------
%% Logo in lower right corner (see outer themes) :
%%% lion: half lion in color of style
%%% logo (default): BUW logo papperl
%%% biglion: half lion in background
%%% nologo: no logo
%% ----------------
%% Miscellaneous:
%%% german: sets main language to german (Part X to Teil X)
%%% nototal: no display of total page numbers ("page/total number of pages" to "page")
%%% imacm: places IMACM papperl on title page and
%%% replaces logo in top left corner by IMACM logo (if applicable)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Algorithm package with beamer friendly option-set
\usepackage[linesnumberedhidden,vlined]{algorithm2e}
\usepackage{tikz}
\usepackage{minted}
% Use Option linesnumbered if you want to have line numbers
\DontPrintSemicolon
\SetKwFor{For}{for}{}{}
\SetKwFor{While}{while}{}{}
% Change to increase or decrease font size or appearance in the algorithm
\SetAlFnt{\footnotesize}
% Used for the TikZ example
\usetikzlibrary{shapes}
\begin{document}
\title[Vektoren und Mathematische Arrays]{Vektoren und Mathematische Arrays}
\subtitle{Kapitel 11 - Data Parallel C++}
\author[Alexander Wallrodt]{Alexander Wallrodt}
\institute{Bergische Universität Wuppertal}
\maketitle
\begin{frame}{Bedeutung von Vektoren}
\begin{itemize}
\item Vektoren halten ein Set an Daten
\item Häufig gibt es Daten welche zusammengehören z.B. Farben (RGBA)
\item Es gibt jedoch unterschiedliche Auffassungen von Vektoren
\item Als \glqq Convenience\grqq{} Typ oder als SIMD Interpretation
\end{itemize}
\end{frame}
\begin{frame}{Vektoren als \glqq Convenience\grqq{}}
\framesubtitle{Bedeutung von Vektoren}
\begin{itemize}
\item Gruppiert Daten, um mit ihnen besser umgehen zu können
\item Z.B. Farbcodes (RGBA, YUV) oder auch Richtungen (xyz)
\item Standard Operationen wie +, -, oder * können bereits vor implementiert sein
\item Häufig im Einsatz bei GPU naher Programmierung
\end{itemize}
\end{frame}
\begin{frame}{Vektoren als SIMD}
\framesubtitle{Bedeutung von Vektoren}
\begin{itemize}
\item Hardware SIMD (single instruction, multiple data) Instruktionen
\item Ein 16er-Vektor könnte z.B. direkt auf einen 16 Kanal Rechner umgesetzt werden
\item Häufig im Hintergrund vom Compiler angewendet, für z.B. Work-Groups
\item Vor allem im Einsatz bei CPU naher Programmierung
\end{itemize}
\end{frame}
\begin{frame}{SYCL Math Array (marray)}
\begin{itemize}
\item Explizit nur als convenience Typ verwendbar
\item Wichtig um strukturierten Code zu erstellten (Absehbare Trennung zu SIMD Typen)
\item Recht neu zum SYCL Standard hinzugefügt
\item Beim Anlegen von \texttt{marray<type, n>} Objekten kann man den Typ (type) und die Länge (n) festlegen
\item Für bestimmte Definitionen gibt es Aliase
\begin{itemize}
\item Z.B. \texttt{muchar4} statt \texttt{marray<uint8\_t, 4>}
\item Z.B. \texttt{mbool16} statt \texttt{marray<bool, 16>}
\item Diese sind aber nur für Längen von 2,3,4,8,16 definiert
\end{itemize}
\item Nutzt die std::array Definition im Hintergrund
\item Verfügt über verschiedene vordefinierte Funktionen wie +, +=, sin, cos, \ldots
\end{itemize}
\end{frame}
\begin{frame}{SYCL Vector (vec)}
\begin{itemize}
\item Mischung aus convenience und SIMD Typ
\item Tendenziell jedoch häufig als convenience Typ genutzt
\item Es kann ebenfalls der Typ und die Länge angegeben werden
\item Aber hier besteht jederzeit die Einschränkung auf Längen von 1,2,3,4,8,16
\item Es existierten ähnlich wie bei \texttt{marray} auch Abkürzungen für \texttt{vec}
\begin{itemize}
\item Z.B. \texttt{uchar4} statt \texttt{vec<uint8\_t, 4>}
\item Bei diesen wird das \glqq m\grqq{} weggelassen
\item Diese sind aber nur für Längen von 2,3,4,8 definiert
\end{itemize}
\item Bereits länger im SYCL Standard enthalten
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Laden und Speichern \textrm{I}}
\framesubtitle{SYCL Vector (vec)}
\begin{itemize}
\item \texttt{store(size\_t offset, multi\_ptr ptr)} und \texttt{load(size\_t offset, multi\_ptr ptr)} Funktionen
\item Liest direkt von übergeben Speicheradressen mit dem jeweiligen Offset (das wievielte Element)
\item Nur eine abstrakte Form, der Compiler entscheidet über mögliche Optimierungen
\item Auch wenn diese Form nicht direkt in SIMD übertragen werden kann erhöht es dennoch die Performance
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Laden und Speichern \textrm{II}}
\framesubtitle{SYCL Vector (vec)}
\inputminted[breaklines,mathescape,linenos,numbersep=5pt,frame=single,numbersep=5pt,xleftmargin=-1pt,fontsize=\footnotesize]{cpp}{code/vec_load_store.cpp}
\end{frame}
\begin{frame}{Swizzle Funktionen}
\framesubtitle{SYCL Vector (vec)}
\begin{itemize}
\item Neuanordnung der Datenpunkte eines Vektors
\item Z.B. von \texttt{\{1, 2, 3, 4\}} zu \texttt{\{4, 3, 2, 1\}}
\item Anordnung über Indizes \texttt{vec.swizzle<3, 7, \ldots, 1>}
\item Vordefinierte Umordnungen mit Permutationen\ldots
\begin{itemize}
\item von \texttt{xyzw} und $anzahlElemente \le 4$
\item von \texttt{rgba} und $anzahlElemente = 4$
\end{itemize}
\end{itemize}
\vspace{0.5em}
\inputminted[breaklines,mathescape,linenos,numbersep=5pt,frame=single,numbersep=5pt,xleftmargin=-1pt,fontsize=\footnotesize]{cpp}{code/swizzle.cpp}
\begin{itemize}
\item Ausführung der Umordnung erst, wenn Ausdruck weiterverwendet wird
\end{itemize}\end{frame}
\begin{frame}{Vektoren als \glqq Convenience\grqq{} Implementierung}
\framesubtitle{Hardwareausführung}
\begin{itemize}
\item Vorteilhaft für Portabilität und Wartbarkeit
\item Die Work-Group sollte als Vektor in Hardwareschichten übertragen werden %Nicht das einzelne Work-Item
\item Nutzung sollte sich nicht direkt in der Hardwareimplementierung wieder spiegeln
\item Jedoch sollten Compiler die Struktur des Vektors beachten, wie dieser im Speicher abgelegt wird
\end{itemize}
\begin{center}
\includegraphics[width=110mm]{images/vector_convenience}
\end{center}
\end{frame}
\begin{frame}{Vektoren als SIMD Implementierung}
\framesubtitle{Hardwareausführung}
\begin{itemize}
\item Direkte Übertragung der Implementierung in SIMD Instruktionen
\item Mehr Leistung ausnutzbar
\item Portabilität geht verloren
\item Ausführung von einzelnen Operationen
\end{itemize}
\begin{center}
\includegraphics[width=110mm]{images/Chapter 11-0}
\end{center}
\end{frame}
\begin{frame}{Get Vectored}
\begin{center}
\includegraphics[width=110mm]{images/vector}
\end{center}
\end{frame}
\end{document}