OpenCL-Programmierung – eine deutschsprachige Einführung

An dieser Stelle möchte ich Ihnen eine wirklich hervorragend geschriebene deutschsprachige Einführung in die OpenCL-Programmierung vorstellen:

Praktikumsanleitung GPU Computing (Manuel Hohmann, 12. Januar 2012)

Wie der Titel schon vermuten lässt, erfolgt die Einführung vorwiegend praxisorientiert mit einer Vielzahl von Source-Code-Beispielen.

SSE (Streaming SIMD Extensions)-Programmierung

Am Einsatz der Streaming SIMD Extensions (kurz SSE) führt bei der Entwicklung von Computerspielen heutzutage kein Weg mehr vorbei. Betrachten wir als konkretes Beispiel einmal die Addition zweier 4-dimensionaler Vektoren. Ohne Verwendung der SSE-Befehlssatzerweiterung sind hierfür vier Additionen (Instruktionen) erforderlich:

x3 = x1 + x2;
y3 = y1 + y2;
z3 = z1 + z2;
w3 = w1 + w2;

Dank des SSE-Befehlssatzes lassen sich die vier einzelnen Additionen jedoch mit einer einzigen Instruktion durchführen (Single Instruction, Multiple Data kurz SIMD), wodurch ein enormer Performance-Gewinn erzielt werden kann - jedenfalls dann, wenn eine große Anzahl derartiger Berechnungsschritte erforderlich ist.
Bevor die eigentlichen Berechnungen durchgeführt werden können, müssen wir die einzelnen Vektorkomponenten (jeweils 32-Bit) zunächst in einem 128-Bit Datentypen kopieren (__m128 für Fließkommaberechnungen, __m128i für Ganzzahlberechnungen).
Für den Umgang mit diesen Datentypen und die Durchführung von Berechnungen stellt uns der C/C++ Compiler sogenannte SSE-Intrinsics zur Verfügung. Betrachten wir hierzu einige Beispiele:

4 float-Variablen (x, y, z und w) zu einem 128-Bit-Datentypen zusammenfassen:

typedef __m128 vec4;

vec4 v1 = _mm_set_ps(w, z, y, x)


Addition:

vec4 v1, v2, v3;

v3 = _mm_add_ps(v2, v1);


Subtraktion:

vec4 v1, v2, v3;

v3 = _mm_sub_ps(v2, v1);


4 float-Variablen aus einem 128-Bit-Datentypen auslesen:

__declspec(align(16)) float result[4];

_mm_store_ps(result, v3);


Mithilfe der nachfolgenden weiterführenden Links sollte es nun kein Problem darstellen, sich in die Geheimnisse der SSE-Programmierung einzuarbeiten:

Kurz Notiert: Doom 3 Source Code zum Download freigegeben

Für Hobby-Entwickler, Modder und Anhänger der OpenGL/OpenAL-Programmierung dürfte gestern ein Tag der Freude gewesen sein. Nach längerer Wartezeit ist es nun soweit, denn der komplette Source Code zum Kult-Shooter Doom 3 steht endlich zum Download bereit.

Hier der Link zum Download:



E-Books und Tutorials über die C/C++-Programmierung – ein Update

In einem früheren Beitrag haben wir Ihnen bereits zwei umfangreiche und kostenlos verfügbare E-Books zum Thema C/C++-Programmierung vorgestellt. Nun ist es an der Zeit für ein kleines Update.



Bis zur vollständigen Fertigstellung wird zwar noch einige Zeit vergehen, dennoch stellt das Wikibook C++-Programmierung bereits heute eine gute Einführung in die Grundlagen der C++-Programmierung dar.



Auch der C++-Kurs von Wolfgang Schröder richtet sich in erster Linie an einen Programmieranfänger. Positiv hervorzuheben sind die vielen Programmbeispiele, mit denen die einzelnen Aspekte der Sprache veranschaulicht werden, sowie die Übungsaufgaben und Lösungsvorschläge.

OpenCL basierte Rigid Body Physik Simulation

Im Rahmen seiner Master Thesis Real-Time Rigid Body Interactions (Norwegian University of Science and Technology / NTNU, 2011) entwickelte Fredrik Fossum eine für GPUs optimierte OpenCL basierte Rigid-Body-Physik-Simulation.

Wichtige Teile dieser Arbeit basieren auf dem GPU-Gems-3-Artikel Real-Time Rigid Body Simulation on GPUs von Takahiro Harada: