You are here

Makros als OpenCL-Kommandozeilenparameter

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].

Die AMD und NVIDIA-Platformen kommen wunderbar mit der vom GCC gewohnten, allerdings nicht standardkonformen, Syntax zurecht. Apple ist hier wählerischer, und so bekommt man bei Verwendung der von GCC gewohnten Variante mitunter den Fehlercode CL_INVALID_BUILD_OPTIONS. In PyOpenCL wir daraus dann folgende Fehlermeldung:
pyopencl.RuntimeError: clBuildProgram failed: invalid build options -
Leider geht aus der Fehlermeldung nicht so exakt hervor, was den Compiler genau stört. Tatsächlich ist dies auch gar nicht so einfach zu beantworten, denn der Compiler scheint tatsächlich nur ein Problem zu haben, wenn die Kommandozeile nach einen -DFOO endet. Ein -DFOO -DBLA verarbeitet er völlig erwartungsgemäß.

Natürlich liegt der Fehler hier aber beim Anwender, eine standardkonforme Spezifikation der Macros funktioniert immer. Ungeschickt ist natürlich das etwas inkonsistente Handling der Parameter, welches es mitunter schwierig macht den Fehler zu finden.

Sollten dir die Artikel auf dieser Seite gefallen und du Bitcoin für ein interessantes Experiment halten, so schicke doch eine kleine Spende an 14pQyjx5EFQCwPBkXMTz5nTcfPsnjHmWqA.