OpenCL: Neuerscheinungen auf dem Buchmarkt

Literatur  –  3 Kommentare
Anzeige

OpenCL soll die Nutzung verschiedener paralleler Recheneinheiten vereinheitlichen. Allerdings existierte lange Zeit keine hinreichende Dokumentation. Mit OpenCL 1.2 scheint sich das zu ändern; zwei Neuerscheinungen auf dem Buchmarkt belegen das.

Mit ihrer Leistung kommen moderne Grafikkarten, meist von AMD oder Nvidia, locker an mittlere Cluster heran. So erreicht eine Nvidia GTX 680 in "single precision" über 3 Teraflops. AMDs Radeon HD 7970 kommt auf ähnliche Werte – ein Vielfaches aktueller x86-kompatibler Mehrkernprozessoren von Intel oder AMD. Ähnliche Werte erreicht man mit diesen nur durch das Zusammenschalten vieler Rechner oder Prozessoren.

Anzeige

Es mag deshalb nicht verwundern, dass ein Boom um GPUs jenseits traditioneller Grafikberechnungen ausgebrochen ist – man spricht von "GPGPU" (General Purpose GPU). Leider ist deren Rechenpower nicht ohne Weiteres aus normalen Programmen erreichbar – es handelt sich schließlich nicht um eine Intel-kompatible Architektur. Vielmehr müssen Programmdaten zunächst in den Speicherbereich der Grafikkarte gelangen. Die verfügt zudem meist über ein hierarchisches Konzept mit globalem Speicher und kleineren, für jede Recheneinheit direkt zugreifbaren Bereichen, das passend angesprochen werden muss. Und man muss Code für die Zielplattform übersetzen. Der Vorgang unterscheidet sich naturgemäß zwischen Nvidia und AMD.

Für den leichteren Zugriff kann der Nutzer auf maßgeschneiderte Bibliotheken und Compiler zurückgreifen. Momentan gibt es drei Hauptkonkurrenten. CUDA ("Compute Unified Device Architecture") hat Nvidia für die hauseigenen Grafikprozessoren entwickelt. Implementierungen sind unter anderem für Linux und Windows verfügbar. Microsofts DirectCompute richtet sich naturgemäß an Nutzer von Windows, ist jedoch nicht auf die Grafikprozessoren eines Herstellers beschränkt. Die "Open Computing Language" (OpenCL) schließlich ist ein offener, wie OpenGL von der Khronos Group unterhaltener Standard. Viele Firmen, darunter AMD und Nvidia, unterstützen ihn.

OpenCL vereinheitlicht die Nutzung verschiedener paralleler Recheneinheiten. Die Sprache ist als C-Dialekt für an Umgebungen des Höchstleistungsrechnens gewöhnte Nutzer leicht zu verstehen. Jedoch gab es bis vor Kurzem keine geeignete Dokumentation. Mit OpenCL 1.2 (November 2011) scheint sich das zu ändern; zwei Neuerscheinungen belegen das.

Benedict Gaster, David R. Kaeli, Lee Howes
Heterogeneous Computing with OpenCL

Waltham, MA 2011
Morgan Kaufman, 296 Seiten
€ 50,95
ISBN 978-0-1238-7766-6

"Heterogeneous Computing with OpenCL" von Benedict R. Gaster et. al. folgt dem Prinzip "Learning by doing" und erinnert damit an ein ausführliches Tutorial. Auf 277 Seiten besprechen die Autoren zunächst einige Grundlagen paralleler Programmausführung, darunter Threads und Shared Memory sowie das Message Passing Interface. Es folgt das "Hello World" der GPGPU-Welt – die Addition zweier Vektoren mit OpenCL. Anschließend geht das Buch auf die Ausführungsumgebung sowie den Kernel, Command Queues, Events und Memory Objects ein. Allein vier der 13 Kapitel beschäftigen sich mit Fallbeispielen wie Convolution und Video Processing, Histogrammen und einer Partikelsimulation. Dabei geht es unter anderem um die Optimierung der Speicherzugriffe, die eine wichtige Hürde bei der Effizienzsteigerung von OpenCL-Programmen darstellt. Außerdem berücksichtigt: die OpenCL C++ Wrapper API, das Rechnen in Double Precision (als optionale Erweiterung) sowie die Integration mit OpenGL-Code.

Immer wieder kommen Programmierbeispiele vor, die in ihrer vollen Länge gelegentlich mehrere Seiten umfassen. Die Erläuterung der Programme erfolgt in diesem Fall teilweise durch deren Kommentare. Da OpenCL parallele Berechnungen auf mehr als einer Architektur ermöglichen soll, behandeln die Autoren verschiedene Rechnerarchitekturen, von APUs bis zu GPGPUs. Nicht ganz überraschend taucht in den Erläuterungen immer wieder AMD-Hardware auf – zwei der fünf Autoren stammen aus dieser Hardwareschmiede, und OpenCL findet heute wohl am häufigsten Anwendung auf deren Grafikkarten. Das Buch sollten Interessierte in seiner Gesamtheit lesen.

Aaftab Munshi, Benedict Gaster, Timothy G. Mattson
OpenCL Programming Guide

Amsterdam 2011
Addison-Wesley Longman, 603 Seiten
€ 38,48
ISBN 978-0-3217-4964-2

Im "OpenCL Programming Guide" von Aaftab Munshi und anderen findet sich mit Benedict R. Gaster einer der Autoren des oben vorgestellten Bandes wieder. Allerdings ist dieser zweite mit 603 Seiten deutlich umfangreicher und eignet sich unter anderem als Nachschlagewerk. Ausführliche Codebeispiele spielen aufgrund der breiteren Auslegung des Buches jedoch eine weniger dominante Rolle. Hier fallen eher ausführlichere Zusammenstellungen und Beschreibungen eingebauter Funktionen oder Fehlercodes auf.

Der erste Teil widmet sich in 13 gut geschriebenen Kapiteln den Grundlagen. Neben der Ausführungsumgebung und der Sprache selbst besprechen die Autoren die eingebauten Funktionen, das Zusammenspiel von Programm- und Kernel-Objekten oder das Memory Management, Buffer und Event Handling. Der Interoperabilität mit OpenGL ist ein eigenes Kapitel gewidmet. Sogar eins zum Zusammenspiel mit Direct3D ist zu finden, ebenso eins zur Verwendung der C++ Wrapper API. Der zweite Teil stellt in neun Kapiteln Fallstudien vor. Neben Standardbeispielen wie der Matrixmultiplikation (erweitert um das Thema "dünn besetzte Matrizen") kommen Themen wie die Fast Fourier Transform (im Rahmen der Simulation eines Ozeans) oder der Zugriff auf OpenCL aus Python vor.

Wer einen Einstieg sucht, dem sei erstgenanntes Buch empfohlen, das sich an einem Wochenende durchlesen lässt. Der "OpenCL Programming Guide" bietet einen deutlich tieferen Einstieg, für die Beherrschung des Inhalts sollte man allerdings einige Tage mehr einplanen. (ane)

Anzeige