0

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正しい結果を出力しますが、ホスト側の結果は正しくありません。

助けてくれてありがとう

4

1 に答える 1

0

cl_float2データ型はホスト側でfloat2データにアクセスするために使用できますが、私の問題は別のものでした。

グローバルIDに不一致があり、2つのグローバルIDがあり、3行目はであるはずint X = get_global_id(0) + get_global_id(1)です。

于 2012-06-17T18:15:22.060 に答える