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

问题描述 投票:0回答:1

我在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 *'"。我如何解决这个问题?我如何在这里进行类型转换?

c++ casting opencl
1个回答
1
投票

对于 float4 数组应该有4个元素。float array[4]. 你可以使用 cl_float4CL/cl_platform.h 它将为你正确地定义这些类型。查看更多关于OpenCL向量类型 此处.

如果警告仍然存在,那么你将需要在cl文件中使用以下方法定义你的结构 float4 而不是 float array[4]cl_float4.

© www.soinside.com 2019 - 2024. All rights reserved.