Определения предварительной обработки компилятора OpenCL?

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

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


person leinz    schedule 09.10.2009    source источник


Ответы (2)


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

-D MYMACRO понятно, -D MYMACRO=value тоже.

Полный список предопределенных макросов см. в спецификации OpenCL (раздел 6.9). Неполный список:

  • __FILE__
  • __LINE__
  • __OPENCL_VERSION__
person Bahbar    schedule 09.10.2009

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

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

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

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

person Quonux    schedule 10.07.2010