3D 立方体で動作する補間ツールを作成しようとしていますが、どういうわけか値を正しく取得できません。これは、ある配列から別の配列に値を再割り当てする単純化されたカーネルです
__kernel void interpolate(__global float* input, __global float* output){
output[0] = input[0];
output[1] = input[1];
output[2] = input[2];
output[3] = input[3];
output[4] = input[4];
}
出力配列を読み取って CPU コードに戻すと、入力配列に入れられた値が正確な順序で返されるはずです。上記の例が賢明なことを何もしていないことは知っていますが、私はその原理に興味があります。
私が得るべき出力は次のとおりです。
input0: 42.392487
input1: 20.455040
input2: 3.366035
input3: 20.000000
input4: 0.948683
しかし、私は得る:
output0: 42.392487
output1: 20.455040
output2: 20.000000
output3: 20.000000
output4: 20.000000
ここでどこが間違っているのかについてのヒントはありますか?
更新: (再度: 入力/出力宣言を追加し、CL_MEM_READ_ONLY を更新)
これは、メモリを作成し、データをデバイスにコピーし、カーネル引数を設定するコードです
float *input = malloc(sizeof(float)*counter);
float *output = malloc(sizeof(float)*counter);
input = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(input), intput, NULL);
output = clCreateBuffer(context, CL_MEM_WRITE_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(output), output, NULL);
err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &input);
err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &output);