Wikipedia · einfach zusammengefasst · Stand
Parallelrechner
Pipelining. Bearbeiten. Problemstellungen, bei denen größere Datenmengen in mehreren aufeinander folgenden Schritten verarbeitet werden, sogenanntes Pipelining.
Inhalt5 Abschnitte
Grundidee und Anwendungsfelder
Ein Parallelrechner ist ein Rechner, der Rechenoperationen gleichzeitig ausführen kann, unter anderem mit mehreren Hauptprozessoren oder Grafikprozessoren. Seine Arbeitsgeschwindigkeit steigt, indem Rechenaufwand auf mehrere Prozessoren verteilt wird.
Wichtige Anwendungsformen sind die massiv-parallele Verarbeitung verteilter Probleme und das Pipelining, bei dem umfangreiche Daten schrittweise verarbeitet werden.
Massiv-parallele Verarbeitung
Bei verteilten Problemstellungen wird eine Aufgabe in Teilbereiche zerlegt. Für Wettervorhersagen kann die Erdoberfläche beispielsweise in Planquadrate aufgeteilt werden; jeweils ein Prozessor berechnet ein Planquadrat. Weil benachbarte Gebiete einander beeinflussen, müssen die Prozesse Daten austauschen und miteinander synchronisiert werden.
Für solche Aufgaben ausgelegte massiv-parallele Computer können einige tausend Hauptprozessoren enthalten. Anwendungen liegen neben Wettervorhersagen besonders in Simulationen, etwa in der Chemoinformatik und Computerphysik.
Pipelining, Nebenläufigkeit und Multithreading
Pipelining eignet sich für Aufgaben, bei denen große Datenmengen mehrere aufeinanderfolgende Verarbeitungsschritte durchlaufen. Die Module eines Compilers können zum Beispiel als parallel laufende Prozesse umgesetzt werden: Präprozessor, lexikalische Analyse, semantische Analyse, Optimierung und Codeerzeugung.
Jeder Prozess gibt sein Ergebnis an den folgenden Prozess weiter und kann danach schon die nächsten Daten bearbeiten, während ein anderer Prozess den nächsten Schritt ausführt. Werden die Prozesse jeweils Prozessoren zugeordnet, ist eine weitgehende echte Parallelisierung möglich. Solche Aufgaben benötigen meist vergleichsweise wenige Prozessoren.
Häufig spricht man dabei von Multithreading oder Nebenläufigkeit. Threads müssen jedoch nicht auf getrennten Prozessoren laufen: Sie können auf einem Prozessor quasi parallel ausgeführt werden. Dann lassen sich die Geschwindigkeitsvorteile echter paralleler Ausführung nicht erreichen.
Effiziente Nutzung und Grenzen
Damit ein Parallelrechner seine Leistungsfähigkeit ausnutzt, muss ein Programm passend parallelisiert werden. Die Verteilung der Rechenlast sowie ihre Organisation und Koordination verursachen zusätzlichen Aufwand, der mit der Zahl der Prozesse in der Regel überproportional steigt. Abhängigkeiten zwischen Teilaufgaben können außerdem verhindern, dass Prozesse parallel ausgeführt werden.
Eine effiziente Umsetzung verlangt daher ein tiefes Verständnis der Problemstellung und eine Kosten-Nutzen-Abwägung. Rechenzeit, Speicherzugriffe und Datenbusse sind knappe Ressourcen und sollen effizient genutzt werden. Der sequentielle Programm-Overhead soll stets minimal bleiben; hierfür wird das Amdahlsche Gesetz genannt.
Auch die Vernetzung der Hardware beeinflusst die Effizienz. Für viele Problemstellungen können Cube-Topologien, also Konfigurationen aus 8 Rechnern mit einer Vernetzung entsprechend einem Quader, und Hyper-Cubes, n-dimensionale Quader, gute Ergebnisse liefern.
GPU-Cluster und Schnittstellen
Seit den späten 2000er Jahren gibt es Grafikkarten mit teilweise mehr als 2000 Rechenkernen. Sie wurden ursprünglich für Farbverläufe, Texturen und Ähnliches entwickelt, können aber auch andere Berechnungen parallel ausführen. Für massiv parallele Anwendungen wurden Cluster aus mehreren hundert Grafikprozessoren oder Grafikkarten gebaut. Dadurch sind Architekturen möglich, die statt einiger Tausend faktisch einige Hunderttausend Prozessoren enthalten.
Zur Programmierung paralleler Systeme stehen unter anderem OpenCL (Open Computing Language) für uneinheitliche Parallelrechner, CUDA (Compute Unified Device Architecture) zur Nutzung der Grafikkarte für parallele Berechnungen, OpenHMPP (Hybrid Multicore Parallel Programming), OpenACC und OpenMP (Open Multi-Processing) zur Verfügung.