Компилятор OpenCL выполняет предварительную обработку определений?
-
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))
(обратите внимание на квадратные скобки, они важны, потому что вы можете вставить любое выражение в переменные, и выражение будет правильно вычислено)
Это помогает повысить скорость работы вашего приложения.