External Memory Algorithms and Data Structures in Theory and Practice
Total Page:16
File Type:pdf, Size:1020Kb
LEDA-SM: External Memory Algorithms and Data Structures in Theory and Practice Dissertation zur Erlangung des Grades Doktor der Ingenieurswissenschaften (Dr.-Ing.) der naturwissenschaftlich-technischen Fakult¨at I der Universit¨at des Saarlandes von Andreas Crauser Saarbr¨ucken 2. M¨arz 2001 Datum des Kolloquiums: 2. M¨arz 2001 Dekan der naturwissenschaftlich-technischen Fakult¨at I: Professor Dr. Rainer Schulze-Pillot-Ziemen Gutachter: Professor Dr. Kurt Mehlhorn, MPI f¨ur Informatik, Saarbr¨ucken Professor Dr. Paolo Ferragina, Universita di Pisa, Pisa, Italien Deutsche Kurzzusammenfassung Die zu verarbeitenden Datenmengen sind in den letzten Jahren dramatisch gestiegen, so daß Externspeicher (in Form von Festplatten) eingesetzt wird, um die Datenmen- gen zu speichern. Algorithmen und Datenstrukturen, die den Externspeicher benutzen, haben andere algorithmische Anforderungen als eine Vielzahl der bekannten Algo- rithmen und Datenstrukturen, die f¨ur das RAM-Modell entwickelt wurden. Wir ge- ben in dieser Arbeit erst einen Einblick in die Funktionsweise von Externspeicher anhand von Festplatten und erkl¨aren die wichtigsten theoretischen Modelle, die zur Analyse von Algorithmen benutzt werden. Weiterhin stellen wir ein neu entwickelte C++ Klassenbibliothek namens LEDA-SM vor. LEDA-SM ist bietet eine Sammlung von speziellen Externspeicher Algorithmen und Datenstrukturen. Im zweiten Teil ent- wickeln wir neue Externspeicher-Priorit¨atswarteschlangen und neue Externspeicher- Konstruktionsalgorithmen f¨ur Suffix Arrays. Unsere neuen Verfahren werden theore- tisch analysiert, mit Hilfe von LEDA-SM implementiert und anschließend experimen- tell getestet. Short Abstract Data to be processed has dramatically increased during the last years. Nowadays, external memory (mostly hard disks) has to be used to store this massive data. Al- gorithms and data structures that work on external memory have different properties and specialties that distinguish them from algorithms and data structures, developed for the RAM model. In this thesis, we first explain the functionality of external mem- ory, which is realized by disk drives. We then introduce the most important theoretical I/O models. In the main part, we present the C++ class library LEDA-SM. Library LEDA-SM is an extension of the LEDA library towards external memory computa- tion and consists of a collection of algorithms and data structures that are designed to work efficiently in external memory. In the last two chapters, we present new external memory data structures for external memory priority queues and new external memory construction algorithms for suffix arrays. These new proposals are theoretically ana- lyzed and experimentally tested. All proposals are implemented using the LEDA-SM library. Their efficiency is evaluated by performing a large number of experiments. Deutsche Zusammenfassung In den letzten Jahren werden immer gr¨oßere Datenmengen maschinell verarbeitet. Die Gr¨oße der Daten bedingt, das sie im Externspeicher (realisiert durch Festplat- ten) gespeichert werden m¨ussen und nicht in ihrer Gesamtheit in den Hauptspeicher heutiger Computer passen. Diese großen Datenmengen stellen besondere Anforderun- gen an Algorithmen und Datenstrukturen. Eine Vielzahl der existierenden Algorithmen und Datenstrukturen wurde f¨ur das theoretische RAM Modell [AHU74] entworfen. Zu den Kern-Eigenschaften des Modells geh¨ort unbegrenzter Speicher; weiterhin kostet der Zugriff auf unterschiedliche Speicherzellen gleich viel (Einheitskostenmaß). Das RAM Modell wurde und wird heute benutzt, um Hauptspeicher-Algorithmen zu analy- sieren. Der Externspeicher hat jedoch andere Eigenschaften als der Hauptspeicher: ein Zugriff ist bis zu 100.000 mal langsamer als ein Hauptspeicher- oder Cache-Zugriff. Weiterhin liefert ein Zugriff immer einen Block von Daten zur¨uck. Algorithmen, die im Externspeicher laufen, greifen somit auf zwei verschiedene Speicherhierarchien (Hauptspeicher und Externspeicher) zu, die unterschiedliche Zugriffszeiten und Ei- genschaften haben. Die Annahme des Einheitskostenmaßes bei Speicherzugriffen ist somit fragw¨urdig. RAM Algorithmen und Datenstrukturen, die im Externspeicher lau- fen, haben meist eine sehr schlechte Laufzeit, da ihre Speicherzugriffe keine Lokalit¨at aufweisen und man daher nicht den blockweisen Zugriff auf den Externspeicher opti- mal ausnutzen kann. Meist f¨uhren diese Algorithmen so viele Externspeicherzugriffe aus, das man kaum noch einen Fortschritt in der Berechnung sehen kann. Ausgehend von dieser Problematik wurden daher eigene Algorithmen und Datenstrukturen f¨ur Externspeicheranwendungen entwickelt. Diese Arbeit besch¨aftigt sich mit Externspeicheranwendungen, sowohl im theore- tischen als auch im praktischen Sinn. Im ersten Kapitel gebe ich einen Uberblick¨ uber ¨ die Arbeit. Im zweiten Kapitel erl¨autere ich die Funktionalit¨at des Externspeichers, der heute durch Festplatten realisiert wird. Weiterhin erkl¨are ich die Funktionalit¨at von Dateisystemen am Beispiel des Solaris UFS Dateisystems. Anschließend stelle ich die wichtigsten Externspeichermodelle vor, genauer das I/O-Modell von Vitter und Shriver und die Erweiterung von Farach et al. In Vitter und Shriver’s Modell besitzt ein Computer einen beschr¨ankten Hauptspeicher der Gr¨oße M . Der Externspeicher ist D B durch D Festplatten realisiert; ein Externspeicherzugriff (kurz I/O)ubertr¨ ¨ agt D B M=2 Daten vom Externspeicher in den Hauptspeicher oder zur¨uck, 1 . Farach et al’s Modell erlaubt es zus¨atzlich, I/Os in I/Os zu “zuf¨alligen” Stellen (engl.: random I/Os) und in konsekutive I/Os (engl. bulk I/Os) zu klassifizieren. Bulk I/Os sind vorzuziehen, da sie in der Praxis schneller sind als random I/Os. Algorithmische Leistung wird in beiden Modellen gemessen, indem man (i) die Zahl der I/Os, (ii) die Zahl der CPU Instruktionen (mittels des RAM Modells) und (iii) den belegten Platz im Externspeicher ermittelt. Im dritten Kapitel stelle ich eine von mir entwickelte C++ Klassenbibliothek na- mens LEDA-SM vor. LEDA-SM bietet spezielle Externspeicheralgorithmen und Da- tenstrukturen an und erm¨oglicht weiterhin durch Prototyping, schnell neue Algorith- men und Datenstrukturen zu entwickeln. LEDA-SM ist modular aufgebaut. Der so- genannte Kern der Bibliothek ist f¨ur den Zugriff und die Verwaltung des Externspei- chers zust¨andig. Der Externspeicher kann durch Dateien des Dateisystems “simuliert” werden, er kann aber auch direkt durch Festplatten dargestellt werden. Wir realisie- ren explizit eine Abbildung von Vitter und Shriver’s I/O Modell. Der Externspeicher wird in Bl¨ocke eingeteilt, jede I/Oubertr¨ ¨ agt ein Vielfaches der Blockgr¨oße. Der Kern der Bibliothek stellt weiterhin Schnittstellen zur Verf¨ugung, um einfach auf Festplat- tenbl¨ocke zugreifen zu k¨onnen und um einfach Daten blockweise zu lesen oder zu schreiben. Der Applikationsteil der Bibliothek besteht aus einer Sammlung von Algo- rithmen und Datenstrukturen, die speziell f¨ur Externspeicheranwendungen entwickelt wurden. Diese Algorithmen benutzen nur die C++ Klassen des Bibliothekskerns sowie Algorithmen und Datenstrukturen der C++ Bibliothek LEDA. Wir erl¨autern die wich- tigsten Design– und Implementierungskonzepte von LEDA-SM, geben ein Implemen- tierungsbeispiel f¨ur ein Externspeicherdatenstruktur und f¨uhren erste Leistungstests durch. In den letzten beiden Kapiteln zeige ich anhand von zwei Fallstudien die Entwick- lung und experimentelle Analyse von Datenstrukturen und Algorithmen f¨ur Extern- speicheranwendungen. Die erste Fallstudie besch¨aftigt sich mit Priorit¨atswarteschlan- gen. Wir analysieren theoretisch – mittels der I/O-Modelle von Kapitel 2 – und expe- rimentell – durch Implementierung mittels LEDA-SM – die Leistung von Priorit¨ats- warteschlangen. Wir stellen weiterhin zwei neue Priorit¨atswarteschlangen f¨ur Extern- speicheranwendungen vor. Unsere erste Variante, R-Heaps, ist eine Weiterentwicklung von Ahuja et al.’s redistributive heaps und unsere zweite Variante, array heaps,ist eine Weiterentwicklung einer Hauptspeichervariante von Thorup. Die erste Variante ben¨otigt nicht negative, ganze Zahlen als Priorit¨atstyp und setzt weiterhin voraus, das die gel¨oschten Minima eine nicht fallende Sequenz bilden. Weiterhin m¨ussen alle im a;::: ;a + C ] a Heap gespeicherten Elemente im Intervall [ liegen, wobei der Wert des zuletzt gel¨oschten Minimums ist (Null sonst). Diese Anforderungen werden z.B. von Dijkstra’s k¨urzestem Wege Algorithmus erf¨ullt. Dieser Heap ist sehr schnell in der Praxis, platzoptimal im Externspeicher, jedoch nur suboptimal in Vitter und Shriver’s 1=B D-Festplattenmodell. Er erlaubt Einf¨ugen von neuen Elementen in O I/Os und 1=B log C L¨oschen des Minimums in O I/Os. Unsere zweite Varian- M=B log C te basiert auf einer Menge von sortierten Feldern. Dieser Heap erreicht Optimalit¨at im D-Festplattenmodell und ist weiterhin platzoptimal. Er unterliegt keinen Restrik- tionen hinsichtlich des Priorit¨atstyps, ist jedoch beschr¨ankt in der maximalen Anzahl =B log N=B zu speichernder Elemente. Er unterst¨utzt Einf¨ugen in 18 I/Os und cM =B =B Minimum l¨oschen in 7 I/Os. Wir analysieren zwei Varianten des Heaps mit unter- schiedlichen Eingaberestriktionen und zeigen, das die Gr¨oßenrestriktion in der Praxis irrelevant ist. Diese neuen Datenstrukturen werden dann in einer Vielzahl von Ex- perimenten gegen andere bekannte Externspeicher-Priorit¨atswarteschlangen wie buf- fer trees, B-trees, sowie gegen Hauptspeicher-Priorit¨atswarteschlangen, wie Fibonacci heaps, k–n¨are Heaps