Der beste Einstieg in CUDA

March 13, 2011

“Cuda by Example” ist der perfekte Start in CUDA für Einsteiger. Aber auch manche Fortgeschrittene und Profis könnten Ihre Freude an den guten Erklärungen und Beispielen haben.

Es gibt diese Bücher - gerade bei neuen Themen - bei denen man den Eindruck hat, die Autoren haben die Dokumentation abgeschrieben und nur ein wenig ausgeschmückt. Das ist hier definitiv nicht der Fall.

Der Buchtitel “CUDA by Example” sagt es schon: Anhand von Beispielen soll gelernt werden. Und da numerische Algorithmen, wie z. B. Vektoraddition, Matrizen-Multiplikation zwar auch behandelt werden, aber von vielen nicht als “Spaß” empfunden werden, haben die Autoren  graphische Beispiele zusammengestellt: Julia-Mengen, einen einfachen Ray Tracer, Wärmeübertragung.

Parallele Algorithmen waren mal ein “esoterisches” Thema für theoretische Informatiker. Mit CUDA kann jetzt jeder massiv parallel programmieren und 10- bis zu 100-fache Geschwindigkeitssteigerungen erreichen. Die Parallelität wird schrittweise, langsam und behutsam eingeführt und immer ausführlich erklärt. Ausgangspunkt ist sequentieller Code für die CPU, der dann umgeformt wird. 

Das Ziel des Buches, ist es, dem Leser die Grundlagen von CUDA beizubringen, damit er selber darin entwickeln kann. Die Theorie paralleler Algorithmen wird nicht behandelt, wird aber im Rahmen des Buches auch nicht benötigt. Als parallele Lektüre und als Nachschlagewerk benötigt man den “NVIDIA CUDA Programming Guide” und die “NVIDIA CUDA Best Practices”, die beide von NVIDA mit dem CUDA Toolkit mitgeliefert werden.

Allerdings ist es ein Einsteigerbuch und die folgenden fortgeschrittenen Themen werden nicht behandelt.

  • Performance-Optimierung von Kerneln
  • Optimierung von Speicherzugriffen (“coalescing”)
  • CUDA Arrays, 3D-Speicher
  • CUDA Hardware im Detail, z. B. Warp-Scheduling
  • Vermeidung von Divergenz
  • Neuerungen bei Fermi, z. B. Caching
  • CUDA Driver API

Fortgeschrittene Kenntnisse in C oder C++ sind notwendig, d.h. man sollte schon Programme geschrieben und gelesen haben. Auch sind Erfahrungen auf der Kommandozeile oder einer C-Entwicklungsumgebung von Vorteil. Grundwissen über parallele Algorithmen ist nicht schlecht, aber nicht unbedingt notwendig.

Und hier noch eine stichwortartige Auflistung, um die Bewertung 4 von 5 zu rechtfertigen.

Positiv

  • Gute Beispiele, gute Erklärungen, langsames Tempo
  • Die Autoren benutzen erst Grid-Blöcke und im zweiten Schritt Thread-Blöcke, um Parallelität einzuführen. Das ist eine gute Idee und das pädagogisch Sinnvollste. 
  • Schöne Beispiele zum Anschauen, wie z. B. Julia-Mengen, Ray Tracer als Beispiel für konstanten Speicher, Shared Memory und Bitmaps, Wärmeübertragung für 1D- und 2D-Texturen
  • Schöne Einleitung mit Historie und Anwendungsbeispielen
  • Installation des Treibers, des Toolkits und des SDKs werden erklärt
  • Der Quellcode ist herunterladbar und funktioniert (meistens) auch
  • Gutes Beispiele für atomare Operationen im Anhang (Hash-Tabelle)

Negativ

  • Der Code wurde immer vollständig abgedruckt. Hier kommt es im Laufe des Buchs zu Wiederholungen. Für Einsteiger mag diese Entscheidung richtig sein, den Fortgeschrittenen nervt es, eine Funktionsdefinition mehr als einmal lesen zu müssen. Ganz schlimm ist dieses bei den Ereignisse / Events, wenn der gesamte Ray Tracer noch zweimal abgedruckt wird (einmal mit globalem, einmal mit konstantem Speicher).
  • Sehr schnell veraltende Informationen wurden abgedruckt, z. B. die Liste der Devices auf S. 15f.
  • Die Dateinamen der Beispielprogramme stehen nicht im Buch. Man muss daher manchmal ein wenig suchen.
  • Abschnitt 3.3 „Querying Devices“ ist zu diesem Zeitpunkt zu ausführlich. Das will man nicht alles  wissen. Man kann auch zu diesem Zeitpunkt mit 95% der Begriffe nichts anfangen. Da hätte auch ein Verweis zur Dokumentation genügt.
  • Für Anfänger wäre ein kurzer Abschnitt über grundlegende Design-Patterns bzw. parallele Algorithmen sehr praktisch.

Fazit: Wer CUDA lernen will, findet in diesem Buch die beste Einleitung, die es momentan gibt.

  • Sanders, Kandrot
  • Cuda by Example
  • Addison Wesley
  • 2010

Siehe auch die Renzension bei Amazon.