1

以下 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' 限定了这个参数,因为错误表明我应该这样做。我做错了什么,我该如何解决这个错误?

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

谢谢。

4

1 回答 1

2

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

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

于 2012-09-25T00:13:30.973 回答