有没有办法在OpenCL中使用C风格函数指针?opencl支持函数指针吗?
换句话说,我想用几个值填充OpenCL结构,以及指向OpenCL函数的指针。我不是在谈论从CPU功能转到GPU功能,而是在谈论从GPU功能转到GPU功能。
这可能吗?
---编辑---
如果不是,那么有没有办法解决这个问题?在CUDA中我们有对象继承,在4.0中我们甚至有虚函数。关于我能找到的实现像这样的运行时分派的唯一方法是使用if语句,而且这样会变得非常快。
有没有办法在OpenCL中使用C风格函数指针?opencl支持函数指针吗?
换句话说,我想用几个值填充OpenCL结构,以及指向OpenCL函数的指针。我不是在谈论从CPU功能转到GPU功能,而是在谈论从GPU功能转到GPU功能。
这可能吗?
---编辑---
如果不是,那么有没有办法解决这个问题?在CUDA中我们有对象继承,在4.0中我们甚至有虚函数。关于我能找到的实现像这样的运行时分派的唯一方法是使用if语句,而且这样会变得非常快。
6.8节(限制)的(a):
指针的使用有所限制。以下规则适用:
- 参数传递给内核是指针 必须用__global,__constant或__local预选赛宣告程序中声明的函数。
- 与__constant,__local或__global限定符 声明的 指针只能分配与__constant, __local或分别 __global词声明的指针。
- 功能指针不允许 允许。
平时的工作围绕我用这与宏。邪恶,但目前不可避免。
#define FEATURENAME_START impl1_start
#define FEATURENAME_END impl1_end
我然后要么在编译的时候注入到这个内核或者它作为参数传递到OpenCL编译器:所以我通常喜欢的东西而告终。在通常意义上,它不是一个运行时间,但即使不是设备,它仍然可以从主机的角度来看运行时间。
AMD未来有计划为此提供硬件支持,因此可能会有未来的扩展。
据我所知,答案是否定的。我会尽力挖掘一个参考 – Flexo