Description |
Die meisten gegenwärtigen Programmiersprachen sind entstanden, als Programme noch sequentiell auf einzelnen Prozessoren ausgeführt wurden. In der Regel besitzen diese Sprachen daher keine Mechanismen zur effizienten parallelen Programmierung. Fast immer müssen parallele Konstrukte durch Bibliotheken oder APIs nachgerüstet werden. Auch die Möglichkeiten der automatischen Parallelisierung durch moderne CPUs und Compiler sind begrenzt, da die etablierten Programmiersprachen einen inhärent sequentiellen Programmierstil bedingen. Langfristig müssen Programmiersprachen die aktuellen Fortschritte in der Hardwareentwicklung aufholen. Schon jetzt besitzen PCs oft mehr als 2 Prozessorkerne und für die Zukunft werden Prozessoren mit 100 oder mehr Kernen erwartet. Im Bereich des High Performance-Computing(HPC) sind diese Dimensionen lange überschritten: hier rechnen teilweise weit über 100 000 Prozessoren in einem System. Neue parallele Programmiersprachen müssen dem Programmierer Abstraktionsmechanismen zur Verfügung stellen, damit diese Systeme effizient programmiert werden können. Dazu müssen nicht einfach nur Konstrukte zur Erzeugung und Koordination von Programmflüssen hinzugefügt werden. Auch Altlasten der sequentiellen Programmierung müssen überdacht oder entfernt werden, da bislang oftmals unbeachtete Details vor dem Hintergrund paralleler Programmierung neue Bedeutung erlangen. Oft integrieren parallele Programmiersprachen beispielsweise Ideen der funktionalen Programmierung, da deren nebenwirkungsfreie Arbeitsweise besonders für die parallele Programmierung von Vorteil ist. In diesem Seminar werden ausgewählte parallele Programmiersprachen vorgestellt. Die Teilnehmer sollen einen Überblick über die wichtigsten Eigenschaften dieser Sprachen gewinnen und zudem erste praktische Erfahrungen in einer solchen Sprache sammeln. Geplant ist die Vorstellung folgender paralleler Programmiersprachen: Erlang, Scala, Clojure, Cilk, Fortress, Occam |