OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *



我在C++中定义了一个结构,在循环中构建了一个向量,并使用clCreateBuffer((函数创建了它的缓冲区,然后将其传递给我的CL内核。我的内核代码调用 funcA,其中缓冲区作为参数传递。然后我使用缓冲区并调用 funcB 给出数组作为参数。

typedef struct a {
float array[16];
unsigned int id;
} BUFFER_TYPE;
float RD_INLINE funcB(__global float4* m)
{
..
}
bool RD_INLINE funcA(__global BUFFER_TYPE* buffer)
{
..
float scale = funcB(buffer[0].array);
..
}

我收到" 警告:将'float __global[16]'传递给类型为'__global float4 *'"的参数的不兼容指针类型。我该如何解决此问题?如何在此处进行类型转换?

对于float4数组应包含 4 个元素:float array[4]。您可以使用CL/cl_platform.h中的cl_float4,这将为您正确定义。 在此处查看有关 OpenCL 载体类型的更多信息。

如果警告仍然存在,那么您也需要使用float4而不是float array[4]cl_float4在 cl 文件中定义您的结构。

最新更新