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

如何在OpenCL内核中使用三维数组?,opencl,multidimensional-array,Opencl,Multidimensional Array,我是OpenCL的新手。我曾使用OpenCL内核处理一维数据。但是当我试图传递一个3-D指针时,它无法构建内核。具体地说,我的构建程序失败了。这是我试图构建的内核的伪代码- __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; } 有人能告诉我代码出了什么问题吗?提前谢

我是OpenCL的新手。我曾使用OpenCL内核处理一维数据。但是当我试图传递一个3-D指针时,它无法构建内核。具体地说,我的构建程序失败了。这是我试图构建的内核的伪代码-

__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;

}

有人能告诉我代码出了什么问题吗?提前谢谢

您必须首先以某种方式确保您的阵列在各个级别都有足够的空间

您的数组是如何声明或分配的?

这是无效的OpenCL C(这就是它不编译的原因),对于3D数组,您必须使用该数组的线性化版本,只需创建一个大小合适的普通数组(sizeX*sizeY*sizeZ)并按以下方式对其进行索引:

int index = x + y * sizeX + z * sizeX * sizeY;

另一个选项是使用clCreateImage3D的3D图像

我会在收到回复时编辑答案,所以答案应该是«真实»的…:)@我已经在主机代码中分配了它们。但我想知道这是否是在内核中使用3-D数组的问题。因为当我传递'*array'并使用'array[x]=10'时,代码是相同的,所以编译没有问题。语法有什么问题吗?我在OpenCL中找不到3D数组的示例。具体地说,我得到了“CL_BUILD_PROGRAM_FAILURE”错误:(您应该检查构建日志,使用clGetProgramBuildInfo获取它。您还可以查看OpenCL 1.1中支持的Image3D类型,它可以让您非常轻松地存储和传递3D数组。