Die OpenCL-Specifikation enthält bei der Übergabe von Makros als Kommandozeilenparameter eine Falle für alle welche die Syntax des gcc gewohnt sind. Während bei GCC -DMACRO[=WERT] angesagt ist, ist der Parameter in OpenCL mit einem Leerzeichen spezifiziert, also -D MACRO[=WERT].
Um OpenCL-Anwendungen auf der NVIDIA Platform zu tracen gibt es den NVIDIA Visual Profiler. Um sie auf der AMD Platform zu tracen gibt es den AMD APP Profiler. Problem gelöst – oder? Leider gibt es ein paar spezielle Situationen in denen das nicht reicht.
Da OpenCL sowohl auf CPUs als auch auf GPUs funktioniert kommt man recht schnell in die Situation in der mehr als ein OpenCL-Device verwendet werden will. Doch was passiert in diesem Fall mit dem kostbaren, weil wenigem, Grafikkartenspeicher? Die Funktion clCreateBuffer bietet ja leider keine Möglichkeit anzugeben auf welchem Device der Speicher allokiert werden soll.
Wenn ich von meinem Mac aus in einem Vim auf einem anderen Rechner programmiere beschwert sich gcc öfter mal über folgendes und weigert sich die Datei zu kompilieren:
some_source.cpp:519:2: error: stray ‘\302’ in program some_source.cpp:519:2: error: stray ‘\240’ in program
Jeder der das erste mal versucht in einem OpenCL-Kernel eine Headerdatei mit #include "header.h" einzubinden scheitert für gewöhnlich mit einer Fehlermeldung im Stiele von catastrophic error: cannot open source file "header.h". Grund ist, dass der Compiler normalerweise nicht im Quellverzeichnis nach der Headerdatei sucht. Man muss dem Befehl clBuildProgram explizit den Pfad per Compileroption -I /pfad/zu/den/headern/ übergeben.
Sollten dir die Artikel auf dieser Seite gefallen und du Bitcoin für ein interessantes Experiment halten, so schicke doch eine kleine Spende an 15xm3pCrZN3SpYKFHXMWGiAjki9aMyFkDP .