Определения предварительной обработки компилятором OpenCL? - PullRequest
2 голосов
/ 09 октября 2009

Я занимаюсь разработкой кода OpenCL на Snow Leopard и понимаю, что своевременная компиляция OpenCL выполняется Clang / LLVM. Используется ли препроцессор C вообще? Есть ли способ установить определения предварительной обработки с помощью компилятора? Какие определения существуют?

Я бы хотел, чтобы код знал, скомпилирован ли он для процессора или графического процессора, чтобы я, например, мог использовать операторы printf для отладки.

Ответы [ 2 ]

5 голосов
/ 10 октября 2009

API clBuildProgram принимает аргументы компилятора (параметр const char * options).

-D MYMACRO понятно, равно как и -D MYMACRO=value.

Что касается предопределенных макросов, полный список см. В спецификации OpenCL (раздел 6.9). Неисчерпывающий список:

  • __FILE__
  • __LINE__
  • __OPENCL_VERSION__
1 голос
/ 11 июля 2010

Вы также можете использовать OpenCL «препроцессор» для определения определений (как в C):

#define dot3(x1, y1, z1, x2, y2, z2) ((x1)*(x2) + (y1)*(y2) + (z1)*(z2))

(обратите внимание на квадратные скобки, они важны, потому что вы можете вставить любое выражение в переменные и выражение будет правильно оценено)

Это помогает повысить скорость вашего приложения.

...