Из спецификации OpenCL 1.1 :
Раздел 6.8 (Ограничения) (a):
Использование указателей несколько ограничено. Применяются следующие правила:
- Аргументы для функций ядра, объявленных в программе, которые являются указателями
должны быть объявлены с помощью спецификатора __global, __constant или __local.
- A
указатель объявлен с квалификатором __constant, __local или __global
может быть назначен только указателю, объявленному с __constant,
__ локально или
__глобальный классификатор соответственно.
- Указатели на функции не являются
разрешено .
Обычный обходной путь, который я использую для этого, - с макросами. Зло, но в настоящее время неизбежно. Поэтому я обычно получаю что-то вроде:
#define FEATURENAME_START impl1_start
#define FEATURENAME_END impl1_end
Затем я либо внедряю это в ядро во время компиляции, либо передаю его в качестве аргумента компилятору OpenCL. Это не совсем время выполнения в обычном смысле, но оно все же может быть временем выполнения с точки зрения хоста, даже если это не устройство.