Graphische Koprozessoren

 

Graphische Koprozessoren (Graphical Processing Units, GPU) gehören heute zur Standardausrüstung vieler leistungsstarker Grafikkarten, die in den PCs verbaut werden. Sie besitzen in Hardware implementierte Algorithmen zur Berechnung von 3-D-Grafik, von denen vor allem Spiele profitieren. Analog zur Grafikfähigkeit wurde in den letzten Jahren für PC-Spiele eine umfangreiche Physikfunktionalität nachgerüstet, da viele Hersteller von PC-Spielen in diese Richtung ebenfalls Anforderungen entwickelt haben.

Der Vorteil von Algorithmen in maßgeschneiderter Hardware ist ihre hohe Effizient und Schnelligkeit. Außerdem profitieren Grafikanforderungen von der Parallelisierbarkeit der Tasks; diesem kann in separaten Prozessoren ebenfalls Rechnung getragen werden. Aufgrund der Ähnlichkeit der Anforderungen haben die Grafik- und vor allem Physikfähigkeit zunehmend das Interesse der Astrophysiker (und natürlich auch anderer Naturwissenschaftler) auf sich gezogen.

Für die gängigen Grafikkarten sind die Schnittstellen zum Zugang der Funktionen gut dokumentiert und können von den Programmierern gut angesprochen werden. Tatsächlich gibt es schon viele Projekte, die mit Hilfe von Grafikprozessoren gestemmt werden konnten.

Anwendungsbeispiele für numerische Rechnungen mit GPUs aus der Astronomie sind

  • (Magneto-)Hydrodynamik
  • N-Körper-Rechnung
  • Gravitationslinseneffekte
  • Strahlungstransport
  • U.v.m.

Die erzielbare Leistungssteigerung kann je nach Projekt bis zu ein oder zwei Zehnerpotenzen betragen.

GPUs lassen sich gruppieren (clustern). Auf diese Weise bekommen die Forscher für vergleichsweise geringes Budget viel Rechenleistung. Speziell für GPU-Cluster wurden zwischenzeitlich Pakete entwickelt, z.B. in [1] wird eine Software namens GAMER vorgestellt, die das in einem der vorigen Zirkulare vorgestellte Adaptive Mesh Refinement im GPU-Cluster realisiert.

Manche dieser Pakete sind frei zugänglich. GAMER zum Beispiel wird von anderen Wissenschaftlern adaptiert und um weitere Funktionen ergänzt. Zwischen den Gruppen findet in Fragen der verwendeten Algorithmen ein reger Austausch statt.

Programmierung

Für die Ansteuerung der GPU stehen dedizierte Entwicklungsumgebungen zur Verfügung. Zwei Beispiele:

  • OpenCL basiert auf der Sprache C. Im Vergleich zu C wurde einige Sprachelemente (Datentypen wie Vektoren, Bilder, Matrizen sowie darauf operierende Funktionen) hinzugefügt, die die parallele Ausführung von Code unterstützen. Auf der anderen Seite wurde aber auch einige Sprachelemente von C eingespart. OpenCL ist ein offener Standard und kann für diverse GPUs (nvidia, ARM, Intel, S3, VIA, etc.) angepaßt werden.
  • C for CUDA basiert ebenfalls auf der Sprache C, ist allerdings nvidia-proprietär. CUDA ist die Bezeichnung der API des Grafikkartenherstellers.

Quellen:

[1]: Schive, H., Tsai, Y., & Chiueh, T. 2010, ApJS, 186, 457
[2]: astro-ph: 1007.3818v1