你有很多真实的理由想要这样做。我们的原因是我们有一个可变长度数据结构的列表,我们希望能够改变其中一个元素的大小而不必重新复制它们。
以下是我尝试过的一些事情:
还有其他人有其他想法吗?尝试这样做的经历呢?是否有最少的hacky方式?为什么呢?
答案 0 :(得分:0)
到3: OpenCL 1.1规范第193页说“程序中对内核函数的参数不能声明为指向指针的指针。”
包含指向指针的指针(指向缓冲区对象的指针)可能不会严格阅读这句话,但它符合精神:没有指向缓冲区对象的指针可以作为参数从主机代码传递给内核,即使它们是'隐藏在用户定义的结构中。
我选择选项5:不要使用可变大小的数据结构。如果你有任何方法可以通过任何方式使它们保持恒定大小。它会让你的生活变得更轻松。确切地说,没有“可变尺寸结构”。每个结构定义都会生成常量大小的结构,因此如果大小已更改,则结构本身已更改,因此需要另一个mem对象。传递给内核函数的每个指针都必须有一个类型。
答案 1 :(得分:0)
除了sharpnelis回答选项5:
如果对象具有相似的大小,则可以使用最大可能对象大小的联合。但请确保使用显式对齐。传递第二个缓冲区,标识变量大小的对象在静态大小的联合缓冲区中每个对象中使用的联合。
当使用opencl lib代码时,我只回到了这个,它只允许一个任意类型的变量数组。我只是使用cl_float2
来传递两个浮点数。由于cl_floatN
类型是作为联合实现的 - 对于构建类型有效的方法也适用于您。