diff --git a/2-6-array-verteilung.tex b/2-6-array-verteilung.tex new file mode 100644 index 0000000..e0de9ae --- /dev/null +++ b/2-6-array-verteilung.tex @@ -0,0 +1,19 @@ +% !TeX spellcheck = de_DE +\subsection{Array-Verteilung in High-Performance Fortran} +\begin{itemize} + \item manuelles Platzieren (\enquote{Mapping}) gemeinsam benutzter Datenstrukturen auf verschiedenen Knoten + \item 1. Phase: \begriff{Array-Ausrichtung} (\enquote{Alignment}): \begin{itemize} + \item Elemente von $X$ mit $Y$ in Relation setzen: \texttt{!HPF\$ ALIGN X(I) WITH Y(I+1)} + \item abstrakte \begriff{Templates} für Verteilung von Arrays: \texttt{!HPF\$ template T[:,:]} (2-dimensional) + \item auch Replikation: \texttt{!HPF\$ ALIGN X[i] WITH T[i, *]} + \item kompliziertere Verteilungen: \texttt{!HPF\$ ALIGN A[i,j] WITH T[x*i+a, y*j+b]} + \end{itemize} + \item 2. Phase: \begriff{Array-Verteilung} (\enquote{Distribution}) der Indexmenge auf \begriff{abstrakte Prozessoren}: \begin{itemize} + \item zyklisch (\texttt{!HPF\$ DISTRIBUTE A(CYCLIC)}): Prozessor $j$ von $P$ bekommt Elemente $i$, für die\\ + ${(i \mod P) = j}$ gilt + \item blockweise (\texttt{!HPF\$ DISTRIBUTE A(BLOCK)}): jeder Prozessor bekommt zusammenhängenden Block von $\lceil\frac{N}{P}\rceil$ Elementen + \item zufällig + \item block-zyklisch (\texttt{!HPF\$ DISTRIBUTE A(CYCLIC(k))}): zusammenhängende Blöcke der Größe $k$ werden über Prozessoren zyklisch verteilt + \item Gitter $a\times b$ an Prozessoren anlegen (\texttt{!HPF\$ PROCESSORS gitter(a,b)}), Array darauf verteilen (\texttt{!HPF\$ DISTRIBUTE A(BLOCK,BLOCK) ONTO gitter}) + \end{itemize} +\end{itemize} \ No newline at end of file diff --git a/zusammenfassung.tex b/zusammenfassung.tex index c81cc85..3757b1b 100644 --- a/zusammenfassung.tex +++ b/zusammenfassung.tex @@ -57,6 +57,7 @@ \input{2-1-einfuehrung} \input{2-2-msg} \input{2-3-mpi} +\input{2-6-array-verteilung} \input{2-6-pgas} \input{2-7-dsm} \section{Architektur (Lehrstuhl i3)}