2011-09-12 46 views
9

有没有办法在OpenCL中使用C风格函数指针?opencl支持函数指针吗?

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

这可能吗?

---编辑---

如果不是,那么有没有办法解决这个问题?在CUDA中我们有对象继承,在4.0中我们甚至有虚函数。关于我能找到的实现像这样的运行时分派的唯一方法是使用if语句,而且这样会变得非常快。

+1

据我所知,答案是否定的。我会尽力挖掘一个参考 – Flexo

回答

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编译器:所以我通常喜欢的东西而告终。在通常意义上,它不是一个运行时间,但即使不是设备,它仍然可以从主机的角度来看运行时间。

3

AMD未来有计划为此提供硬件支持,因此可能会有未来的扩展。