2011-07-18 26 views
5

我是OpenCL的新手。我曾与OpenCL内核一起使用过一维数据。但是当我试图传递一个3-D指针时,它无法构建内核。具体来说,我得到CL_BUILD_PROGRAM_FAILURE。下面是内核,我试图建立的伪代码 -如何在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; 

} 

任何人都可以给我什么是错的代码的想法?提前致谢!

+0

您应该检查生成日志,与clGetProgramBuildInfo得到它。 –

+0

您还可以看看OpenCL 1.1支持的Image3D类型,它可以让您轻松存储和传递3D数组。 –

回答

5

这是无效的OpenCL C(这就是为什么它不能编译),对于3D数组,你将不得不使用该数组的linearlized版本,只需创建一个适当大小的常规数组(sizeX * sizeY * sizeZ )和索引这样说:

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

另一种选择是使用3D图像与clCreateImage3D

+0

@ Matias ..感谢您的帮助。它的工作! – andromida

0

你必须首先要保证在某种程度上你的阵列足够的空间,各级...

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

+0

我会在回复时编辑答案,所以它应该是一个«真正的»... :) – Macmade

+0

@Macmade ..我已经在主机代码中分配了它们。但我想知道这是否是在内核中使用3-D数组的问题。因为当我传递'* array'并使用'array [x] = 10'时相同的代码,编译没有问题。语法有什么问题吗?我没有发现在OpenCL中使用3-D数组。 – andromida

+0

具体来说,我得到'CL_BUILD_PROGRAM_FAILURE'错误:( – andromida