我正在尝试编写一个适用于 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);