以下opencl代码无法编译。
typedef struct {
double d;
double* da;
long* la;
uint ui;
} MyStruct;
__kernel void MyKernel (__global MyStruct* s) {
}
错误信息如下。
line 11: error: kernel pointer arguments must point to addrSpace global, local, or constant
__kernel void MyKernel (__global MyStruct* s) {
^
正如你所看到的那样,我已经明确地用'__global'来证明这个论点,因为错误暗示我应该这样做。我做错了什么,如何解决这个错误?
显然这是在内核编译期间发生的,所以我没有在这里发布我的主机代码,因为它甚至没有比这更进一步。
感谢。
答案 0 :(得分:1)
我认为问题是你的结构中有指针,这是不允许的。你不能像这样从你的内核指向主机内存,因此内核参数结构中的指针没有多大意义。可变大小的数组在OpenCL中由cl_mem
主机对象备份,并且计算一个完整的参数,因此据我所知,您只能直接将可变大小的数组作为内核参数传递(并调整)当然,相应的工作单位数量。)
您可能更喜欢在结构中放置大小信息,并将数组拉出作为独立的内核参数。