DATENSTRUKTUREN UND ALGORITHMEN
Transcription
DATENSTRUKTUREN UND ALGORITHMEN
Vorlesung 5: DATENSTRUKTUREN UND ALGORITHMEN 125 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Motivation ! 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 126 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, 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: ! ! ! ! 127 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 ! Frage: Welche Komplexität hat das Scannen eines Arrays? 128 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Modell-Annahmen ! Annahme: Für eine dünn besetzte Matrix der Dimensionen M x N gilt nnz = Ω(N, M). ! Annahme: Der schnelle Speicher ist nicht groß genug, um eine Datenstruktur vollständig zu halten. ! Frage: Wie viele Nichtnull-Einträge lassen sich pro GB RAM speichern? (Annahme: 16 Byte pro Eintrag) ! Antwort: 230 / 16 = 226 ! Annahme: Acht Einträge pro Zeile => N · 223 ! Folgerung: L2 Cache kann einen entsprechend großen dicht besetzten Vektor nicht halten. 129 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Wichtige Basisoperationen Matrixoperationen und ihre Entsprechungen bei Graphen: ! Sparse matrix indexing and assignment (SpRef/SpAsgn): ! Auswahl eines Teilgraphs ! Sparse matrix-dense vector multiplication (SpMV): ! Breitensuche ! Tiefensuche ! Sparse matrix addition, andere punktweise Ops (SpAdd): ! Vereinigung von Graphen ! Sparse matrix-sparse matrix multiplication (SpGEMM): ! BFS, DFS von mehreren Startknoten gleichzeitig, APSP 130 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik SpRef / SpAssgn ! SpRef: B = A(p, q) ! Speichern einer Teilmatrix von A in B ! SpAssgn: B(p, q) = A ! Zuweisung einer Matrix A an eine Teilmatrix von B ! Beispiele fürs Indizieren: ! Zeilenwahl: A(i, :) ! Spaltenwahl: A(:, i) 131 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik SpMV ! y = Ax (oder auch y‘ = x‘A) ! Vermutlich gängigste Operation, eingesetzt u. a. in: ! Gleichungssystemlösern ! Eigenlösern ! Weitere (Anwendungs)Beispiele: ! ! ! ! 132 PageRank BFS Bellman-Ford Prims MST-Algorithmus Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik SpAdd ! C=A+B ! Addition hier Repräsentant für andere punktweisen Ops: ! ! ! ! ! MIN MAX AND OR ... ! Vereinigung von Graphen 133 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik SpGEMM ! C = AB ! Anwendungen: ! ! ! ! ! ! ! ! 134 Kontraktion PPC BFS von mehreren Startpunkten APSP Addition von Skalarprodukten (inner products) Addition von dyadischen Produkten (outer products) Zeilenweise Spaltenweise Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Tripel-Format ! Jeder Nichtnull-Eintrag wird durch ein Tripel repräsentiert ! Zeilenindex ! Spaltenindex ! Wert des Eintrags ! Drei Arrays pro Matrix A: ! A.I ! A.J ! A.V ! Repräsentation in Strukturen meist besser als 3 separate Arrays (Cache-Performance, Programmierbarkeit) ! Speicherverbrauch pro Eintrag: 8 + 8 + 8 = 24 Bytes 135 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik (Un)Geordnete Tripel ! Ungeordnet: ! Keine irgendwie geartete Sortierung ! Zeilenordnung: ! Einträge sind gemäß Zeilenindex sortiert ! Einträge derselben Zeile erscheinen in beliebiger Reihenfolge ! Zeilendominante Reihenfolge: ! Einträge sind gemäß Zeilenindex sortiert ! Einträge derselben Zeile gemäß Spaltenindex sortiert ! Möglich: Sortierungsreihenfolge tauschen (Zeile – Spalte) ! In der Theorie (und ggf. bei Dynamik) gut: Hashing ! Übung: Operationen und ihre Komplexität wenn ungeordnet 136 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Geordnete Tripel ! Indizierung immer noch schwierig ! Schneller Zeilenzugriff ohne Index nicht möglich ! Binäre Suche zum Finden des Startpunkts ! Zeilenordnung: Cache-Performance problematisch ! Zeilendominante Reihenfolge, Zugriff auf A(i, j): ! Finde mit binärer Suche ein Tripel (i, j‘, A(i, j‘)) derselben Zeile i ! Von diesem Tripel in beide Richtungen jeweils eine unbegrenzte binäre Suche starten; stoppen, wenn Zeile i verlassen wird ! Innerhalb dieser beiden Stoppgrenzen mit binärer Suche A(i, j) suchen 137 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Beispiel 138 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Komplexität für Referenzierung ! RAM-Modell: ! Kosten für Referenzierung: log nnz(A) + log nnz(A(i, :)) ! EM-Modell: ! Unbegrenzte binäre Suche mglw. schlechter als lineare Scans ! Kosten für Suche in einem sortierten Array: min{log nnz(A(i, :)), scan(A(i, :))} ! Für Spaltenzugriff sowie SpAssgn ergibt sich durch Sortierung innerhalb der Zeilen keine Verbesserung 139 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Zeilendominante Reihenfolge ! y = Ax ! Auf die Arrays in A sowie y wird überwiegend konsekutiv zugegriffen ! Auf x wird mit aufsteigendem Index zugegriffen: ! Verbesserung gegenüber Zeilenordnung ! Trotzdem: Jeder Zugriff kann ein Cache-Fehlzugriff sein ! I/O-optimale Algorithmen für SpMV (Bender et al. 2007) ! SpAdd: Scannen und verschmelzen von sortierten Arrays: ! RAM: O(nnz(A) + nnz(B)) ! EM: O(scan(A) + scan(B)) ! SpGEMM: Fingersuche (Brodal et al. 2005) 140 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik