diff --git a/3-5-lastausgleich.tex b/3-5-lastausgleich.tex index b650cb9..88f8592 100644 --- a/3-5-lastausgleich.tex +++ b/3-5-lastausgleich.tex @@ -1 +1,50 @@ -\subsection{Lastausgleich} \ No newline at end of file +% !TeX spellcheck = de_DE +\subsection{Lastausgleich} +\begin{itemize} + \item meist durch Verteilung der Datenstrukturen einer Anwendung anhand von Heuristiken + \item \begriff{statisch}, falls Ausführungszeiten vorher bekannt:\begin{itemize} + \item \begriff{Koordinaten-Bisektion}:\begin{itemize} + \item jedem Punkt Koordinaten zuordnen + \item entlang längster Achse sortieren und in gleich große Gruppen partitionieren + \item jetzt längste Achse wählen und rekursiv in Teilgruppen fortsetzen + \item einfach implementierbar und parallel berechenbar + \item keine Berücksichtigung von Kommunikationsbeziehungen (Kommunikation insbesondere oft über Gruppen hinweg) + \end{itemize} + \item \begriff{Graph-Koordinate}:\begin{itemize} + \item zwei Knoten mit größter Distanz im Graphen wählen + \item pro Extremknoten möglichst gleich große Gruppe an nahegelegenen Punkten wählen + \item rekursiv in Teilgruppen fortsetzen + \item Berücksichtigung der Kommunikationsbeziehungen + \item kompliziertere Distanzberechnung und potentiell ungleiche Lastverteilung + \end{itemize} + \end{itemize} + \item \begriff{dynamisch}, falls Ausführungszeiten erst zur Laufzeit bestimmt:\begin{itemize} + \item diffusionsbasierte (synchron und asynchron) Algorithmen: \begin{itemize} + \item lokal, basiert auf Nachbarschaftsinformationen + \item sukzessive Migration + \item für Gitterprobleme besonders geeignet + \end{itemize} + \item synchron-parallele Algorithmen (\enquote{scratch and map}): \begin{itemize} + \item global, Neuverteilung der Rechenlast + \item für switch-basierte Netzwerke wie Cluster besonders geeignet + \item \begriff{Tree-Walking}-Algorithmus:\begin{itemize} + \item synchron + \item Anstoß, wenn Warteschlange an Threads für Knoten unter Schwelle fällt, durch Nachricht an Nachbarn (und Weiterverbreitung) + \item jeder Knoten sammelt Last-Informationen seiner Kindknoten bis zur Wurzel hoch + \item Durchschnittslast $l_\text{avg} = \lfloor \frac{W}{N}\rfloor$ und Rest $l_\text{rem} = W \mod N$ an alle Kinder rekursiv verteilen + \item Ausgleichsanteil $Q = l_\text{avg} \cdot \#\text{PEs in Unterbaum}$ pro Knoten bestimmen + \item falls $Q - W > 0$, Empfang von $Q - W$ Tasks von Eltern-Knoten + \item sonst Senden von $W - Q$ Tasks an Eltern-Knoten + \item hoher Kommunikationsaufwand + \end{itemize} + \item \begriff{Switch-Walking}-Algorithmus:\begin{itemize} + \item verteilte Berechnung der Lastinformationen + \item Start-Nachricht durch \begriff{In-Fat}-Algorithmus verteilen (rekursives Senden an den an der Grenze liegenden Prozessor der andern Hälfte) + \item Last-Informationen durch \begriff{All-Gather}-Algorithmus einsammeln (Umkehrung von In-Fat-Verfahren) + \item Last-Informationen global durch In-Fat-Algorithmus wieder verteilen + \item in jedem Knoten $l_\text{avg}$ und $l_\text{rem}$ bestimmen und für jeden Knoten Über- bzw. Unterschuss berechnen + \item überschüssige Tasks versenden, fehlende Empfangen + \end{itemize} + \end{itemize} + \end{itemize} +\end{itemize} \ No newline at end of file