% !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}