【发布时间】:2021-08-12 04:15:28
【问题描述】:
所以现在我正在尝试使用共享虚拟内存将指针的指针传递到 OpenCL 2.1 内核中,从我读过的内容来看,这应该是可能的,但是当我尝试构建内核时,我得到以下错误:
kernel parameter cannot be declared as a pointer to a pointer
__kernel void MyKernel(__global float** doubleP) {
^
1 error generated.
error: Clang front-end compilation failed!
Frontend phase failed compilation.
Error: Compiling CL to IR
那么将指针作为内核参数传递给指针的正确方法是什么
【问题讨论】:
-
为什么需要这样做?这是不可能的原因——在 OpenCL 端,指针位于设备的地址空间中,而在主机端,它们位于主机的地址空间中。没有合乎逻辑的方式将它们等同起来。
-
@Mack 我正在尝试编写反向传播算法,这意味着我必须处理一些相当复杂的上标含义,因此我希望能够编写类似 P[ i ] 的东西[ j ][ k ] 而不是 P[ (i * n1)+(j * n2) + k],而且我不能使用数组,因为它们不能存储足够的数据。
-
使用像这样的间接数组比平面数组消耗 更多 内存,因为每个间接级别都需要所有指针的内存(如果这很重要,它会更慢) .您是否尝试过使用平面阵列?您可以轻松地将索引计算抽象为宏。没有什么可以让您取消引用设备上主机内存中的指针。