Suchen

parallel processing | Parallelverarbeitung

| Redakteur: Gerald Viola

Bei Computern bedeutet Parallelverarbeitung die gleichzietige Verarbeitung von Programmanweisungen, indem man sie über mehrere Prozessoren verteilt. Bei den frühesten Computern wurde

Firma zum Thema

Bei Computern bedeutet Parallelverarbeitung die gleichzietige Verarbeitung von Programmanweisungen, indem man sie über mehrere Prozessoren verteilt. Bei den frühesten Computern wurde nur ein Programm zu einer gegebenen Zeit ausgeführt. Ein rechenintensives Programm mit einer Laufzeit von einer Stunde und ein Bandkopierprogramm, dass ebenfalls eine Laufzeit von einer Stunde hatte, hätten zwei Stunden Ausführungszeit benötigt. Eine frühe Form der Parallelverarbeitung ermöglichte die gleichzeitige Ausführung der beiden Programme. Der Computer würde mit einer I/O-Operation beginnen und während er auf die Beendigung der Operation wartete, würde er ein rechenintensives Programm ausführen. Damit reduzierte sich die Gesamtlaufzeit für die beiden Jobs auf etwas über eine Stunde.

Die nächste Verbesserung betraf die Multiprogrammierung. In einem Multiprogrammierungssystem konnten mehrere von Benutzern eingegebenen Programmen jeweils den Prozessor über eine kurze Zeit in Anspruch nehmen. Aus Sicht des Users sah es so aus, als würden alle Programme gleichzeitig ausgeführt. Probleme mit der Konkurrenz um Ressourcen sind erstmalig mit diesen Systemen aufgekommen. Explizite Anforderungen nach Ressourcen haben zu gegenseitigen Sperren geführt. Die Konkurrenz um Ressourcen bei Maschinen ohne Tie-Breaking-Anweisungen führte zur Routine für kritische Abschnitte.

Die Vektorverarbeitung stellte einen weiteren Leistungssteigerungsversuch dar, indem mehrere Aktionen gleichzeitig ausgeführt wurden. Hier besaßen die Maschinen die Fähigkeit, mit einer einzelnen Anweisung zwei Zahlenarrays zu addieren (oder subtrahieren, oder multiplizieren oder auf sonstige Art zu manipulieren). Diese Fähigkeit war in bestimmten Engineering-Anwendungen nützlich, wo die Daten in der Form von Vektoren oder Matrizen vorkamen. In Anwendungen mit weniger gut formatierten Daten, war die Vektorverarbeitung weniger sinnvoll.

Der nächste Schritt in der Parallelverarbeitung war die Einführung von Multiprocessing. Bei diesen Systemen haben zwei oder mehrere Prozessoren sich die Arbeit geteilt. Die frühesten Versionen hatten eine Master/Slave-Konfiguration. Ein Prozessor (der Master) wurde dafür programmiert, die Verantwortung für die gesamte Arbeit des Systems zu übernehmen; der andere (der Slave) hat lediglich die Aufgaben ausgeführt, die vom Master zugewiesen wurden. Diese Anordnung war erforderlich, weil man noch nicht verstanden hatte, wie die Maschinen programmiert werden konnten, um bei der Verwaltung der Systemressourcen zu kooperieren.

Die Lösung für diese Probleme führte zum Symmetrischen Multiprocessing System (SMP). In einem SMP-System ist jeder Prozessor gleichermaßen befähigt und für die Verwaltung des Arbeitsflusses durch das System verantwortlich. Ursprünglich war das Ziel, die SMP-Systeme für den Programmierer genau wie ein Einzelprozessor, Multiprogrammierungsystem erscheinen zu lassen. (Dieses Verhalten wird sequentielle Konsistenz genannt).

Allerdings haben Ingenieure festgestellt, dass man die Systemleistung um etwa 10 bis 20% steigern konnte, indem man manche Anweisungen in einer anderen Reihenfolge ausführt und den Programmierern die Verantwortung für den Umgang mit dieser erhöhten Komplexität gibt. (Das Problem ist nur dann sichtbar, wenn zwei oder mehrere Programme gleichzeitig die gleichen Operanden lesen und schreiben; daher befassen sich nur wenige Programmierer mit der erhöhten Komplexität und nur unter sehr besonderen Bedingungen.) Die Frage über das Verhalten der SMP-Maschinen in Bezug auf gemeinsam genutzte Daten ist noch nicht gelöst.

Mit zunehmender Anzahl von Prozessoren in den SMP-Systemen steigt auch die Dauer der Propagierung der Daten von einem Teil des Systems in alle anderen Teile. Wenn die Anzahl Prozessoren in Richtung mehrere Dutzend steigt, ist die durch das Hinzufügen weiterer Prozessoren zu erwartende Leistungssteigerung zu gering, um die zusätzlichen Kosten zu rechtfertigen. Um das Problem der langen Propagierungszeiten zu bekämpfen wurden Nachrichtenaustauschsysteme entwickelt.

In diesen Systemen senden sich Programme, die Daten gemeinsam nutzen, gegenseitig Nachrichten, um anzukündigen, dass bestimmte Operanden mit einem neuen Wert versehen wurden. Statt den neuen Wert eines Operanden in alle Teile des Systems zu übertragen, wird der neue Wert nur an die Programme kommuniziert, die den neuen Wert kennen müssen. Statt eines gemeinsamen Speichers gibt es ein Netzwerk, das die Übertragung von Nachrichten zwischen Programmen unterstützt. Diese Vereinfachung versetzt Hunderte, sogar Tausende von Prozessoren in die Lage, effizient als ein System zusammenzuarbeiten. (In der Systemarchitektur spricht man davon, dass diese Systeme "gut skalieren".) Aus diesem Grund werden diese Systeme Massiv Paralleles Processing (MPP) System genannt.

Die erfolgreichsten MPP-Anwendungen wurden für Probleme geschrieben, die in viele unabhängige Operationen mit riesigen Datenmengen heruntergebrochen werden konnten. Im Data Mining müssen mehrfache Suchen einer statischen Datenbank durchgeführt werden. In der künstlichen Intelligenz müssen mehrere Alternativen untersucht werden, wie in einem Schachspiel. Oft werden MPP-Systeme als Prozessorcluster strukturiert. Innerhalb von jedem Cluster interagieren die Prozessoren wie im SMP-System. Nachrichten werden lediglich zwischen den Clustern ausgetauscht. Weil die Operanden entweder mithilfe von Nachrichten oder von Speicheradressen angesprochen werden können, werden manche MPP-Systeme NUMA-Maschinen (Non-Uniform Memory Addressing) genannt.

SMP-Maschinen lassen sich relativ einfach programmieren; MPP-Maschinen nicht. SMP-Maschinen funktionieren gut bei allen erdenklichen Problemen, vorausgesetzt die Datenmenge ist nicht zu groß. Für manche Probleme, wie das Data Mining in riesigen Datenbanken kommen nur MPP-Systeme in Frage.

(ID:2021110)