Algorithmen für große Datenmengen

Werbung
Algorithmen für große Datenmengen
Algorithmen für große Datenmengen
Motivation
Algorithmen für große Datenmengen
“One of the few resources increasing faster than the speed of
computer hardware is the amount of data to be processed.”
Bin Hu
Call-for-Papers, IEEE InfoVis 2003
Algorithmen und Datenstrukturen 2
Arbeitsbereich fr Algorithmen und Datenstrukturen
Institut fr Computergraphik und Algorithmen
Technische Universität Wien
Algorithmen für große Datenmengen
Motivation
Speichermodell
Algorithmen für große Datenmengen
Motivation
Speicherzugriff
Algorithmus 1 Testprogramm A
1: Array B = 1, 2, . . . , n;
2: für i = 1, . . . , n {
3:
A[B[i]] = A[B[i]] + 1;
4: }
Geschwindigkeitserhöhung pro Jahr
Prozessoren: 30% – 50%
Speicher: 7% – 10%
Algorithmus 2 Testprogramm B
1: Array B = 1, 2, . . . , n;
2: Array C = RandomPermute(B);
3: für i = 1, . . . , n {
4:
A[C [i]] = A[C [i]] + 1;
5: }
Algorithmen für große Datenmengen
Motivation
Speicherzugriff
Algorithmen für große Datenmengen
Motivation
Speicherzugriff
Probleme klassischer Algorithmen
Zugriff im Hauptspeicher spricht einzelne Elemente an
Zugriff im Externspeicher (ein I/O) liefert ganze Blöcke von
Daten zurück
Geringe Lokalität bei Speicherzugriffen ⇒ mehr Zugriffe als
nötig
Algorithmen für große Datenmengen
Algorithmen für große Datenmengen
Externspeicher Algorithmen
Sekundärspeichermodelle
Parameter
N = Anzahl der Elemente in der Input-Instanz
Part I
M = Anzahl der Elemente, die in den Hauptspeicher passen
B = Anzahl der Elemente, die in einem Block passen
Externspeicher Algorithmen
Annahmen:
M<N
1 ≤ B ≤ M/2
Algorithmen für große Datenmengen
Externspeicher Algorithmen
Sekundärspeichermodelle
Algorithmen für große Datenmengen
Externspeicher Algorithmen
Sekundärspeichermodelle
Vitter und Shriver (1994)
D verschiedene, unabhängige Disks
Pro I/O Zugriff können D · B Elemente bewegt werden
Aggerwal und Vitter (1988)
→ Parallel Disk Model
Disk mit P ≥ 1 unabhängige Zugriffsköpfe
Pro I/O Zugriff können P · B Elemente bewegt werden
Nicht praxisnah, da Zugriffsköpfe nicht unabhängig
voneinander steuerbar sind
Algorithmen für große Datenmengen
Externspeicher Algorithmen
Performance
Algorithmen für große Datenmengen
Externspeicher Algorithmen
Anwendungsfall
Prioritätswarteschlangen (Priority Queue)
Maß für Performance
Anzahl der ausgeführten I/O-Operationen
Anzahl der ausgeführten CPU-Operationen im RAM-Modell
Anzahl der belegten Blöcke auf dem Sekundärspeicher
Datenstruktur zum Speichern von Tupeln aus Information und
Prioritätswert
Einsatz
Dijkstras Shortest-Path Algorithmus
Sortieren (z.B. Heapsort)
Scheduling
...
Algorithmen für große Datenmengen
Externspeicher Algorithmen
Anwendungsfall
Algorithmen für große Datenmengen
Unterstützte Operationen
Insert: Einfügen eines neuen Elements in die Warteschlange
Get Min: Ausgabe des Elements mit kleinstem Schlüssel
Part II
Del Min: Ausgabe und Entfernung des Elements mit dem
kleinsten Schlüssel aus der Liste
Externe Array-Heaps
Frage
Welche Datenstruktur würden Sie verwenden?
Algorithmen für große Datenmengen
Externe Array-Heaps
Aufbau und Eigenschaften
Bestandteile
Interne Datenstruktur H im Arbeitsspeicher
Externe Datenstruktur aus einer Menge von sortierten
Arrays unterschiedlicher Länge
Algorithmen für große Datenmengen
Externe Array-Heaps
Aufbau und Eigenschaften
Interne Datenstruktur
H, aufgeteilt in Heaps H1 und H2
H1 enthält maximal 2c · M Elemente (c ≤ 1)
H2 enthält maximal die B kleinsten Elemente aus jedem Slot
Externe Datenstruktur
Besteht aus L Schichten Li , 1 ≤ i ≤ L
Jede Schicht hat µ = (c · M/B) − 1 Slots
Jeder Slot hat Länge li = (c · M)i /B i−1
Jeder Slot ist leer oder enthält eine sortierte Folge von
höchstens li Elementen
⇒ Slot li+1 kann alles aus Schicht Li plus li Elemente aufnehmen
Algorithmen für große Datenmengen
Externe Array-Heaps
Aufbau und Eigenschaften
Algorithmen für große Datenmengen
Externe Array-Heaps
Operationen
Größenordnung
Maximal 2cM + BµL ≤ 2cM + B( cM
B )L = cM(2 + L)
Elemente für H1 und H2
Zusätzlich cM Zwischenspeicher für Operationen
⇒ M ≥ cM(3 + L), also L ≤
1
c
−3
Algorithmen für große Datenmengen
Externe Array-Heaps
Operationen
Del Min
Invariante: Das kleinste Element befindet sich immer in H
H wird in H1 und H2 aufgeteilt:
H1 enthält die neu eingefügten Elemente, maximal 2cM
H2 speichert maximal die B kleinsten Elemente aus jedem
belegten Slot
Insert
Versucht das Element in H1 einzufügen
Ist dieser voll, kommen l1 = c · M Elemente in die externe
Datenstruktur:
Ist ein freier Slot in Schicht L1 vorhanden, werden die
Elemente dort sortiert eingefügt
Sonst werden alle Elemente aus L1 mit den l1 Elementen aus H
vereinigt und in L2 eingefügt
Ist diese auch voll, wird der Prozess mit L3 wiederholt, usw.
Algorithmen für große Datenmengen
Externe Array-Heaps
Hilfsoperationen
Hilfsoperationen
Merge-Level
Store
Load
Compact
Algorithmen für große Datenmengen
Externe Array-Heaps
Hilfsoperationen
Merge-Level(i, S, S 0 )
Produziert eine sortierte Folge S 0 durch das Mischen der
sortierten Sequenz S und der µ Slots in Li (inkl. der ersten
Blöcke in H2 )
Analyse: O(li+1 /B) I/O’s
Algorithmen für große Datenmengen
Externe Array-Heaps
Hilfsoperationen
Algorithmen für große Datenmengen
Externe Array-Heaps
Hilfsoperationen
Store(i, S)
Annahme: Li enthält einen leeren Slot und Folge S besitzt
Länge im Bereich [li /2, li ]
S wird in einen leeren Slot von Li gespeichert und seine
kleinsten B Elemente nach H2 bewegt.
Analyse: O(li /B) I/O’s
Algorithmen für große Datenmengen
Externe Array-Heaps
Hilfsoperationen
Compact(i)
Load(i, j)
Holt die nächsten B kleinsten Elemente vom j-ten Slot aus Li
in den internen Heap H2
Analyse: O(1) I/O’s
Annahme: es existieren mind. 2 Slots in Li , die zusammen
(inkl. den Elementen in H2 ) höchstens li Elemente haben
Diese beiden Slots werden zusammengefügt, sodass ein Slot in
Li frei wird
Die kleinsten B Elemente werden nach H befördert
Analyse: O(li /B) I/O’s
Algorithmen für große Datenmengen
Externe Array-Heaps
Analyse
Algorithmen für große Datenmengen
Externe Array-Heaps
Experimenteller Laufzeitvergleich
Experiment 1
Zuerst N Elemente in eine leere Prioritätswarteschlange Einfügen,
dann alle entfernen
Analyse
Insert:
18
B (logcM/B (N/B))
I/O Operationen
Del Min: 7/B I/O Operationen
(Amortisierte Analyse, Beweis siehe Skriptum)
Algorithmen für große Datenmengen
Externe Array-Heaps
Experimenteller Laufzeitvergleich
Algorithmen für große Datenmengen
Experiment 2
Ausgehend von einer Prioritätswarteschlange mit 20 Millionen
Elementen wird zufällig Insert oder Del Min aufgerufen
Part III
Cache-optimale Algorithmen
Algorithmen für große Datenmengen
Cache-optimale Algorithmen
Cache
Cache
Cache ist der schnellste Speicher, auf die der Prozessor zugreifen
kann und enthält Regionen des (langsamen) Arbeitsspeichers, die
zuletzt referenziert wurden
Hit: Zugriff auf Speicherbereiche im Cache, kann mit
Prozessorgeschwindigkeit bearbeitet werden
Miss: Zugriff auf Speicherbereiche außerhalb vom Cache,
Daten müssen vom Arbeitsspeicher nachgeleden werden
Parameter
Kapazität Z
Seitengröße L
Algorithmen für große Datenmengen
Cache-optimale Algorithmen
Ausnutzung des Caches
Ausnutzung des Caches
Cache-Aware (Cache-bewusst): Algorithmus enthält
Parameter, mit denen das Cache Verhalten für Kapazität Z
und Seitengröße L optimiert wird
Cache-Oblivious (Cache-ignoroerend): sonst
Beispiel: Matrix-Multiplikation
Multiplikation zweier n × n Matrizen: C = A · B
Matrizen zeilenweise gespeichert
n sehr groß, d.h. n L
Algorithmen für große Datenmengen
Cache-optimale Algorithmen
Lokalitäten
Zeitliche Lokalität
Merkmal: Ein Speicherbereich wird innerhalb einer kurzen
Zeitspanne öfters angesprochen
Ausnutzung: Angesprochene Speicherbereiche möglichst lange
im Cache behalten
Örtliche Lokalität
Merkmal: Speicherbereiche werden angesprochen, die nahe
beieinander liegen
Ausnutzung: Bei einem Miss jeweils ganze Speicherblöcke in
den Cache holen
Algorithmen für große Datenmengen
Cache-optimale Algorithmen
Beispiel: Matrix-Multiplikation
Algorithmus 3 BLOCK-MULT (A, B, C , n)
1: für i = 1 bis n/s {
2:
für j = 1 bis n/s {
3:
für k = 1 bis n/s {
4:
MULT(Aik , Bkj , Cij , s)
5:
}
6:
}
7: }
Cache-Aware Algorithmus
MULT (A, B, C , s): Standard-Prozedur, die C = C + AB auf
s × s Untermatrizen in Zeit O(s 3 ) berechnet
s sollte so gewählt sein, dass die s × s Untermatrizen
zusammen in den Cache passen
Algorithmen für große Datenmengen
Cache-optimale Algorithmen
Beispiel: Matrix-Multiplikation
Cache-Oblivious Algorithmus
Nach dem Divide&Conquer Prinzip wird die Multiplikation
schrittweise in Teilmultiplikationen aufgeteilt
Sobald das Unterproblem ganz in den Cache passt, kann es
ohne Misses gelöst werden
Algorithmen für große Datenmengen
Zusammenfassung
Externspeicher Algorithmen
Algorithmen, die versuchen, organisiert und strukturiert auf den
Sekundärspeicher zuzugreifen, um die Anzahl an I/O
Operationen zu minimieren
Wozu?
Geschwindigkeit von Speicher kann nicht mit der CPU
mithalten
Sekundärspeicher ist groß, aber langsam
Zugriffe liefern ganze Blöcke von Daten
Algorithmen für große Datenmengen
Part IV
Zusammenfassung
Herunterladen