3.4 Coles paralleler Mergesort-Algorithmus
Dieser Teil ist sehr technisch und wahrscheinlich vorerst nicht Teil der Vorlesung.
Traditioneller paralleler Mergesort
In den vorherigen Kapiteln haben wir Mergesort "wie üblich" durchgeführt und uns darauf konzentriert, eine möglichst effiziente parallele Variante von Merge zu entwerfen. Die Makrostruktur des Algorithmus sah dann - unabhängig von dem Merge-Algorithmus - in etwas so aus:
In jedem Schritt
Versetzen Sie sich in die Lage eines Knotens auf Ebene
Vorkenntnisse. Für einen Knoten
- Statt wie im obigen Beispiel einfach alle Elemente
von Knoten
zum Elternknoten zu schicken, müssen wir festlegen, wie Knoten eine Skizze seiner derzeitigen Liste nach . Jeder Knoten hat also "vorläufige" Liste zum Zeitpunkt (die hoffentlich irgendwann wirklich zu wird). - Wir müssen die Bedingung (2), also die Teilintervalle haben konstante Größe sehr sorgfältig formulieren, damit wir es als Schleifeninvariante tatsächlich beweisen können.
- Wir müssen zeigen, welche Zusatzinformation wir brauchen, damit wir alles Merge-Operationen wirklich in konstanter Zeit erledigen können.
Stichproben weiterschicken
Jeder Knoten
Beispiel. Wir beschreiben eine Choreographie,
nach der ein Knoten
- Schicke jedes zweite Element nach oben (angefangen bei Element 1). Wenn also
ist, dann ist .
Diese Choreographie führt natürlich nie zum Ziel, da zum Beispiel das Element mit Rang 2 nie über Level 1 hinauskommt (und es überhaupt nur das Minimum bis ganz oben schafft). Wir brauchen also eine Choreographie, in der ab irgendeinem Zeitpunkt ein Knoten seine Gesamtliste nach oben weiterleitet.
Beispiel. Wir beschreiben hier eine zweite Choreographie.
- Wenn
und ist, schicke die Gesamtliste weiter: . - Ansonsten schicke jedes zweite Element von
weiter, angefangen beim ersten; formal .
Die Bedingung
Die Entwicklung von
Übungsaufgabe 3.4.1 Betrachten Sie die folgende Choreographie:
- Wenn
, dann setze , schicke also alle Elemente weiter. - Wenn
, dann schicke jedes zweite Element weiter.
Jeder Knoten schickt also nur einmal eine nichtleere, aber auch nicht vollständige Stichprobe nach oben weiter. Die zweite Stichprobe ist dann schon die Gesamtliste, der er im Moment hat. Erkunden Sie die Dynamik dieser Choreographie und erstellen Sie eine Tabelle noch obigen Beispiel.
Die Dynamik in unserem zweiten Beispiel (wo wir jedes zweite Element weiterschicken bis
Übungsaufgabe 3.4.2 Betrachte folgende Dynamik:
- Wenn
und ist, schicke die Gesamtliste weiter: . - Ansonsten schicke jedes vierte Element von
weiter, angefangen beim ersten; formal .
Untersuchen Sie die Dynamik dieser Choreographie, indem Sie eine Tabelle nach obigem Beispiel zeichnen.
Grobstruktur des Algorithmus
Wir nehmen an, dass die Länge
Für eine Liste
So ist zum Beispiel
Weiterhin definieren wir folgende Sampling-Choreographie:
In Worten: ein Knoten auf Level
Dies ist die Grobstruktur von Coles parallelem Mergesort-Algorithmus. Wir müssen nun
verstehen, wie die merge-Operation in konstanter Zeit ausgeführt werden kann und
wie man dafür die
Dichte Listen
Sei
Definition 3.4.1 (Rang
und Distanz.) Sei
der Rang von
Definition 3.4.2
Seien
gilt, für alle Elemente
Wir betonen, dass die Elemente
Beobachtung 3.4.3
Es gilt
Übungsaufgabe 3.4.3 Beweisen Sie die Behauptung.
Lemma 3.4.4
(Schleifeninvariante des Algorithmus).
Seien
Beweis.
Falls
Im anderen Falle gilt
Per Induktion gilt die Schleifeninvariante für
Sei
Behauptung.
Sei
Beweis.
Seien
Wir werden nun
wobei die letzte Zeile aus Beobachtung 3.4.3 folgt.
Wir setzen dies nun in (
da nach Annahme
Da
Ränge kennen und merge schnell durchführen
Definition 3.4.5
Seien
Invariante 3.4.6
Sei
Wir zeigen nun, wie man (1) mit Hilfe dieser Invariante die Operation
Lemma 3.4.7
(Bedingte Transitivität).
Sei
Beweis.
Wir kennen
Um
Um genauer zu sein: der für das
Lemma 3.4.8
(Bedingte Symmetrie).
Wenn
Beweis.
Wir haben je einen Prozessor pro Zelle des Arrays
- for each
:
Nach Annahme gilt
Der für on verantwortliche Prozessor muss allen Elementen in
Lemma 3.4.9
(Wie man merge schnell berechnet). Wir können
Beweis.
Nach Invariante 3.4.6 gilt
Mit Hilfe von Lemma 3.4.8 und Lemma 3.4.7 können wir nun
berechnen. Jedes Element
Beobachtung 3.4.10
Wir können in
Beweis.
Sei
1. Für jedes
2. Für jedes
und nach Lemma 3.4.7 können wir
auch
Wir haben nun also sowohl
Verteilung der Prozessoren
Sobald
Übungsaufgabe 3.4.4
Zeigen Sie: zu jedem Zeitpunkt ist die Anzahl der Elemente in aktiven Knoten höchstens
Wenn wir Level