Да, так как ваш звонок совпадает с подписью:
https://github.khronos.org/OpenCL-CLHPP/classcl_1_1_kernel.html
template <cl_int name> typename
detail::param_traits<detail::cl_kernel_work_group_info, name>::param_type getWorkGroupInfo(const Device& device, cl_int* err = NULL) const;
Похоже, что param_traits
, созданный с помощью макросов, не объявлен для CL_KERNEL_GLOBAL_WORK_SIZE
. Это было бы ошибкой в заголовках. ( Проблема GitHub, созданная OP )
Для некоторых записей
здесь
пропущены записи
здесь
.
Кроме того, вы можете использовать версию, возвращающую код ошибки, и информацию через выходной параметр, который должен обойти проблему:
template<typename T>
cl_int getWorkGroupInfo(const Device &device, cl_kernel_work_group_info name, T *param) const;
Звонок может выглядеть так:
cl::array<size_t, 3> result;
kernel.getWorkGroupInfo<decltype(result)>(device, CL_KERNEL_GLOBAL_WORK_SIZE, result);
Мой вопрос к вам будет: Вы сами пробовали? Результат не соответствует вашим ожиданиям?
Вы получили CL_INVALID_VALUE?
[...] на пользовательском устройстве, предоставленном устройством, или встроенное ядро на устройстве OpenCL, предоставленном устройством.
Если устройство не является пользовательским устройством или ядро не является встроенным ядром , clGetKernelArgInfo возвращает ошибку CL_INVALID_VALUE.
См. Спецификация OpenCL 1.2 , страницы 14 и 15:
Встроенное ядро: Встроенное ядро - это ядро, которое выполняется на устройстве OpenCL или на другом устройстве.
устройство с помощью аппаратного обеспечения с фиксированной функцией или встроенного программного обеспечения. Приложения могут запрашивать встроенные ядра
поддерживается устройством или пользовательским устройством. Программный объект может содержать только ядра, написанные на
OpenCL C или встроенные ядра, но не оба. Смотрите также Ядро и Программа.
Пользовательское устройство: Устройство OpenCL, которое полностью реализует среду выполнения OpenCL, но не
программы поддержки, написанные на OpenCL C. Пользовательское устройство может быть специализированным
программируемое оборудование, которое очень энергоэффективно и эффективно для направленных задач или
аппаратные средства с ограниченными программируемыми возможностями, такие как специализированные DSP. Пользовательские устройства
не соответствует OpenCL. Пользовательские устройства могут поддерживать онлайн-компилятор. Программы для
пользовательские устройства могут быть созданы с помощью API-интерфейсов среды выполнения OpenCL, которые позволяют программам OpenCL
создаваться из исходного кода (если поддерживается онлайн-компилятор) и / или двоичного файла, или из встроенных ядер
поддерживается устройством. См. Также Устройство.
Для обычных ядер и устройств стандарт ограничивает размер рабочей группы (свойство устройства), в то время как глобальный размер ограничен только диапазоном используемых size_t
. См. clEnqueueNDRangeKernel .