Diskussion zum Artikel "OpenCL: Vom naiven zum aufschlussreicheren Programmieren"

 

Neuer Artikel OpenCL: Vom naiven zum aufschlussreicheren Programmieren :

Dieser Beitrag konzentriert sich auf bestimmte Optimierungsmöglichkeiten, die sich eröffnen, wenn die zugrunde liegende Software, auf der das OpenCL-Kernel ausgeführt wird, zumindest ein bisschen berücksichtigt wird. Die Zahlen, die wir hier erhalten, sind alles andere als Spitzenwerte, doch auch sie lassen schon darauf schließen, dass mithilfe der hier und jetzt verfügbaren Ressourcen (die OpenCL-API in der Form, in der sie von den Entwicklern des Terminals implementiert wurde, erlaubt nicht die Steuerung bestimmter Parameter, die für die Optimierung wichtig sind, insbesondere die Größe von Arbeitsgruppen) der Performance-Gewinn über die Ausführung des Host-Programms beträchtlich ist.

Im Allgemeinen unterscheiden sich Speichermodelle je nach Computerplattform deutlich voneinander. Beispielsweise unterstützen alle modernen CPUs automatisches Daten-Caching im Gegensatz zu GPUs, bei denen das nicht immer der Fall ist.

Um die Übertragbarkeit des Codes zu gewährleisten, wird in OpenCL ein abstraktes Speichermodell umgesetzt, an dem sich Programmierer und Hersteller, die dieses Modell auf realer Hardware umsetzen müssen, richten können. Der Speicher, wie er in OpenCL definiert wird, wird in der nachfolgenden Abbildung beispielhaft illustriert:

Das Speichermodell von OpenCL

Abb. 1. Das Speichermodell von OpenCL

Sobald die Daten vom Host an das Device übertragen werden, werden sie im globalen Speicher des Devices gespeichert. Jegliche Daten, die in entgegengesetzter Richtung übertragen werden, werden ebenfalls im globalen Speicher gespeichert (diesmal allerdings im globalen Speicher des Hosts). Das Schlüsselwort __global (zwei Unterstriche!) ist ein Modifikator, der darauf hindeutet, dass Daten, die einem bestimmten Pointer entsprechen, im globalen Speicher gespeichert werden.

Autor: Sceptic Philozoff

Grund der Beschwerde: