Prof. Dr. Henning Meyerhenke | Fakultät für Informatik DATENSTRUKTUREN UND ALGORITHMEN 112 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Ist die Datenstruktur so wichtig??? Wahl der Datenstruktur wichtiger Schritt beim Entwurf und der Implementierung von Algorithmen Dünn besetzte Graphen und Matrizen bilden keine Ausnahme Bei dünn besetzten Matrizen gegenseitiger Einfluss: Algorithmen bestimmen Wahl der Datenstruktur Wahl der Datenstruktur bestimmt Algorithmen Analyse der Algorithmen im RAM-Modell und im I/O-Modell 113 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik 2.1: EM- bzw. I/O-Modell Motivation Ein Rechner, insbesondere der Speicher, ist hierarchisch aufgebaut Register ... Grund: ??? Wichtig: Blockbasierter Zugriff günstiger als zufälliger Konzept lässt sich auf andere Bereiche übertragen: Parallele Kommunikation Stapelweise Abarbeitung 114 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Speicherhierarchie Blockweise Abarbeitung unter Ausnutzung von Lokalität Chip CPU Register 115 On-/off-Chip, geteilt/privat L2 Cache L1 Cache ~ 64 KB ~ 4 MB L1 cache hit: 1-3 Zyklen L2 cache hit: 10-15 Zyklen Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Main Memory (RAM) ~ 8 GB RAM (cache) hit: 100-250 Zyklen Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik I/O-Modell = EM-Modell Speicher ist hierarchisch organisiert: Register Caches (L1, L2, L3) RAM SSD, HDD Cache External Memory-Modell: 116 2 Ebenen: Schnell und langsam Schnell: Cache oder (Haupt)Speicher Langsam: (Haupt)Speicher oder Platte Benennung nur Termini, Prinzipien gelten für jeden Ebenenübergang Graphenalgorithmen und lineare Algebra Hand in Hand RAM Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Modell-Parameter Speicher partitioniert in Blöcke der Größe L (Größe einer Cachezeile) Größe des schnellen Speichers ist Z Langsamer Speicher ist nicht limitiert in der Größe Referenziertes Datum nicht im Cache: Cache-Fehlzugriff Blocktransfer vom RAM in den Cache Komplexitätsmaß: Zahl der Cache-Fehlzugriffe (I/Os) Frage: Welche Komplexität (Anzahl I/O-Operationen) hat das Scannen eines Arrays der Länge N? 117 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik Externes Sortieren Ausnahmsweise kein Graphen- oder Matrixalgorithmus! Eingabe: Zahlenfolge A der Länge N >> Z Ausgabe: A sortiert abgelegt im langsamen Speicher Externes Merge-Sort am Beispiel (s. Wikipedia): Sortiere 400 MB Daten mit 100 MB schnellem Speicher 1. Lese 100 MB Daten in schnellen Speicher und sortiere diese mit einem internen Algorithmus, bspw. Quicksort 2. Schreibe die sortierten Daten in den langsamen Speicher 3. Wiederhole 1) und 2), bis alle 100 MB-Blöcke sortiert sind. 4. Lies die ersten 20 MB (= 100 MB / (4 Blöcke + 1)) jedes sortierten Blocks in den schnellen Speicher, Rest: Ausgabepuffer 5. Führe 4-fach-Merge(-Sort) durch und speichere Ergebnis im Ausgabepuffer. Wenn Ausgabepuffer voll, dann in langsamen Speicher schreiben. Wenn Eingabepuffer leer, dann nächsten Block lesen 118 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Skizze und Zeitkomplexität Externe Sortierphase: O(N/L) I/Os Merge-Phase: k-faches Verschmelzen mit k = Z/2L Zeitkomplexität: O(N/L * logZ/L (N/L)) I/Os = O(sort(N)) 119 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik Externes Sortieren, alternatives Beispiel 512 GB Daten sortieren, interner Speicher der Größe 4 GB Annahme: 8-faches Verschmelzen besonders effizient Frage: Wie läuft der Algorithmus nun ab? 128 Iterationen der ersten Phase => 128 Blöcke, in sich sortiert (iss) 1. Verschmelziter.: 8-faches Verschmelzen => 128/8 = 16 Blöcke, iss 2. Verschmelziter.: 8-faches Verschmelzen => 16/8 = 2 Blöcke, iss 3. Verschmelziter.: 2-faches Verschmelzen => 2/2 = 1 Block, vollständig sortiert Zeitkomplexität: O(N/L * logZ/L (N/L)) I/Os = O(sort(N)) 120 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Analyse im Detail Merge-Sort intern: 1. Phase: Erstellung sortierter Folgen 2. Phase: Verschmelzen von zwei sortierten Folgen Abbruch, wenn nur noch eine sortierte Folge übrig bleibt Analyse des internen Algorithmus im I/O-Modell: 1. Phase: keine I/Os 2. Phase: Verschmelzen von S1 und S2 benötigt O(1 + (|S1| + |S2|) / L) I/Os (scanning) Jedes Element ist in O(log N) Verschmelzungs-Ops. involviert Es gibt O(N) Verschmelzungs-Ops. (Baum!) => O(N + (N / L) log2 N) I/Os 121 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik Illustration Siehe Tafel! 122 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Das muss schneller gehen! Beschleunigung durch veränderte 1. Phase: Sicherstellen, dass 2. Phase mit N / Z sortierten Folgen startet (anstelle von N) Dazu: N / Z Stücke der Größe Z bilden, in den internen Speicher holen, dort sortieren und wieder zurückschreiben Aufwand: O((N / Z) * (Z / L)) = O(N / L) I/Os Kosten für neue 2. Phase wg. weniger Sequenzen: O(N / Z + (N / L) log2 (N / Z)) I/Os Gesamt: O((N / L) log2 (N / L)) I/Os Grund: N / Z < N / L, Z <= poly(L) Zum Vergleich, vorher: O(N + (N / L) log2 N) I/Os 123 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik Basis des log drücken Beschleunigung durch veränderte 2. Phase: Sicherstellen, dass Zahl der Sequenzen sich um einen Faktor Ω(Z / L) reduziert von einer Iteration zur nächsten Dann: O(logZ / L (N / L)) Iterationen reichen aus! Darum: k-faches Verschmelzen mit k = Z / 2L Sequenzen Beispiel: Siehe Tafel! Gesamtlaufzeit: O(N/L * logZ/L (N/L)) I/Os = O(sort(N)) 124 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Zwischenfazit EM-Modell Speicherhierarchie wichtiger Aspekt eines Rechners Übergang der Ebenen universell Blockweise Abarbeitung wichtig Dazu Lokalität ausnutzen! Möglichst wenig im Speicher springen! Wesentliche Operationen mit Laufzeiten: Scannen: scan(N) = O(N / L) I/Os Sortieren: sort(N) = O(N/L * logZ/L (N/L)) I/Os 125 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik Minimum Spanning Forest Algorithmus für RAM-Modell von Jarnik und Prim Eingabe: Ungerichteter gewichteter Graph G = (V, E) Ausgabe: Wald von Spannbäumen minimalen Gewichts Algorithmus (Skizze): Starte mit beliebigem Knoten Iteriere: Verbinde unbesuchten Knoten mit Baum, der über die leichteste Kante verbunden ist Wiederhole für weitere ZHK Prioritätswarteschlange speichert Knoten Laufzeit: O(m log n) mit binären Heaps O(m + n log n) mit Fibonacci-Heaps 126 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Beispiel 0 1 2 1 3 4 3 2 8 4 5 1 7 4 4 1 2 9 1 3 1 6 4 5 127 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik Minimum Spanning Forest Algorithmus für EM-Modell von [Arge et al., SWAT‘00] Eingabe und Ausgabe wie eben Änderung des Algorithmus: Prioritätswarteschlange PQ für EM-Modell PQ speichert nun Kanten anstatt Knoten: Keine Aktualisierungen nötig PQ enthält (mindestens) alle Kanten, die Knoten des Baums mit Knoten außerhalb verbinden Es können darin auch Kanten sein, die zwei Baumknoten miteinander verbinden Iteration des Algorithmus (sei u der aktuelle Knoten): Extract-min aus PQ für Kante (u, v) Nur falls v noch nicht im Baum: Füge v zum Baum hinzu, füge seine inzidenten Kanten außer (u, v) in PQ ein 128 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Analyse des Algorithmus Korrektheit Jeder Knoten im Baum fügt seine inzidenten Kanten hinzu PQ kann daher zwei Kopien derselben Kante beinhalten Annahme: Alle Kantengewichte sind verschieden Wenn Kante e aus PQ entfernt wird, ist ihre Kopie mglw. nächstes Min. => zweites extract-min zum Test, ob v im Baum Bei gleichem Startknoten (pro ZHK) und eindeutigen Kantengewichten: Reihenfolge der bearbeiteten Knoten wie bei RAMAlgorithmus => gleiches Endergebnis 129 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Prof. Dr. Henning Meyerhenke | Fakultät für Informatik Analyse des Algorithmus Laufzeit Die Adjazenzliste jedes Knotens wird einmal gelesen: O(n + m/L) I/Os O(m) Einfüge- und extract-min-Operationen PQ: Einfügen und extract-min von m Elementen in O(1/L logZ/ L (m/L)) amortisierter Zeit Laufzeit: O((n + m/L) + m * logZ/L (m/L) / L) = O(n + sort(m)) Schnellere EM-Verfahren existieren 130 Graphenalgorithmen und lineare Algebra Hand in Hand KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik