opencl是否支持功能指针?

时间:2011-09-12 16:42:31

标签: opencl

有没有办法在OpenCL中使用C样式函数指针?

换句话说,我想用几个值填充一个OpenCL结构,以及指向OpenCL函数的指针。我不是在谈论从CPU功能到GPU功能,我说的是从GPU功能到GPU功能。

这可能吗?

---编辑---

如果没有,那还有办法吗?在CUDA中我们有对象继承,在4.0中我们甚至有虚函数。关于我能找到实现像这样的运行时调度的唯一方法是求助于if语句,这会很快变得难看。

2 个答案:

答案 0 :(得分:11)

来自OpenCL 1.1 specification

第6.8节(限制)(a):

  

指针的使用受到一定限制。以下规则适用:

     
      
  • 在程序中作为指针声明的内核函数的参数   必须使用__global,__ constant或__local限定符声明。
  •   
  • 甲   用__constant,__ local或__global限定符声明的指针   只能分配给__constant声明的指针,   __local或   分别是__global限定符。
  •   
  • 指向功能的指针不是   允许即可。
  •   

我使用的常用工作是使用宏。邪恶,但目前无法逃避。所以我通常会得到类似的东西:

#define FEATURENAME_START impl1_start
#define FEATURENAME_END   impl1_end

然后我在编译时将其注入内核或将其作为参数传递给OpenCL编译器。它不是通常意义上的运行时,但它仍然可以从主机的角度运行,即使不是设备。

答案 1 :(得分:3)

并且有未来的硬件支持计划,因此可能会有未来的扩展。