Поддерживает ли opencl указатели функций? - PullRequest
9 голосов
/ 12 сентября 2011

Есть ли способ использовать указатели функций в стиле C в OpenCL?

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

Возможно ли это?

--- РЕДАКТИРОВАТЬ ---

Если нет, то есть ли способ обойти это? В CUDA у нас есть наследование объектов, а в 4.0 у нас даже есть виртуальные функции. Единственный способ найти способ реализовать диспетчеризацию во время выполнения - это прибегнуть к операторам if, и это будет очень быстро и ужасно.

Ответы [ 2 ]

12 голосов
/ 12 сентября 2011

Из спецификации 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. Это не совсем время выполнения в обычном смысле, но оно все же может быть временем выполнения с точки зрения хоста, даже если это не устройство.

3 голосов
/ 08 октября 2011

У AMD есть планы на будущее по аппаратной поддержке, поэтому для них могут быть расширения в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...