从OpenCL中的GPU复制float2值

从OpenCL中的GPU复制float2值,opencl,gpu,Opencl,Gpu,我想将float2值复制回CPU。GPU端的结果是正确的,但CPU端的一些结果是不正确的。谁能帮帮我吗 GPU代码 #pragma OPENCL EXTENSION cl_amd_printf : enable __kernel void matM(__global float* input, int width, int height, __global float2* output){ int X = get_global_id(0); float2 V;

我想将float2值复制回CPU。GPU端的结果是正确的,但CPU端的一些结果是不正确的。谁能帮帮我吗

GPU代码

    #pragma OPENCL EXTENSION cl_amd_printf : enable
__kernel void matM(__global float* input, int width, int height, __global float2* output){    
    int X = get_global_id(0);
    float2  V;  
    V.x = input [X];
    V.y = input [X];
    output[X] = V;  
    printf("%f\t %f\n",output[X].x,output[X].y);
  }
CPU代码

output = clCreateBuffer(context, CL_MEM_WRITE_ONLY, sizeof(cl_float2) * wid*ht, NULL, NULL);
clEnqueueReadBuffer( commands, output,CL_TRUE, 0, sizeof(cl_float2) * wid *ht, results, 0, NULL, NULL );
GPU内核中的printf打印正确的结果,但主机端的结果不正确

感谢您的帮助,cl_float2数据类型可在主机端用于访问float2数据, 但我的问题是别的

全局ID不匹配,
我有两个全局ID,第3行应该是int X=get\u global\u id0+get\u global\u id1。

我们可以看到您实际调用代码的代码吗?也许你们并没有正确地设置一个参数或类似的参数。你们如何分配变量来保存来自GPU的数据?