我在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 文件中定义您的结构。