在OpenCL中从GPU返回float2值

时间:2012-06-15 16:13:49

标签: 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;  
    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打印出正确的结果,但主机端的结果不正确。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

可以在主机端使用

cl_float2数据类型来访问float2数据, 但我的问题还是别的。

全球ID不匹配, 我有两个全局ID,第3行应该是int X = get_global_id(0) + get_global_id(1)