OpenCL内核无法编译请求地址空间限定符

时间:2012-09-24 14:22:59

标签: opencl

以下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'来证明这个论点,因为错误暗示我应该这样做。我做错了什么,如何解决这个错误?

显然这是在内核编译期间发生的,所以我没有在这里发布我的主机代码,因为它甚至没有比这更进一步。

感谢。

1 个答案:

答案 0 :(得分:1)

我认为问题是你的结构中有指针,这是不允许的。你不能像这样从你的内核指向主机内存,因此内核参数结构中的指针没有多大意义。可变大小的数组在OpenCL中由cl_mem主机对象备份,并且计算一个完整的参数,因此据我所知,您只能直接将可变大小的数组作为内核参数传递(并调整)当然,相应的工作单位数量。)

您可能更喜欢在结构中放置大小信息,并将数组拉出作为独立的内核参数。