% !TeX spellcheck = de_DE
\subsection{Partitioned Global Address Space (PGAS)}
\begin{itemize}
	\item verschiedene Adressräume: \begin{itemize}
		\item viele lokale (z.B. für Stack, temporäre Variablen, \textellipsis)
		\item ein globaler (z.B. für gemeinsam genutzte Datenstrukturen, Konstanten, \textellipsis) verteilt auf lokal zugeordnete Bereiche
	\end{itemize}
	\item damit auch von Adressraum abhängige lokale bzw. globale Referenzen
	\item für Singlecore-Cluster: \begin{itemize}
		\item \textsc{Unified Parallel C} (UPC): \begin{itemize}
			\item C-Erweiterung
			\item \texttt{shared}-Pointer für globale Referenzen
			\item Bibliotheksprimitiven für parallele Ausführung, Synchronisation, kollektive Operationen, \textellipsis
			\item Arrays können block-zyklisch verteilt werden: \texttt{shared[b] int a[n]} (Blockgröße $b$ bei $n$ Elementen)
		\end{itemize}
		\item \textsc{Titanium}: \begin{itemize}
			\item Java-Erweiterung
			\item \texttt{local} markiert lokale Daten
			\item Bibliotheksprimitiven für Synchronisation, unveränderliche Datenstrukturen, \textellipsis
			\item Datenverteilung: \begin{itemize}
				\item mittels \texttt{broadcast}/\texttt{exchange}
			\end{itemize}
		\end{itemize}
	\end{itemize}
	\item Multicore-Cluster: \begin{itemize}
		\item häufig anderer Ansatz: Sicht auf globales Programm mit expliziter Parallelität und eigenständige Programmiersprachen statt Erweiterung bestehender imperativer Sprachen
		\item \textsc{Chapel}: \begin{itemize}
			\item explizite Parallelität: \begin{itemize}
				\item Datenparallelität: verteilte Arrays mit Domänen auf verschiedenen Lokalitäten
				\item Taskparallelität: leichtgewichtige Aktivitäten
			\end{itemize}
			\item Speicherlayout: \begin{itemize}
				\item Zerlegung des globalen Adressbereichs in \texttt{locales}, welche jeweils einem Rechner entsprechen
				\item Arrays werden über Domänen erzeugt, mit denen gerechnet werden kann, dann Zuordnung von Index zu Lokalität
			\end{itemize}
		\end{itemize}
		\item \textsc{X10}: \begin{itemize}
			\item Speicherlayout: \begin{itemize}
				\item Zerlegung des Adressbereichs in \texttt{places}
				\item Variablen unveränderlich, lokal und geteilt bei Deklaration
				\item Zugriff auf Variablen über Aktivitätsgrenzen auf gleichen Place beschränkt
				\item Zugriff auf Variablen in anderen Places durch (temporäre) Verlagerung des Programmflusses auf den jeweiligen Place
			\end{itemize}
		\end{itemize}
	\end{itemize}
\end{itemize}