Skip to main content

2012 | Buch

Parallele Programmierung

verfasst von: Thomas Rauber, Gudula Rünger

Verlag: Springer Berlin Heidelberg

Buchreihe : eXamen.press

insite
SUCHEN

Über dieses Buch

Durch kostengünstige Multiprozessor-Desktoprechner, Cluster von PCs und Innovationen wie die Hyperthreading-Technologie oder Multicore-Prozessoren sind parallele Rechenressourcen allgegenwärtig. Die effiziente Ausnutzung dieser parallelen Rechenleistung ist jedoch nur durch den Einsatz paralleler Programmiertechniken möglich, die sich damit in alle Bereiche der Softwareerstellung ausbreiten.

Dieses Buch stellt die parallele Programmierung für herkömmliche Parallelrechner und für die neuartigen parallelen Plattformen umfassend dar. Neben den Grundlagen der parallelen Programmierung werden portable Programmierumgebungen wie Pthreads, Java-Threads, OpenMP, MPI, PVM oder UPC und die zugehöigen Programmiermodelle ausführlich behandelt. Parallele Progammiertechniken, die zur erfolgreichen Realisierung effizienter paralleler Programme führen, werden mit einer Vielzahl von Beispielen dargestellt.

Das Buch ist für Anfänger und fortgeschrittene Programmierer geeignet.

Inhaltsverzeichnis

Frontmatter
1. Einleitung
Zusammenfassung
Ein seit längerem zu beobachtender Trend ist die ständig steigende Nachfrage nach immer höherer Rechenleistung. Dies gilt insbesondere für Anwendungen aus dem Bereich der Simulation naturwissenschaftlicher Phänomene. Solche Anwendungen sind z. B. die Wettervorhersage, Windkanal- und Fahrsimulationen von Automobilen, das Design von Medikamenten oder computergraphische Anwendungen aus der Film-, Spiel- und Werbeindustrie. Je nach Einsatzgebiet ist die Computersimulation entweder die wesentliche Grundlage für die Errechnung des Ergebnisses oder sie ersetzt bzw. ergänzt physikalische Versuchsanordnungen. Ein typisches Beispiel für den ersten Fall ist die Wettersimulation, bei der es um die Vorhersage des Wetterverhaltens in den jeweils nächsten Tagen geht. Eine solche Vorhersage kann nur mit Hilfe von Simulationen erreicht werden. Ein weiteres Beispiel sind Havariefälle in Kraftwerken, die in der Realität naheliegenderweise nur schwer oder mit gravierenden Folgen nachgespielt werden könnten.
Thomas Rauber, Gudula Rünger
2. Architektur paralleler Plattformen
Zusammenfassung
Wie in der Einleitung bereits angerissen wurde, hängen die Möglichkeiten einer parallelen Abarbeitung stark von den Gegebenheiten der benutzten Hardware ab. Wir wollen in diesem Kapitel daher den prinzipiellen Aufbau paralleler Plattformen vorstellen, auf die die auf Programmebene gegebene Parallelität abgebildet werden kann, um eine tatsächlich gleichzeitige Abarbeitung verschiedener Programmteile zu erreichen. In den Abschn. 2.1 und 2.2 beginnen wir mit einer kurzen Darstellung der innerhalb eines Prozessors oder Prozessorkerns zur Verfügung stehenden Möglichkeiten einer parallelen Verarbeitung. Hierbei wird deutlich, dass schon bei einzelnen Prozessorkernen eine Ausnutzung der verfügbaren Parallelität (auf Instruktionsebene) zu einer erheblichen Leistungssteigerung führen kann. Die weiteren Abschnitte des Kapitels sind Hardwarekomponenten von Parallelrechnern gewidmet. In den Abschn. 2.3 und 2.4 gehen wir auf die Kontroll- und Speicherorganisation paralleler Plattformen ein, indem wir zum einen die Flynnsche Klassifikation einführen und zum anderen Rechner mit verteiltem und Rechner mit gemeinsamem Speicher einander gegenüberstellen.
Thomas Rauber, Gudula Rünger
3. Parallele Programmiermodelle
Zusammenfassung
Das Erstellen eines parallelen Programms orientiert sich stark an dem zu benutzenden parallelen Rechnersystem. Ein Rechnersystem ist ein allgemeiner Ausdruck für die Gesamtheit von Hardware und Systemsoftware (Betriebssystem, Programmiersprache, Compiler, Laufzeitbibliothek), die dem Programmierer zur Verfügung steht und seine „Sicht“ auf den Rechner bestimmt. Für die gleiche Hardware können durch Verwendung unterschiedlicher Systemsoftwarekomponenten unterschiedliche parallele Rechnersysteme resultieren. Aufgrund der derzeit existierenden Vielfalt paralleler Hardware- und Systemsoftwarekomponenten gibt es eine Vielzahl unterschiedlicher paralleler Rechnersysteme, die jeweils andere Anforderungen hinsichtlich der Nutzung und Effizienz stellen. Dementsprechend können parallele Programme für ein und denselben sequentiellen Algorithmus je nach Anforderung des benutzten parallelen Systems sehr unterschiedlich sein. Um bei der parallelen Programmierung hardwareunabhängige Prinzipien und Programmiermethoden anwenden zu können, wird versucht, anstatt einzelner paralleler Rechnersysteme ganze Klassen von in mancher Hinsicht gleichen Systemen zu betrachten. So werden z. B. Rechnersysteme mit gemeinsamem und Rechnersysteme mit verteiltem Adressraum in jeweils einer Klasse zusammengefasst.
Thomas Rauber, Gudula Rünger
4. Laufzeitanalyse paralleler Programme
Zusammenfassung
Ein wesentlicher Grund für den Einsatz eines Parallelrechners ist eine Reduzierung der Laufzeit von Anwendungsprogrammen. Das Ableiten von Aussagen über die Laufzeit paralleler Programme oder sogar eine Analyse dieser Laufzeit sind daher ein wichtiges Anliegen in der Parallelverarbeitung. Dabei steht zunächst nicht fest, in welcher Weise und mit welchen Leistungsmaßen diese Aussagen getroffen werden sollen, da die Ausführung eines parallelen Programmes von vielen Faktoren beeinflusst wird. Diese Faktoren umfassen die Architektur der verwendeten parallelen Plattform, den Compiler, das Betriebssystem, die parallele Programmierumgebung einschließlich des zugrunde liegenden Programmiermodells und die Lokalitäts- und Abhängigkeits-Eigenschaften des auszuführenden Programmes. Leistungsmaße können diese Faktoren in unterschiedlich detaillierter Form einbeziehen. Entsprechend sind die unterschiedlichsten Ansätze zur Erfassung und Analyse der Laufzeit von parallelen Programmen verfolgt worden. Diese reichen von theoretischen Kostenmodellen bis zur Analyse von realen, gemessenen Laufzeiten.
Thomas Rauber, Gudula Rünger
5. Message-Passing-Programmierung
Zusammenfassung
Das Message-Passing-Programmiermodell ist eine Abstraktion eines Parallelrechners mit verteiltem Speicher, wobei meist keine explizite Sicht auf die Topologie des Rechners genutzt wird, um die Portabilität der Programme zu gewährleisten. Ein Message-Passing-Programm besteht aus einer Anzahl von Prozessen mit zugeordneten lokalen Daten. Jeder Prozess kann auf seine lokalen Daten zugreifen und mit anderen Prozessen Informationen durch das explizite Verschicken von Nachrichten austauschen. Im Prinzip kann jeder Prozess ein separates Programm ausführen (MPMD, multiple program multiple data). Um die Programmierung zu erleichtern, führt aber im Regelfall jeder Prozess das gleiche Programm aus (SPMD), vgl. Abschn. 3.4. Dies stellt in der Praxis keine Einschränkung für die Programmierung dar, da jeder Prozess in Abhängigkeit von seiner Prozessnummer einen vollständig unterschiedlichen Programmteil ausführen kann.
Thomas Rauber, Gudula Rünger
6. Thread-Programmierung
Zusammenfassung
Die parallele Programmierung mit gemeinsamen Variablen (engl. shared variables) stellt neben der Message-Passing-Programmierung, siehe Kap. 5, und der datenparallelen Programmierung eine der am häufigsten benutzten parallelen Programmierparadigmen dar. Die Programmierung mit gemeinsamen Variablen beruht auf einem Speichermodell, in dem unabhängige Programmstücke während ihrer Abarbeitung auf einen gemeinsamen Adressraum zugreifen und die dort abgelegten Variablen lesen oder manipulieren können. Im Gegensatz zu dem Modell eines verteilten Adressraumes, das für die Message-Passing-Programmierung verwendet wird, hat also jede an der Abarbeitung eines parallelen Programms beteiligte Ausführungseinheit direkten Zugriff auf jede Variable des globalen Adressraumes.
Thomas Rauber, Gudula Rünger
7. GPU-Programmierung
Zusammenfassung
Manycore-GPUs (Graphics Processing Units) stellen heutzutage einfach zugängliche und kostengünstige parallele Hardwareplattformen dar, die in den meisten Rechnern, von Desktops bis zu Clustern, integriert sind. Diese für Graphikanwendungen entwickelten Prozessoren werden zunehmend für Anwendungen des wissenschaftlichen Rechnens und der wissenschaftlich-technischen Simulation eingesetzt und können bei datenparallelen Programmen zu erheblichen Effizienzgewinnen führen. Diese Effizienzgewinne entstehen im Wesentlichen durch das spezielle Design von GPUs, das für Graphikanwendungen mit sehr großen Datenmengen entworfen wurde und daher für einen hohen Durchsatz von Floating- Point-Operationen, die auf eine große Anzahl von Threads verteilt werden können, optimiert wurde. GPUs können durchaus bis zu Hunderten von Cores enthalten. Wir geben in Abschn. 7.1 einen kurzen Überblick über die Architektur von GPUs.
Thomas Rauber, Gudula Rünger
8. Lösung linearer Gleichungssysteme
Zusammenfassung
Das Lösen linearer Gleichungssysteme spielt eine zentrale Rolle im wissenschaftlichen Rechnen, da viele physikalische oder andere naturwissenschaftliche Phänomene durch gewöhnliche und partielle Differentialgleichungen modelliert werden, deren numerische Lösung oft auf lineare Gleichungssysteme zurückgeführt wird. Dies ist etwa der Fall beim Lösen partieller Differentialgleichungen durch Diskretisierungsverfahren. In diesem Kapitel gehen wir auf grundlegendeVerfahren zur Lösung von linearen Gleichungssystemen ein und beschreiben deren parallele Realisierung. Dabei stellen wir die Implementierung für Rechner mit verteiltem Adressraum in den Vordergrund.
Thomas Rauber, Gudula Rünger
Backmatter
Metadaten
Titel
Parallele Programmierung
verfasst von
Thomas Rauber
Gudula Rünger
Copyright-Jahr
2012
Verlag
Springer Berlin Heidelberg
Electronic ISBN
978-3-642-13604-7
Print ISBN
978-3-642-13603-0
DOI
https://doi.org/10.1007/978-3-642-13604-7

Premium Partner