Jewiki unterstützen. Jewiki, die größte Online-Enzy­klo­pädie zum Judentum.

Helfen Sie Jewiki mit einer kleinen oder auch größeren Spende. Einmalig oder regelmäßig, damit die Zukunft von Jewiki gesichert bleibt ...

Vielen Dank für Ihr Engagement! (→ Spendenkonten)

How to read Jewiki in your desired language · Comment lire Jewiki dans votre langue préférée · Cómo leer Jewiki en su idioma preferido · בשפה הרצויה Jewiki כיצד לקרוא · Как читать Jewiki на предпочитаемом вами языке · كيف تقرأ Jewiki باللغة التي تريدها · Como ler o Jewiki na sua língua preferida

Parallelrechner

Aus Jewiki
Zur Navigation springen Zur Suche springen
Parallelrechner, ein Cray-2 (1986)

Ein Parallelrechner ist ein Rechner, in dem Rechenoperationen gleichzeitig unter anderem auf mehreren Haupt- oder Grafikprozessoren durchgeführt werden können.

Anwendungsbereiche

Grob können die folgenden Anwendungsbereiche unterschieden werden:

Massiv-parallele Verarbeitung

Verteilte Problemstellungen, wie z. B. Wettervorhersagen. Dabei wird z. B. die Erdoberfläche in Planquadrate aufgeteilt und jeweils ein Prozessor übernimmt die Berechnung für ein Planquadrat. Um die Einflüsse zwischen benachbarten Planquadraten zu berücksichtigen, müssen dazu die Prozesse auf den unterschiedlichen Prozessoren untereinander Daten austauschen und dazu synchronisiert werden.

Computer, die für diese Art von Aufgabenstellung ausgelegt sind, können einige tausend Hauptprozessoren enthalten. Man verwendet dafür den Begriff Massiv-parallele Computer. Neben Wettervorhersagen finden sich Anwendungen für solche Architekturen z. B. in allen Bereichen von Simulationen (siehe z. B. Chemoinformatik, Computerphysik)

Pipelining

Problemstellungen, bei denen größere Datenmengen in mehreren aufeinander folgenden Schritten verarbeitet werden, sogenanntes Pipelining. Z. B. lassen sich die Module eines Compilers (Präprozessor, lexikalische Analyse, semantische Analyse, Optimierung, Codeerzeugung), als parallel laufende Prozesse realisieren.

Jeder Prozess reicht seine Ausgabe dabei an den nachfolgenden Prozess weiter und ist damit frei um die nächsten Daten zu verarbeiten, während der nachfolgende Prozessschritt von einem anderen Prozess erledigt wird. Dabei kann jeder der Prozesse jeweils einem Prozessor zugewiesen werden, so dass eine weitgehende echte Parallelisierung der Verarbeitung erreicht wird.

Problemstellungen dieser Art sind in der Regel für Rechner geeignet, die über vergleichsweise wenige Prozessoren verfügen.

Man spricht in diesem Fall häufig von Multithreading oder Nebenläufigkeit. Allerdings ist für Multithreading (Thread = Faden) nicht zwingend erforderlich, dass die verschiedenen Prozesse (Threads) jeweils auf einem eigenen Prozessor laufen. Denkbar wäre ebenso, die verschiedenen Prozesse quasi parallel auf einem einzigen Prozessor laufen zu lassen. Allerdings können dann die Geschwindigkeitsvorteile nicht realisiert werden.

Optimierung

Parallelcomputer erhöhen ihre Arbeitsgeschwindigkeit, indem sie den Rechenaufwand auf ihre Prozessoren verteilen. Um die volle Leistungsfähigkeit eines Parallelrechners ausnutzen zu können, muss die Programmierung entsprechend angepasst werden. Dafür stehen eine Reihe von Programmierschnittstellen zur Verfügung (siehe Abschnitt weiter unten).

Die Verteilung der Rechenlast auf mehrere Prozesse erfordert immer einen zusätzlichen Aufwand, um diese Verteilung zu organisieren und zu koordinieren. Dieser Aufwand steigt mit der Anzahl der Prozesse in der Regel überproportional an. Je nach bestehenden Abhängigkeiten ist es auch nicht immer möglich, Prozesse zu parallelisieren. Eine Aufgabenstellung so zu implementieren, dass sie einen Parallelrechner effizient nutzt, erfordert deshalb ein tiefes Verständnis der Problemstellung, und es muss immer eine Kosten-Nutzen-Abwägung getroffen werden, um für die Parallelisierung ein Optimum zu finden. Es gilt die knappen Ressourcen – Rechenzeit, Speicherzugriffe, Datenbusse – effizient zu nutzen. Stets sollte der sequentielle Programm-Overhead minimal sein (Amdahlsches Gesetz).

Auch die Art der Vernetzung der Hardwarekomponenten hat Einfluss auf die Effizienz. Für viele Problemstellungen lassen sich gute Ergebnisse mit folgenden Topologien erzielen:

  • Cube (Konfiguration aus 8 Rechnern. Vernetzung entspricht einem Quader).
  • Hyper-Cube (n-dimensionale Quader)

GPU-Cluster

In den letzten Jahren sind Grafikkarten auf den Markt gekommen die teilweise mehr als 2000 Rechenkerne besitzen. Eigentlich für die Berechnung von Farbverläufen, Texturen usw. konzipiert, lassen sich diese Rechenkerne auch für die Parallelisierung anderer Berechnungen nutzen. Für massiv parallele Anwendungen wurden deshalb mittlerweile auch Rechner gebaut, die Cluster aus mehreren hundert Grafik-Prozessoren oder Grafikkarten enthalten.[1][2] Damit lassen sich Rechnerarchitekturen erreichen, die statt einiger Tausend, einige Hunderttausend Prozessoren enthalten.

Programmierschnittstellen

  • OpenCL Open Computing Language (Schnittstelle für uneinheitliche Parallelrechner)
  • CUDA Compute Unified Device Architecture (Schnittstelle um die Grafikkarte für parallele Berechnungen nutzen zu können)
  • OpenHMPP Hybrid Multicore Parallel Programming
  • OpenACC
  • OpenMP Open Multi-Processing

Siehe auch

Weblinks

 Commons: Parallelrechner – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

Dieser Artikel basiert ursprünglich auf dem Artikel Parallelrechner aus der freien Enzyklopädie Wikipedia und steht unter der Doppellizenz GNU-Lizenz für freie Dokumentation und Creative Commons CC-BY-SA 3.0 Unported. In der Wikipedia ist eine Liste der ursprünglichen Wikipedia-Autoren verfügbar.