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