zu www.bildungsgueter.de nächster Abschnitt zur Inhaltsübersicht des Kapitels

Parallelprogrammierung

Beim Programmieren schreibst du in der Regel Anweisungen, die nacheinander in der Reihenfolge ihrer Niederschrift ausgeführt werden. Fallunterscheidungen, Sprungbefehle und Funktionsaufrufe geben dir die Möglichkeit, von einer Anweisungsfolge zu einer anderen zu wechseln.

Dass Anweisungsfolgen beim Programmieren eine so große Bedeutung haben, hat natürlich gewichtige Gründe:

Die Zerlegung einer Aufgabe in eine Folge nacheinander auszuführender Teilaufgaben ist aber nicht immer zwangsläufig. Tatsächlich gibt es viele Aufgaben, die so zerlegt werden können, dass Teilaufgaben entstehen, die in beliebiger Reihenfolge oder auch gleichzeitig durch verschiedene Bearbeiter ausführbar sind.

Teilaufgaben einer größeren Aufgabe sind voneinander unabhängig, wenn


Einfache Beispiele für die Zerlegung einer Aufgabe in voneinander unabhängige Teilaufgaben lassen sich mit geringer Mühe finden:

Hier gehört ein Beispiel mit Flussdiagramm hin

Die Formel für die Länge der Raumdiagonale eines Quaders:

***

Das Diagramm zeigt die Aufteilung des Programms auf drei Teilaufgaben ebenso wie das Zusammenlaufen der drei Aktivitäten nach der Erledigung aller drei Teilaufgaben.

Dass es Aufgaben gibt, die in voneinander unabhängige Teilaufgaben zerlegt werden können, ist allgemein bekannt. Aus der Untersuchung von Programmen lässt sich sogar die Einsicht gewinnen, dass voneinander unabhängige Teilaufgaben keineswegs selten sind.

Seit preiswerte Mehrprozessorsysteme zur Verfügung stehen, hat die Zerlegung von Problemen in voneinander unabhängige Teilprobleme für die Programmierung praktische Bedeutung erlangt.


Technische Eigenschaften von Mehrprozessorsystemen

Bei der Entwicklung von Mehrprozessorsystemen wurden von Anfang an unterschiedliche Ideen verfolgt. Die zur Anwendungsreife gekommenen Systeme können grob eingeteilt werden in

Ein wesentlich anderer Ansatz wird in Systemen verfolgt, in denen eine Befehlsfolge durch mehrere Rechenwerke gleichzeitig auf unterschiedlichen Daten ausgeführt wird. Dieses Prinzip wird SIMD (Single Instruction Multiple Data) genannt und findet sich zunehmend in spezialisierter Hardware. Für SIMD-Prozessoren stehen spezialisierte Programmiersprachen zur Verfügung; C# und die .NET-Bibliothek sind für die Programmierung derartiger Prozessoren gegenwärtig [Sommer 2014] nicht eingerichtet.

Überdies ist es natürlich möglich, ein System verbundener Rechner ohne gemeinsamen Arbeitsspeicher aus Mehrprozessorsystemen mit gemeinsamem Arbeitsspeicher aufzubauen. In einer solchen Konfiguration werden ......

Die Programmiersprache C# unterstützt Parallelprogrammierung für Multiprozessorsysteme mit gemeinsamem Arbeitsspeicher. Die in .NET enthaltenen Bibliotheken für Datenübertragung in Netzwerken erlauben grundsätzlich auch die Programmentwicklung für Multiprozessorsysteme ohne gemeinsamen Arbeitsspeicher. Erwähnenswert ist, dass das das Message Passing Interface, ein bewährtes Hilfsmittel für die Programmierung von Multiprozessorsystemen ohne gemeinsamen Arbeitsspeicher, auch für C# zur Verfügung steht.


zur Inhaltsübersicht des Kapitels nächster Abschnitt