如何在OpenCL内核中使用三维数组?

and*_*ida 5 opencl multidimensional-array

我是OpenCL的新手.我使用OpenCL内核和1-D数据.但是当我试图传递一个三维指针时,它无法构建内核.具体来说,我得到的是CL_BUILD_PROGRAM_FAILURE.这是我正在尝试构建的内核的伪代码 -

__kernel void 3D_Test(__global float ***array)
{

x = get_global_id(0);
y = get_global_id(1);
z = get_global_id(2);

array[x][y][z] = 10.0;

}
Run Code Online (Sandbox Code Playgroud)

谁能让我知道代码有什么问题?提前致谢!

Mat*_*gro 6

这不是有效的OpenCL C(这就是为什么它不能编译),对于3D数组,你将不得不使用该数组的线性化版本,只需创建一个适当大小的正常数组(sizeX*sizeY*sizeZ)并将其编入索引这条路:

int index = x + y * sizeX + z * sizeX * sizeY;
Run Code Online (Sandbox Code Playgroud)

其他选项是使用带有clCreateImage3D的3D图像