Explicit and Implicit Parallel Functional Programming: Concepts and Implementation
Total Page:16
File Type:pdf, Size:1020Kb
Explicit and Implicit Parallel Functional Programming: Concepts and Implementation Dissertation zur Erlangung des Doktorgrades der Naturwissenschaften (Dr. rer.nat.) dem Fachbereich Mathematik und Informatik der Philipps-Universitat¨ Marburg vorgelegt von Jost Berthold aus Kassel Marburg/Lahn, 2008 Vom Fachbereich Mathematik und Informatik der Philipps-Universit¨at Marburg als Dissertation am 6.6.2008 angenommen. Erstgutachter: Prof. Dr. Rita Loogen Zweitgutachter: Prof. Dr. Greg Michaelson Tag der m¨undlichen Pr¨ufung am 16.6.2008 Zusammenfassung (deutsch) Die vorliegende Arbeit beschreibt Konzepte zur parallelen Programmierung mit funktionalen Sprachen und deren Implementierung, insbesondere parallele Haskell- Dialekte und die Sprache Eden. Wir gehen der Frage nach, welche grundlegenden Koordinationskonstrukte und welcher Grad an expliziter Ausf¨uhrungskontrolle n¨otig und n¨utzlich f¨ur eine funktionale Implementierung paralleler Koordination sind. In der heutigen Zeit von globaler Vernetzung und Mehrkernprozessoren wird die parallele Programmierung immer wichtiger. Dennoch sind nach wie vor Programmiermodelle verbreitet, die kaum von den Hardwareeigenschaften ab- strahieren und sich daher zwangsl¨aufig in technischen Details verlieren. Funk- tionale Sprachen erlauben aufgrund ihrer Abstraktion und mathematischen Natur, die gegen¨uber sequenziellen Programmen erheblich h¨ohere Komplexit¨at paralleler Programme zu erfassen, sie erm¨oglichen ein abstrakteres Nachdenken ¨uber paral- lele Programme. Dabei taucht unvermeidlich die oben formulierte Leitfrage auf, zu welchem Grad explizite Kontrolle der Ausf¨uhrung n¨otig und n¨utzlich ist, um effiziente parallele Programme zu schreiben, wenn diese wiederum abstraktere Kontrollkonstrukte implementieren und insbesondere in der sog. skelettbasierten Programmierung, welche g¨angige Muster der Parallelverarbeitung abstrakt als Funktionen h¨oherer Ordnung beschreibt. Wir beschreiben unsere Implementierung f¨ur die Sprache Eden, welche hier- archisch in Schichten organisiert ist. Die unterste, direkt implementierte Schicht stellt nur sehr einfache Primitive f¨ur Parallelverarbeitung bereit, komplexere Kon- trollkonstrukte werden in der funktionalen Sprache Haskell implementiert. Neben der Implementierung von Eden stellen die implementierten Primi- tive f¨ur sich genommen bereits Kontrollkonstrukte zur Parallelverarbeitung dar. Aus der Implementierung abgeleitet wird die funktionale Sprache EdI (‘ED’en- ’I’mplementierungssprache) vorgeschlagen, die auf niedrigem Abstraktionsniveau Haskell um orthogonale, grundlegend notwendige Konstrukte zur Koordination paralleler Berechnungen erweitert: Auswertungskontrolle, Nebenl¨aufigkeit, Pro- zesserzeugung, Kommunikation und Information ¨uber verf¨ugbare Ressourcen. Die grundlegende Systemunterst¨utzung von EdI und das Implementierungs- konzept lassen sich mit nur geringen Modifikationen auf andere Implementierun- gen (und Berechnungssprachen) ¨ubertragen. Aufgrund seiner Flexibilit¨at und der funktionalen Basis bietet unser Ansatz großes Potenzial f¨ur modellgest¨utzte Ans¨atze zur automatischen Verwaltung paralleler Berechnungen und f¨ur die Ve- rifikation von Systemeigenschaften. Wir beschreiben das allgemeine Design eines generischen Systems zur hierarchischen Implementierung paralleler Haskell-Er- weiterungen, eine Prototyp-Implementierung f¨ur adaptive Scheduling-Konzepte und eine Machbarkeitsstudie f¨ur virtuellen globalen Speicher. Anwendungsgebiet f¨ur die Evaluation der Sprache EdI ist die Implemen- tierung abstrakterer Konstrukte, insbesondere paralleler Skelette, auf die wir uns iii in einem weiteren Teil der Dissertation konzentrieren. Skelette beschreiben paral- lelisierbare Algorithmen und parallele Verarbeitungsmuster abstrakt als Funktio- nen h¨oherer Ordnung und verbergen ihre parallele Implementierung. Somit bieten sie ein (gegen¨uber der Programmierung mit Eden oder EdI) h¨oheres Abstrak- tionsniveau, entziehen aber dem Programmierer die explizite Parallelit¨atskontrolle. F¨ur einen Vergleich der Ausdrucksst¨arke und Pragmatik werden exemplarisch Implementierungen f¨ur verschiedene parallele Skelette in der Sprache Eden und ihrer Implementierungssprache EdI beschrieben. Wir untersuchen neben ein- schl¨agigen Vertretern dieser “algorithmischen Skelette” eine andere Art Skelette, welche anstelle der Algorithmik die Interaktion von Prozessen in regul¨arer Anord- nung beschreiben und f¨ur die wir den Begriff Topologieskelette gepr¨agt haben. Durch die zus¨atzlichen nicht-funktionalen Konstrukte in Eden haben Eden und EdI im Ergebnis die gleiche Ausdrucksst¨arke, wobei aber die abstrakteren Eden-Konstrukte essenzielle Seiteneffekte und Nebenl¨aufigkeit verbergen. Durch die in EdI (im Gegensatz zu Eden) explizite Kommunikation lassen sich Skelett- Implementierungen besser lesen und an besondere Bed¨urfnisse anpassen. Die explizitere Sprache EdI findet ihr origin¨ares Anwendungsgebiet in der Skelettim- plementierung, -anpassung und -optimierung. Demgegen¨uber ist ein klarer Plus- punkt von Eden die automatische (durch eine Typklasse und geeignete Uberladung¨ definierte) Stream- und Tupelkommunikation. Letztere kann in EdI unver¨andert ¨ubernommen werden, sollte hier aber, gem¨aß der EdI-Philosophie, explizit und gezielt vom Programmierer eingesetzt werden. Ergebnisse im Uberblick:¨ • die Definition der Sprache EdI, Haskell mit expliziten Prozesskontroll- und Kommunikationskonstrukten. EdI erweitert Haskell um orthogonale, grundlegend notwendige Konstrukte zur Koordination paralleler Berech- nungen: Auswertungskontrolle, Nebenl¨aufigkeit, Prozesserzeugung, Kom- munikation und Information ¨uber verf¨ugbare Ressourcen. Einsatzgebiet der Sprache ist die Implementierung komplexerer Koordinationskonstrukte. • eine strukturierte Implementierung von Eden, deren Konzepte in einem allgemeineren Kontext tragf¨ahig sind. • das Design und eine Prototypimplementierung f¨ur ein generisches System zur Implementierung abstrakterer Kontrollkonstrukte, insbesondere f¨ur eine automatisierte dynamische Steuerung paralleler Berechnungen. • neu entwickelte bzw. alternative Skelett-Implementierungen f¨ur algorith- mische und Topologie-Skelette, f¨ur einen Vergleich von EdI und Eden. • der exemplarische Nachweis, dass funktionale Sprachen ein ad¨aquates Ab- straktionsniveau bieten, um Strukturen der Parallelverarbeitung zu erfassen. iv Abstract This thesis investigates the relation between the two conflicting goals of explicit- ness and abstraction, for the implementation of parallel functional languages and skeletons. Necessary and useful coordination features for implementing parallel coordination in a functional implementation language will be identified, leading to the proposal of a Haskell extension for explicit low-level coordination, and to a concept of structuring implementations for parallel functional languages in layers of increasing abstraction. The first main part concentrates on implementation techniques and require- ments. We are describing the layered implementation of the parallel functional language Eden, pointing out advantages of its layer structure and deriving the coordination features of the proposed explicit low-level language, named EdI. Subsequently, the presented implementation concept is generalised to the design and a prototype implementation of a generic parallel runtime system for man- agement of parallel functional computations, major parts of which are encoded in Haskell. In a second main part, we concentrate on implementations of parallel skele- tons, thereby investigating expressiveness and pragmatics of the proposed low- level language EdI in comparison to the language Eden. Exemplarily, a range of implementations is presented for data parallel skeletons implementing map, map-reduce, and the Google-MapReduce programming model. Furthermore, we present and discuss a new skeleton category: topology skeletons, which describe interaction and communication patterns in regularly structured process networks. In a broader context, the implementation concepts and skeleton implemen- tations which we present underline that functional languages provide a suitable abstraction level to reason about parallel programming and to circumvent its complexity. v Thank You! First of all, I would like to thank my supervisor, Prof. Dr. Rita Loogen for her support and inspirations over the last years, which gave me the chance to develop the ideas I am going to present. I appreciate the opportunity to use the Beowulf clusters of the Heriot-Watt University for my series of tests. Personal acknowledgements go to people who I enjoyed working with and who provided important impulses for my research: Hans-Wolfgang Loidl (formerly Heriot-Watt, now LMU Munich), Phil Trinder and Greg Michaelson (Heriot-Watt), Kevin Hammond (St.Andrews), Abyd Al Zain (Heriot-Watt), and my new colleague Mischa Dieterle. I also would like to thank many nice people who are working in related areas and which I have met at conferences and workshops. It has been a pleasure to meet you, and some of you have become more than just professional colleagues. Furthermore, I may thank other good friends and former friends for the personal support and new perspectives they offered. You know who you are! Last, but not least, hugs to my parents for their support, especially to my mother, who repeatedly struggled with my computer science slang and my english skills – and who would surely spot a number of flaws on this page. Dedicated to µ, D., and β – who should know. vi Contents I Introduction and background