有没有办法在OpenCL中使用C样式函数指针?
换句话说,我想用几个值填充一个OpenCL结构,以及指向OpenCL函数的指针。我不是在谈论从CPU功能到GPU功能,我说的是从GPU功能到GPU功能。
这可能吗?
---编辑---
如果没有,那还有办法吗?在CUDA中我们有对象继承,在4.0中我们甚至有虚函数。关于我能找到实现像这样的运行时调度的唯一方法是求助于if语句,这会很快变得难看。
答案 0 :(得分:11)
第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)
并且有未来的硬件支持计划,因此可能会有未来的扩展。