„External Memory Algorithmus“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[ungesichtete Version][ungesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Raphinesse (Diskussion | Beiträge)
Merge Sort
Raphinesse (Diskussion | Beiträge)
Abschnitt Geschichte ausgearbeitet
Zeile 63: Zeile 63:


== Geschichte ==
== Geschichte ==
Das ''Parallel Disk Model'' wurde 1994 von Vitter und Shriver eingeführt<ref name="Vitter 2006" /><ref name="Vitter 1994" />.
Laut Vitter<ref name="Vitter 2006" /> begann die Arbeit an External Memory Algorithmen bereits 1956 in Stanford mit H. B. Demuths Dissertation ''Electronic data sorting''.<ref name="Demuth 1994" />
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.<ref name="Knuth 1973" />
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 <math>D=1</math>, <math>P=1</math>, <math>B=M/2=\Theta(N^c)</math> mit <math>0<c<1</math>.<ref name="Floyd 1972" />
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. <ref name="Aggarwal 1988" />
1994 führten Vitter und Shriver das Parallel Disk Model ein, welches eine realitätsnähere Version von Aggarwal und Vitters Modell darstellt.<ref name="Vitter 1994" />


== Siehe auch ==
== Siehe auch ==
Zeile 75: Zeile 79:
<ref name="Vitter 2006">{{Literatur |Autor=Jeffrey Scott Vitter |Titel=Algorithms and Data Structures for External Memory |Sammelwerk=Foundations and Trends® in Theoretical Computer Science |Band=2 |Nummer=4 |Datum=2006 |ISSN=1551-305X |DOI=10.1561/0400000014 |Seiten=305–474 |Online=http://www.nowpublishers.com/article/Details/TCS-014 |Abruf=2019-07-26}}</ref>
<ref name="Vitter 2006">{{Literatur |Autor=Jeffrey Scott Vitter |Titel=Algorithms and Data Structures for External Memory |Sammelwerk=Foundations and Trends® in Theoretical Computer Science |Band=2 |Nummer=4 |Datum=2006 |ISSN=1551-305X |DOI=10.1561/0400000014 |Seiten=305–474 |Online=http://www.nowpublishers.com/article/Details/TCS-014 |Abruf=2019-07-26}}</ref>
<ref name="Vitter 1994">{{Literatur |Autor=J. S. Vitter, E. A. M. Shriver |Titel=Algorithms for parallel memory, I: Two-level memories |Sammelwerk=Algorithmica |Band=12 |Nummer=2-3 |Datum=1994 |ISSN=0178-4617 |DOI=10.1007/BF01185207 |Seiten=110–147 |Online=http://link.springer.com/10.1007/BF01185207 |Abruf=2019-07-26}}</ref>
<ref name="Vitter 1994">{{Literatur |Autor=J. S. Vitter, E. A. M. Shriver |Titel=Algorithms for parallel memory, I: Two-level memories |Sammelwerk=Algorithmica |Band=12 |Nummer=2-3 |Datum=1994 |ISSN=0178-4617 |DOI=10.1007/BF01185207 |Seiten=110–147 |Online=http://link.springer.com/10.1007/BF01185207 |Abruf=2019-07-26}}</ref>
<ref name="Demuth 1994">{{Literatur |Autor=Demuth, Howard B. |Titel=Electronic data sorting |Hrsg= |Sammelwerk= |Band= |Nummer= |Auflage= |Verlag=Department of Electrical Engineering, Stanford University |Ort= |Datum=1956 |ISBN= |Seiten= |Online=http://worldcat.org/oclc/25124024 |Abruf=2019-07-29}}</ref>
<ref name="Knuth 1973">{{Literatur |Autor=Knuth, Donald Ervin |Titel=The Art of Computer Programming. Vol. 3, Sorting and Searching |Hrsg= |Sammelwerk= |Band= |Nummer= |Auflage= |Verlag=Addison-Wesley |Ort= |Datum=1973 |ISBN=0201896850 |Seiten= |Online=http://worldcat.org/oclc/951274350 |Abruf=2019-07-29}}</ref>
<ref name="Floyd 1972">{{Literatur |Autor=Robert W. Floyd |Titel=Permuting Information in Idealized Two-Level Storage |Sammelwerk=Complexity of Computer Computations |Verlag=Springer US |Ort=Boston, MA |Datum=1972 |ISBN=9781468420036 |DOI=10.1007/978-1-4684-2001-2_10 |Seiten=105–109 |Online=http://link.springer.com/10.1007/978-1-4684-2001-2_10 |Abruf=2019-07-29}}</ref>
<ref name="Aggarwal 1988">{{Literatur |Autor=Alok Aggarwal, Jeffrey,S. Vitter |Titel=The input/output complexity of sorting and related problems |Sammelwerk=Communications of the ACM |Band=31 |Nummer=9 |Datum=1988-08-01 |DOI=10.1145/48529.48535 |Seiten=1116–1127 |Online=http://portal.acm.org/citation.cfm?doid=48529.48535 |Abruf=2019-07-29}}</ref>
</references>
</references>

Version vom 29. Juli 2019, 12:44 Uhr

Diese Baustelle befindet sich fälschlicherweise im Artikelnamensraum. Bitte verschiebe die Seite oder entferne den Baustein {{Baustelle}}.

Ein External Memory Model ermöglicht das Analysieren von Algorithmen die Datenmengen verarbeiten, welche die Kapazität des Hauptspeichers des ausführenden Rechners übersteigen. Da die Zugriffszeit auf langsame Massenspeicher wie Festplatten oder Netzwerkspeicher die Zeit für Hauptspeicher- Cache- oder Registerzugriffe sowie Operationen der ALU um mehrere Größenordnungen dominiert, ist in diesem Fall für die Zeitkomplexität eines Algorithmus die Anzahl der I/O-Operationen auf diese langsamen Massenspeicher maßgeblich.

Visualisierung des Idealized Cache Modells.
Das Parallel Disk Model, hier mit . Cache hat eine Größe von Speicherworten, der Hauptspeicher ist unbegrenzt. Datentransfer zwischen beiden findet immer in Blöcken der Größe statt.

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).

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:

Für eine Effiziente Verarbeitung müssen die Eingabedaten des Problems striped auf den D Platten vorliegen (siehe Abb. TODO 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:

  1. Scanning (auch streaming oder touching) – Lesen oder schreiben von sequentiellen Datenelementen
  2. Sortieren von Datenelementen (vergleichsbasiert)

Schranken für die I/O-Komplexität dieser Operationen finden sich in folgender Tabelle:

Schranken für die I/O-Komplexität fundamentaler Operationen
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

Einzelnachweise

  1. a b 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]).
  2. Demuth, Howard B.: Electronic data sorting. Department of Electrical Engineering, Stanford University, 1956 (worldcat.org [abgerufen am 29. Juli 2019]).
  3. 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]).
  4. 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]).
  5. 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]).
  6. 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]).