我在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);
..
}
我得到了 "warning: incompatible pointer types passing 'float __global[16]' to parameter of type '__global float4 *'"。我如何解决这个问题?我如何在这里进行类型转换?
对于 float4
数组应该有4个元素。float array[4]
. 你可以使用 cl_float4
从 CL/cl_platform.h
它将为你正确地定义这些类型。查看更多关于OpenCL向量类型 此处.
如果警告仍然存在,那么你将需要在cl文件中使用以下方法定义你的结构 float4
而不是 float array[4]
或 cl_float4
.