Компилятор OpenCL выполняет предварительную обработку определений?

StackOverflow https://stackoverflow.com/questions/1545510

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

-D MYMACRO понимается, так же как и -D MYMACRO=value.

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

  • __FILE__
  • __LINE__
  • __OPENCL_VERSION__

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top