External Memory Algorithmus
Diese Baustelle befindet sich fälschlicherweise im Artikelnamensraum. Bitte verschiebe die Seite oder entferne den Baustein {{Baustelle}} .
|
Ein External Memory Algorithmus (auch Out-of-Core Algorithmus) ist ein Algorithmus der darauf optimiert ist Datenmengen effizient zu verarbeiten, welche die Kapazität des verfügbaren Hauptspeichers übersteigen. Zugriffe auf Massenspeicher wie Festplatten oder Netzwerkspeicher sind um mehrere Größenordnungen langsamer als Operationen der ALU oder Zugriffe auf höhere Ebenen der Speicherhierarchie. Deshalb ist für die Performance von External Memory Algorithmen die Anzahl der I/O-Operationen auf langsamen Massenspeichern maßgeblich.

Analyse im Parallel Disk Model (PDM)
Das häufig verwendete Parallel Disk Model modelliert die wichtigsten Eigenschaften von magnetischen Festplatten und Systemen mit mehreren parallel angebundenen Festplatten.[1] Wir betrachten hier nur batch-Probleme und Systeme mit einem Prozessor. Für online-Probleme und Systeme mit beliebiger Anzahl Prozessoren siehe Vitter (2006).[1]
Definition
Das Modell besteht aus einem internen Speicher welcher Datenelemente fasst, sowie einem unbegrenzten externen Speicher welcher aus parallelen Festplatten besteht. Jede dieser Festplatten kann während einem gemeinsamen I/O-Schritt Datenelemente in den internen Speicher schreiben oder aus ihm lesen. Die Problemgröße wird mit Datenelementen beziffert. Desweiteren soll gelten sowie .
Oft können Formeln vereinfacht werden, wenn statt der oben verwendeten Größen in Anzahl von Datenelementen die jeweilige Größe in Anzahl von Blöcken verwendet werden. Hieraus ergeben sich die abgeleiteten Größen sowie .

Für eine effiziente Verarbeitung müssen die Eingabedaten des Problems im striped Format auf den D Platten verteilt vorliegen (siehe Abbildung für ein Beispiel). Die Ausgabe des Algorithmus soll dem gleichen Format folgen.
Fundamentale Operationen
Die I/O-Komplexität vieler Algorithmen wird im wesentlichen bestimmt durch die performance einiger fundamentaler Operationen:
- Scanning (auch streaming oder touching) – Lesen oder schreiben von sequentiellen Datenelementen
- Sortieren von Datenelementen (vergleichsbasiert)
Schranken für die I/O-Komplexität dieser Operationen finden sich in folgender Tabelle:
Operation | I/O-Schranke, D = 1 | I/O-Schranke, D ≥ 1 |
---|---|---|
Techniken
Beispiele
Merge Sort
Betrachten wir External Memory Merge Sort für . Dieser Algorithmus arbeitet in zwei Phasen.
In der ersten Phase namens run formation werden jeweils der Eingabeblöcke in den internen Speicher eingelesen, dort sortiert und anschließend wieder zurück in den externen Speicher geschrieben. Als Ergebnis dieser Phase stehen die Eingabedaten nun als sortierte runs im hintereinander im externen Speicher.
In der zweiten Phase des Algorithmus werden die existierenden runs rekursiv verschmolzen bis nur noch ein vollständig sortierter run existiert. Dazu werden pro Rekursionsebene jeweils runs gleichzeitig Blockweise durch den internen Speicher gestreamt, und dabei zu einem sortierten run verschmolzen. Pro Ebene werden alle Elemente je einmal gelesen und geschrieben, was I/Os entspricht. Nach Merge-Phasen ist nur noch ein sortierter run übrig, das Ergebnis.
Insgesamt benötigt der Algorithmus also I/Os, ist also optimal.
Motivation
Klassischerweise wird die Laufzeit von Algorithmen in Berechnungsmodellen ohne Speicherhierarchie analysiert. In diesen Modellen verursacht ein Speicherzugriff konstante Kosten, genau wie die Ausführung arithmetischer Befehle. Desweiteren sind die Kosten eines Speicherzugriffs unabhängig von der Adresse auf die zugegriffen wird, sowie von vorangegangenen Zugriffen.
Diese Annahmen sind vereinfachend und entsprechen nicht der Realität. Einerseits unterscheiden sich die Zugriffszeiten zwischen zwei Ebenen der Speicherhierarchie für gewöhnlich um Größenordnungen. Andererseits führen Caches sowie die Funktionsweise von Festplatten dazu, dass der Zugriff auf mehrere aufeinander folgende Adressen üblicherweise schneller ist, als der Zugriff auf zufällige Adressen.
An der Grenze zwischen Haupt- und Massenspeicher ist dieser Effekt besonders stark. Siehe dazu auch Speicherhierarchie.
Anwendung
Es existieren diverse Bibliotheken und Tools um External Memory Algorithmen zu implementieren. Ein umfassende Übersicht ist in Vitter (2006) ab Seite 141 zu finden.
Geschichte
Laut Vitter[1] begann die Arbeit an External Memory Algorithmen bereits 1956 in Stanford mit H. B. Demuths Dissertation Electronic data sorting.[2] Auch Donald E. Knuth beschäftigte sich in seiner 1973 veröffentlichte Monografie The Art of Computer Programming – Volume 3: Sorting and Searching ausgiebig mit dem Sortieren von Daten auf Magnetbändern und zum Teil auch auf Festplatten.[3] Etwa zur selben Zeit präsentierte Robert W. Floyd in seiner Arbeit Permuting Information in Idealized Two-Level Storage ein Modell ähnlich PDM mit Parametern , , mit .[4] 1988 erweiterten Aggarwal und Vitter in The input/output complexity of sorting and related problems Floyds Modell um die Möglichkeit von parallelen Block-Transfers. [5] 1994 führten Vitter und Shriver das Parallel Disk Model ein, welches eine realitätsnähere Version von Aggarwal und Vitters Modell darstellt.[6]
Siehe auch
- Speicherhierarchie
- Cache-Oblivious Algorithmus – für eine alternative Modellierung, bei der dem Algorithmus und nicht zur Verfügung stehen
Einzelnachweise
- ↑ a b c Jeffrey Scott Vitter: Algorithms and Data Structures for External Memory. In: Foundations and Trends® in Theoretical Computer Science. Band 2, Nr. 4, 2006, ISSN 1551-305X, S. 305–474, doi:10.1561/0400000014 (nowpublishers.com [abgerufen am 26. Juli 2019]).
- ↑ Demuth, Howard B.: Electronic data sorting. Department of Electrical Engineering, Stanford University, 1956 (worldcat.org [abgerufen am 29. Juli 2019]).
- ↑ Knuth, Donald Ervin: The Art of Computer Programming. Vol. 3, Sorting and Searching. Addison-Wesley, 1973, ISBN 0-201-89685-0 (worldcat.org [abgerufen am 29. Juli 2019]).
- ↑ Robert W. Floyd: Permuting Information in Idealized Two-Level Storage. In: Complexity of Computer Computations. Springer US, Boston, MA 1972, ISBN 978-1-4684-2003-6, S. 105–109, doi:10.1007/978-1-4684-2001-2_10 (springer.com [abgerufen am 29. Juli 2019]).
- ↑ Alok Aggarwal, Jeffrey,S. Vitter: The input/output complexity of sorting and related problems. In: Communications of the ACM. Band 31, Nr. 9, 1. August 1988, S. 1116–1127, doi:10.1145/48529.48535 (acm.org [abgerufen am 29. Juli 2019]).
- ↑ J. S. Vitter, E. A. M. Shriver: Algorithms for parallel memory, I: Two-level memories. In: Algorithmica. Band 12, Nr. 2-3, 1994, ISSN 0178-4617, S. 110–147, doi:10.1007/BF01185207 (springer.com [abgerufen am 26. Juli 2019]).