Siegel der Universität Heidelberg
Bild / picture

Helics – ein Rechner der Superklasse

Cluster-Computing beschäftigt sich mit der Frage, wie eine Ansammlung einzelner Rechner genutzt werden kann, um einen virtuellen Hochleistungsrechner zu schaffen. Dieser soll verfügbar sein, um rechenintensive Anwendungen aus allen Forschungsbereichen zu bearbeiten, darf dabei aber nur den Bruchteil eines "echten" Hochleistungsrechners kosten. Peter Bastian und Thomas Ludwig betrachten dieses spannende Gebiet aus dem Blickwinkel der Forscher am Interdisziplinären Zentrum für Wissenschaftliches Rechnen und des Instituts für Informatik.

Der

Der "Heidelberger Linux Cluster", kurz Helics, wurde im Jahr 2002 in Betrieb genommen und belegte damals Platz 35 der weltweit schnellsten Rechnersysteme.


Vor zehn Jahren begannen die Informatiker Donald Becker und Thomas Sterling am "Center of Excellence in Space Data and Information Sciences" damit, einen Parallelrechner aus Standardkomponenten zu entwickeln. Ihr Ziel: Jeder Wissenschaftler sollte an seinem Arbeitsplatz einen eigenen kleinen Superrechner haben, anstatt sich einen großen, teuren Superrechner mit vielen Wissenschaftlern teilen zu müssen. Dies war die Geburtsstunde des "Cluster Computing", von dessen Entwicklung und Möglichkeiten dieser Beitrag handelt.



Die Geschichte der Computer ist auch die Geschichte des parallelen Rechnens. Denn schon sehr früh erkannten die Wissenschaftler, dass die Anzahl der pro Sekunde ausgeführten Rechenoperationen (Flop/s: floating point operations per second) enorm gesteigert werden kann, wenn mehrere Rechenoperationen gleichzeitig ausgeführt werden. Von Anfang an gab es dabei zwei konkurrierende Konzepte: die gleichzeitige, überlappende Verarbeitung mehrerer Instruktionen in einem Prozessor, etwa wie auf einem Fließband (Vektorrechner); und das gleichzeitige Abarbeiten verschiedener Programme auf vielen, aber jeweils eigenständigen Prozessoren (Multiprozessoren). Mit Menschen, die als Rechenmaschinen arbeiteten, wurde die "Fließbandverarbeitung" bereits während des Manhattan-Projekts in Los Alamos von Richard Feynman praktiziert. Ein Computer mit bis zu vier eigenständigen Prozessoren wurde erstmals im Jahr 1962 von der Firma Burroughs gefertigt.


Für einige Jahrzehnte blieb die Fließbandverarbeitung die erfolgreichere Technologie. Zwar ließen sich nur etwa 20 Befehle gleichzeitig bearbeiten, dafür benutzten diese Maschinen aber jeweils die fortgeschrittenste Technologie der digitalen Schaltungsentwicklung. So betrug die Taktfrequenz der CRAY-2-Supercomputer im Jahr 1985 bereits 250 Megahertz (MHz), eine Taktrate, die von Mikroprozessoren erst über zehn Jahre später erreicht wurde. Der erste Mikroprozessor – der Computer auf einem Chip – wurde von der Firma Intel im Jahr 1971 eingeführt. Einer der Intel-Gründer, Gordon Moore, postulierte, dass die Anzahl der Transistoren pro Chipfläche sich jeweils alle 18 Monate verdoppeln würde. Diese Entwicklung hält bis heute an und hat schließlich die Ära klassischer Vektorsuperrechner beendet. Umsonst war deren Entwicklung dennoch nicht: Sehr viele Architekturmerkmale aus der jahrzehntelangen Entwicklung von Superrechnern wurden nach und nach in die Mikroprozessoren integriert.



Zu Beginn der neunziger Jahre hatten die Multiprozessoren den Vektorrechnern den Rang abgelaufen und waren nun die schnellsten Rechner der Welt. Betrachtet man die Liste der "TOP 500" – der Liste der fünfhundert schnellsten Rechner – aus dem Jahr 1993, so finden sich schon damals drei Maschinen vom Typ CM-5 der (ehemaligen) Firma "Thinking Machines" mit bis zu 1024 Prozessoren auf den ersten Plätzen, gefolgt von sieben Vektorsuperrechnern.


Die parallelen Rechner waren jedoch noch sehr teuer. Insbesondere der hohe Entwicklungsaufwand für das schnelle Verbindungsnetzwerk, über das die Prozessoren Daten austauschen, und die Entwicklung der Software bei sehr geringen Stückzahlen machten die Maschinen kostspielig. Außerdem entwickelten sich die Mikroprozessoren schneller als sie die Hersteller von Parallelrechnern in ihre Maschinen integrieren konnten. Genau an diesem Punkt setzten Don Becker und Thomas Sterling 1993 mit ihrem "Beowulf-Projekt" an: Sie benutzten für ihre Maschine ausschließlich Standardbauteile (COTS: commodity off the shelf) von normalen Büro-PCs inklusive Verbindungsnetzwerk. Weiterhin benutzten sie das frei verfügbare Betriebssystem "Linux" sowie ebenfalls frei verfügbare Software für den reibungslosen Datenaustausch zwischen den Computern (PVM: Parallel Virtuell Machine; MPI: Message Passing Interface).



Am Bereitstellen höchster Rechenleistung ist auch die Universität Heidelberg sehr interessiert: Nur so können die Forschergruppen des Interdisziplinären Zentrums für Wissenschaftliches Rechnen, kurz IWR, praxisrelevante Ergebnisse erzielen. Der Wunsch nach hoher Rechenleistung erfüllte sich im Jahr 2002, als der "Helics-Cluster" (Heidelberg Linux Cluster) in Betrieb genommen wurde. Das System besteht aus 256 Rechnerknoten mit je zwei Prozessoren und erbringt eine theoretische Gesamtleistung von 1,4 Teraflop pro Sekunde. Der tatsächlich gemessene Wert von 0,85 Teraflop pro Sekunde brachte Helics im Juni 2002 auf Platz 35 der Liste der 500 weltweit schnellsten Rechnersysteme. Gleichzeitig war Helics damit das schnellste Selbstbau-Cluster. Bereits im November des gleichen Jahres rutschte das Rechnersystem jedoch auf Platz 64 ab – der weltschnellste Rechner, ein japanisches System, stellte 36 Teraflop bereit. Daran ist zu erkennen, wie rasant sich dieses Gebiet entwickelt.

Helics verfügt über eine spezielle Glasfaservernetzung zwischen den Knoten, die auf einer Leitung zwei Gigabit pro Sekunde übertragen kann. Sein Hauptspeicher kann mit insgesamt 512 Gigabyte auch umfangreichste Datenmengen aufnehmen. Der Beschaffungspreis liegt mit 1,3 Millionen Euro bei etwa einem Zehntel dessen, was ein Parallelrechner von Hitachi im Jahr 2000 mit vergleichbarer Leistung gekostet hat.

Helics dient dem IWR und dem Institut für Informatik für unterschiedliche Forschungs- und Entwicklungsarbeiten. In der Kerninformatik wird beispielsweise untersucht, wie solche Cluster-Architekturen aufzubauen sind und wie sie effizient betrieben werden können. Vor allem ist es bedeutsam, die Betriebssystemkonzepte auszubauen. Aus Sicht der Informatik ist die Programmierung ein weiterer Schwerpunkt.

Um Cluster-Computer sinnvoll einsetzen zu können, muss die Berechnungsvorschrift – der Algorithmus – in gleichzeitig ausführbare Einheiten zerlegt werden können. Im Allgemeinen ist diese Zerlegung nicht so einfach möglich, kennt man doch durchaus Algorithmen, in denen die einzelnen Elementaroperationen streng sequenziell abgearbeitet werden müssen.

Ein große Klasse von Algorithmen, die sich sehr gut für die Parallelisierung eignen, sind die so genannten datenparallelen Algorithmen. Dabei besteht das Problem in einer großen Datenmenge, wobei für jedes einzelne Datenobjekt eine gewisse Anzahl von Rechenoperationen auszuführen ist.

In unseren Anwendungen wird die Datenmenge durch ein Gitter realisiert. Für jeden Knoten des Gitters ist eine feste Anzahl von Rechenoperationen durchzuführen. Teilt man die Datenmenge gleichmäßig auf die verfügbaren Prozessoren auf, so ist damit auch die Berechnung verteilt. Denn jeder Prozessor führt nun die Rechenoperationen für die Datenobjekte durch, die ihm zugeordnet wurden.

In der Abbildung auf Seite 6 (links) ist die Datenaufteilung durch Farben dargestellt: Alle Dreiecke einer Farbe sind dem selben Prozessor zugeordnet. Für die Knoten an den Prozessorgrenzen ist an bestimmten Stellen in der Berechnung ein Datenabgleich erforderlich. Da dieser Datenaustausch zwischen den Prozessoren verglichen mit einem sequenziellen Programm zusätzliche Zeit benötigt, muss er minimiert werden. Ebenso müssen die Daten möglichst gleichmäßig auf die Prozessoren verteilt werden, um keine Lastungleichheiten zu erzeugen.

Ein Maß für die Qualität eines parallelen Programms ist die Beschleunigung, definiert als das Verhältnis von sequenzieller zu paralleler Ausführungszeit. Die maximal erzielbare (ideale) Beschleunigung entspricht gerade der Anzahl der verwendeten Prozessoren. Welche Beschleunigungen sich für die Klasse der datenparallelen Algorithmen erzielen lassen, illustriert die Abbildung auf Seite 7 rechts. Hierbei wurde eine Berechnung auf einem dreidimensionalen, würfelförmigen Gitter durchgeführt, wobei zwei verschiedene Strategien untersucht wurden: Zum einen kann man mit der Rechenleistung zusätzlicher Prozessoren ein Problem fester Größe immer schneller berechnen, andererseits kann man mit zusätzlichen Prozessoren auch immer größere Probleme berechnen. Im ersten Fall wird die Zahl der pro Prozessor auszuführenden Rechenoperationen immer kleiner, und die zur Koordination benötigte Rechenzeit übersteigt irgendwann den Nutzen: Mehr als etwa 80 Prozessoren lassen sich nicht sinnvoll zur Lösung dieses Problems einsetzen. Anders ist die Situation, wenn die Problemgröße mit der Prozessorzahl entsprechend skaliert wird. Hier betrug die Anzahl Gitterzellen pro Prozessor etwa 16 Millionen, auf 480 Prozessoren entspricht dies dann etwa acht Milliarden Gitterzellen. Die erreichte Beschleunigung betrug 361.

Die ideale Beschleunigung wurde ebenfalls in das Diagramm aufgenommen. Für die große Klasse der datenparallelen Algorithmen lassen sich somit bei skalierter Problemgröße nahezu ideale Beschleunigungen auch für große Prozessorzahlen erreichen.

Leider kann die Parallelisierung der Anwendungen nicht automatisch durchgeführt werden. Zwar stehen solche automatisch parallelisierenden Übersetzer auf der Wunschliste der Anwender ganz oben, aber bis es so weit ist, werden noch umfangreiche Forschungen und Entwicklungen notwendig sein. Bis dahin gilt, dass die Parallelisierung von Hand eine fast schon künstlerische Tätigkeit ist, die viel Phantasie und Erfahrung erfordert.

Es gilt, sich die späteren parallelen Abläufe im Rechner vorzustellen, und dabei die Anwendung in passender Weise umzustrukturieren. Bei der parallelen Programmierung treten qualitativ neue Fehler auf, mit denen die Anwender bisher keine Erfahrung haben: Die Kommunikation zwischen Prozessen führt zum zeitabhängigen Empfangen von Nachrichten und damit möglicherweise zu einem Indeterminismus im Programmablauf. Je nach Reihenfolge der eingehenden Nachrichten ändert das Programm seinen internen Ablauf. Wird hier nun falsch programmiert, so werden die Programme nur gelegentlich falsch arbeiten.

Leider sind diese Fehlersituationen kaum reproduzierbar. Schlimmer noch, beobachten wir das parallele Programm mit einem Werkzeug und verlangsamen so den Nachrichtenaustausch, tritt vielfach die Fehlerursache nicht mehr auf und das Programm läuft korrekt. Wir haben es mit einer Art Heisenberg'schen Effekt des parallelen Programmierens zu tun.

Wir brauchen hier neue Werkzeuge zur Fehlersuche, die mit diesem Problem umgehen können. Ist das Programm über die Prozessoren des Clusters verteilt, so muss auch das Werkzeug verteilt sein, da es ja jeden Prozess auf jedem Prozessor überwachen soll. Damit ist aber das Werkzeug selber auch ein komplexes paralleles Programm und unterliegt in seinem Entwurf denselben Problemstellungen wie das eigentliche Programm des Endanwenders. Die Fortschritte auf dem Gebiet des Werkzeugentwurfs sind deshalb eher langsam.

Neben dem Aufbau und Betrieb von Clustern beschäftigen wir uns auch mit dem Einsatz von Clustern im wissenschaftlichen Hochleistungsrechnen. Eine Anwendung ist die Simulation von Transport- und Reaktionsprozessen in porösen Medien, also das Berechnen der Bewegung von Flüssigkeiten sowie darin gelösten Stoffen im Untergrund. Mathematisch werden diese Vorgänge durch partielle Differentialgleichungen beschrieben. Die Modellierung wird vor allem durch die Heterogenität natürlicher Böden sehr erschwert.

Mit dem Helics-Cluster sind wir in der Lage, die Bewegung gelöster Stoffe in heterogenen Grundwasserleitern mit sehr hoher Auflösung zu simulieren. Die Grafik auf Seite 7 oben zeigt einen anfänglich quaderförmigen Schadstoffpuls nach dem Durchlaufen von 100 Korrelationslängen des Mediums. Für diese Simulation waren etwa 30 000 Zeitschritte auf 500 Millionen Gitterzellen notwendig. Derart hochauflösende Simulationen können benutzt werden, um neue Modelle für den reaktiven Schadstofftransport zu validieren.

Die Abbildungen in der Seitenmitte stellen die Simulation einer instabilen Strömung von Salz- und Süßwasser dar. Anfänglich ist schwereres Salzwasser (rot) über leichterem Süßwasser (blau) geschichtet. Bei den angenommenen physikalischen Parametern entwickelt sich schnell eine instabile Strömung in der Form von Salz- bzw. Süßwasserfingern. An der Grenzfläche zwischen Salz- und Süßwasser findet eine Durchmischung statt (Seitenmitte). Die Abbildungen auf Seite 6 zeigen die Strömung zu einem späteren Zeitpunkt. Die obere Grafik zeigt das Ergebnis einer dreidimensionalen Simulation, wobei sich hier ein deutlich anderes Strömungsbild ergibt.

Für die dreidimensionale Simulation wurden 9000 Zeitschritte mit je 1,6 Milliarden Unbekannten berechnet. Dabei ist in jedem Schritt ein lineares Gleichungssystem mit 800 Millionen Unbekannten zu lösen, was auf 384 Prozessoren etwa 30 Sekunden Rechenzeit benötigt. Zur Speicherung aller Daten dieser Simulation würde man etwa 500 Festplatten eines aktuellen PCs (100 Gigabyte) benötigen. Eine schweizerische Arbeitsgruppe verwendet dieses Simulationsmodell, um neue Sanierungstechnologien zu entwickeln.

Wie sieht nun die Zukunft des Hochleistungsrechnens im Bereich der Cluster aus? Eine neue Richtung, die intensiv beforscht wird, widmet sich der universellen Bereitstellung von Rechenleistung. Diese so genannte Grid-Computing-Initiative zielt darauf, Rechenleistungen an verschiedenen Orten, die der Anwender gar nicht kennt, zu erzeugen und sie wie heute die Elektrizität zu beliebigen Abnehmern zu befördern. Dies geschieht auch durch das Zusammenschalten von Hochleistungs-Rechenzentren zu großen Clustern – womit sich der Kreis schließt.

Autoren:
Professor Peter Bastian, Interdisziplinäres Zentrum für Wissenschaftliches Rechnen,
Im Neuenheimer Feld 368, 69120 Heidelberg,
Telefon (0 62 21) 54 49 84,
e-mail: peter.bastian@iwr.uni-heidelberg.de;
Professor Thomas Ludwig,
Institut für Informatik, Im Neuenheimer Feld 348, 69120 Heidelberg,
Telefon (0 62 21) 54 49 68,
e-mail: t.ludwig@computer.org

Der "Heidelberg Linux Cluster", kurz Helics, wurde im Jahr 2002 in Betrieb genommen und belegte damals Platz 35 der weltweit schnellsten Rechnersysteme.
Seitenbearbeiter: Email
zum Seitenanfang