Algorithm Libraries for Multi-Core Processors
Total Page:16
File Type:pdf, Size:1020Kb
Algorithm Libraries for Multi-Core Processors zur Erlangung des akademischen Grades eines Doktors der Ingenieurwissenschaften der Fakultat¨ fur¨ Informatik des Karlsruher Instituts fur¨ Technologie genehmigte Dissertation von Dipl.-Inform. Johannes Singler aus Offenburg Karlsruhe, Juli 2010 Tag der mundlichen¨ Prufung:¨ 8. Juli 2010 Referent: Prof. Dr. Peter Sanders Korreferent: Prof. Dr. Ulrich Meyer II Beginning in 2005, the advent of microprocessors with multiple CPU cores on a single chip has lead to a paradigm shift in computer science. Since the clock rates stagnate, there is no automatic performance increase anymore when switching to a newer processor. Instead, in order to achieve an acceleration, a program has to be executed in parallel on the multiple cores. This fact poses an immense challenge to the development of high-performance applications. Not only are multi-core processors ubiquitous nowadays, application developers are also forced to utilize them to avoid stagnation of performance. In this thesis, we examine an approach that facilitates the development of applications that exploit parallelism. We implement parallelized variants of established algorithm libraries, which provide the same functionality as their sequential versions but execute faster by utilizing the multiple cores. This allows developers to use parallelism implicitly, encapsulated by the unaltered interface of the algorithm. For a start, we consider a library for basic algorithms for internal (main) memory, the C++ Standard Template Library (STL). We data-parallelize its algorithms in the shared memory model, including algorithms for specific data structures, building the Multi-Core Standard Template Library (MCSTL). Geometric algorithms are addressed next, by parallelizing selected routines of the Computa- tional Geometry Algorithms Library, facilitated by the usage of MCSTL routines. We apply MCSTL also to speed up internal computation for basic external memory algo- rithms, which efficiently handle large data sets stored on disks. In combination with some task parallelism for algorithmic stages on a higher level, this enables the Standard Template Library for XXL Data Sets (STXXL) to exploit multi-core parallelism. The libraries had already been widely used in their sequential versions, so applications that employ them can immediately benefit from the improved speed. We carry out experiments on the implementations, and evaluate the performance in detail, also relating to hardware limitations like the memory bandwidth and the disk bandwidth. Case studies using MCSTL and STXXL demonstrate the benefit of the libraries to algorithmic applications. Finally, as a starting point of a generalization to distributed memory, and as an advanced application of the MCSTL and the STXXL, we design distributed external memory sorting algorithms for very large inputs. The implementation of the more practical algorithm set two performance world records in 2009. Deutsche Zusammenfassung Beginnend mit dem Jahr 2005 hat das Aufkommen von Prozessoren mit mehreren Rechenker- nen auf einem Chip zu einem Paradigmenwechsel in der Informatik gefuhrt.¨ Da gleichzeitig die Taktfrequenzen nicht weiter steigen, ergibt sich eine Leistungssteigerung nun nun nicht mehr automatisch beim Verwenden eines neuen Prozessors. Vielmehr muss durch die paral- lele Ausfuhrung¨ eines Programms auf mehreren Rechenkernen eine Beschleunigung erreicht werden. Diese Tatsache ist eine große Herausforderung fur¨ das Entwickeln leistungsfahiger¨ Anwendungen. Mehrkern-Prozessoren sind inzwischen nicht nur allgegenwartig,¨ Software- Entwickler mussen¨ deren Fahigkeiten¨ auch ausschopfen,¨ um eine Stagnation der Rechenleistung zu verhindern. In dieser Arbeit untersuchen wir einen Ansatz, um das Entwickeln von Anwendungen, die Parallelismus ausnutzen, zu erleichtern: Wir implementieren parallelisierte Varianten von Algo- rithmenbibliotheken. Diese bieten die gleiche Funktionalitat¨ wie ihre sequentiellen Versionen, ihre Routinen laufen jedoch beschleunigt, da sie mehrere Rechenkerne nutzen. Die Verwen- dung solcher Bibliotheken ermoglicht¨ einem Software-Entwickler impliziten Parallelismus, gekapselt durch die gleichbleibende Schnittstelle des Algorithmus. Wir konzentrieren uns auf etablierte C++-Bibliotheken, als Rahmenwerk zur Verwaltung von Threads wahlen¨ wir OpenMP. Zunachst¨ betrachten wir eine Bibliothek fur¨ grundlegende Algorithmen im Hauptspeicher, die Standard Template Library (STL), welche Teil der C++-Standardbibliothek ist. Ihre Algo- rithmen werden daten-parallelisiert und ergeben somit die Multi-Core Standard Template Library (MCSTL). Diese ist geeignet fur¨ Parallelrechner mit gemeinsamem Speicher, insbeson- dere also Mehrkern-Rechner. Sie enthalt¨ Routinen wie z. B. suchen, partitionieren, mischen, sortieren, und zufallig¨ permutieren. Wir wahlen¨ geeignete parallele Algorithmen fur¨ die einzelnen Routinen aus, passend zu den Gegebenheiten. Desweiteren entwerfen wir Algorithmen zur Manipulation spezieller Datenstrukturen. Fur¨ das Einfugen¨ großer Datenmengen in ein assoziatives Feld bzw. dessen Konstruktion aus einer großen Eingabemenge betrachten wir parallele Algorithmen fur¨ Rot-Schwarz-Baume.¨ Um auch fur¨ Sequenzen, die nicht wahlfrei zugreifbar sind, Daten-Parallelisierung zu ermoglichen,¨ entwerfen wir einen Algorithmus, der sie in nur einem sequentiell Durchlauf in ungefahr¨ gleich große Teile zerteilt, ohne anfangs die Lange¨ zu kennen. Die Leistung aller Algorithmen und ihrer Implementierungen wird ausfuhrlich¨ mit Ex- perimenten auf verschiedenen Rechnern evaluiert. Dabei werden auch Beschrankungen¨ der Hardware berucksichtigt,¨ z. B. die geteilte Speicherbandbreite. Es werden meist gute bis sehr IV gute Beschleunigungswerte erreicht, oft auch schon fur¨ relative kleine Eingaben, ab einer sequentiellen Laufzeit von 100 Mikrosekunden. Die softwaretechnischen Aspekten der Integration der parallelisierten Routinen in eine existierende Bibliothek werden ebenfalls diskutiert. Hier ist insbesondere die Erhaltung der Semantik ein Kernthema. Zwei Fallstudien demonstrieren die Verwendbarkeit der MCSTL-Routinen als Unterpro- gramme in algorithmischen Anwendungen. Zuerst betrachten wir die Konstruktion eines Suffix Arrays, einer Indexdatenstruktur fur¨ Volltextsuche. Durch Verwendung der parallelisierten Routinen als Unterprogramme wird eine existierende Implementierung um Faktor 5 beschleu- nigt. Außerdem wird eine Variante des Kruskal-Algorithmus zum Berechnen des minimalen Spannbaums durch die Parallelisierung mittels der MCSTL so viel schneller, dass sie andere, nicht parallelisierbare Algorithmen hinter sich lasst.¨ Aus dem Gebiet der algorithmischen Geometrie werden einige ausgewahlte¨ Routinen der Computational Geometry Algorithms Library (CGAL) parallel implementiert, auch unter Zuhilfenahme von MCSTL-Routinen. Das Sortieren entlang der raumfullenden¨ Hilbert-Kurve dient vor allem als Vorverarbeitungs- schritt anderer Algorithmen, und benotigt¨ die Parallelisierung, um die Skalierbarkeit jener Algorithmen nicht zu gefahrden.¨ Der Schnitt achsenparalleler (Hyper-)Quader wird oft als Heuristik in der Kollisionserken- nung verwendet. Nur falls sich die einhullenden¨ achsenparallelen Quader zweier Objekte schneiden, muss detailliert untersucht werden, ob sich die eigentlichen Objekte tatsachlich¨ schneiden. Die Konstruktion der Delaunay-Triangulierung in 3 Dimensionen ist Teil vieler Verfahren zur Manipulation von 3D-Objekten. Im Gegensatz zu den bisherigen Algorithmen verwenden wir hier feingranulare Sperren zur Synchronisation wahrend¨ des konkurrierenden Zugriffs auf die Datenstruktur. Wahrend¨ fur¨ die beiden ersten Probleme gute Beschleunigungen erzielt werden, sind diese fur¨ die Delaunay-Triangulierung sogar sehr nah am Optimum. Im weiteren werden Externspeicher-Algorithmen betrachtet, welche große Datenmengen bearbeiten, die auf Grund ihrer Große¨ nicht mehr in den Hauptspeicher passen, und deshalb auf Festplatte(n) gespeichert sind. Die Routinen der MCSTL werden verwendet, um die interne Rechenarbeit zu beschleunigen. In Kombination mit einem Rahmenwerk zur parallelen Ausfuhrung¨ von Aufgaben auf einer hoheren¨ algorithmischen Ebene wird damit auch der Standard Template Library for XXL Data Sets (STXXL) Mehrkern-Parallelismus ermoglicht.¨ Damit konnen¨ wir die Lucke¨ zwischen immer großerer¨ Bandbreite der Festplatten und stagnierender Taktfrequenz der Prozessoren verkleinern. Anwendungsbeispiel ist hier wiederum V die Konstruktion eines Suffix Array, dieses Mal fur¨ noch großere¨ Eingaben. Wir konnen¨ diverse Externspeicher-Algorithmen fur¨ dieses Problem signifikant beschleunigen. Alle erwahnten¨ Bibliotheken hatten in ihren sequentiellen Versionen bereits eine große Ver- breitung gefunden. Außerdem sind diese inklusive der parallelisierten Varianten frei verfugbar.¨ Somit konnen¨ Anwendungen, die sie verwenden, direkt von der hoheren¨ Geschwindigkeit profitieren. Schließlich entwerfen wir Algorithmen zum Sortieren sehr großer Datenmengen auf Rech- nerbundeln¨ mit verteiltem Speicher und mehreren Festplatten pro Rechenknoten. Dies dient einerseits als Startpunkt fur¨ eine Verallgemeinerung der bisherigen Arbeit auf Systeme mit verteiltem Speicher, andererseits als ein weiteres, komplexes Anwendungsbeispiel der MCSTL und der STXXL. Die Implementierung der praktischeren Algorithmen-Variante wird wiederum ausfuhrlich¨ experimentell evaluiert und analysiert. Im Vergleich mit Konkurrenz- Implementierungen schneidet sie exzellent ab, sie erzielte 2009 zwei Leistungs-Weltrekorde,