% !TeX spellcheck = de_DE
\subsection{Heterogene Architekturen}
\begin{itemize}
	\item Heterogenität in Hard- und Software nimmt zu (Energieverbrauch, Spezialhardware, Beschleunigerkarten, \textellipsis)
	\item MPI + \begriff{OpenMP} für Ausnutzung von Multi-Core-Rechnern: \begin{itemize}
		\item Compiler-Direktiven und Hilfsbibliothek erlauben Multi-Threading über Shared Memory
		\item grundlegendes Modell: \begriff{fork/join-Parallelismus}
		\item im Vergleich zu reinem MPI muss pro Knoten (nicht Ausführungsthread!) eine MPI-Instanz laufen
	\end{itemize}
	\item MPI + \begriff{CUDA} für Unterstützung von (nVidia-) Grafikkarten: \begin{itemize}
		\item Grafikkarten können mittlerweile für allgemeine, massiv-parallele Berechnungen (\begriff{GPGPU}) verwendet werden
		\item Ausführungsmodell Single-Instruction-Multiple-Thread (\begriff{SIMT}): \begin{itemize}
			\item Gruppierung zu Multiprozessoren/Threads
			\item Threads weiter in Blöcke, diese in Gitter gruppiert
			\item gleiche Instruktion für alle Blöcke, Datenzugriff durch Thread-ID
		\end{itemize}
		\item nicht-einheitliche Sprünge problematisch und keine Branch-Prediction
		\item im Vergleich zur CPU sehr viele Register und sehr schnell angebundener Grafikspeicher
		\item Programmierung: \begin{itemize}
			\item explizite Kennzeichnung des Codes für CPU bzw. GPU
			\item spezieller Compiler notwendig
			\item verschiedene Qualifier für Funktionen und Speicherbereiche
			\item \begriff{CUDA-aware MPI} kann auch Speicher auf GPUs direkt verwenden
			\item Optimierungen wie \begriff{GPU-Direct} können GPUs direkt ohne Host über das Netzwerk kommunizieren lassen bzw. RDMA vornehmen
		\end{itemize}
	\end{itemize}
	\item Mircoservers mit ARM-Prozessoren und \begriff{FPGA}s
	\item neuartige Architekturen (z.B. Parallela)
\end{itemize}