opencl helloworld的诡异问题,求解答
本人最近想在含有GPGPU的嵌入式处理器上学习使用opencl,对着网络上的helloworld进行测试,kernel代码段如下时,在host上可以正确输出赋值后的output的内容,
__kernel void helloworld ( __global uchar *input,
__global uchar *input2,
__global uchar *output,
int width,
int height
)
{
int y = get_global_id (0);
int x = get_global_id (1);
int id = (y * width) + x;
output[id] = input[id]; // 这个如果改成 output[id] = input2[id]; 也可以正确把input2的内容赋值给output
}
获取输出值并打印的host代码:
ret = clEnqueueReadBuffer(cq, buffer_output, CL_TRUE, 0, size_2d, data_out, 0, NULL, NULL);
assert (ret == CL_SUCCESS);
printf ("\nResult:\n");
for (i = 0; i < buffer_width; i++)
{
for (j = 0; j < buffer_height; j++)
{
printf (" %d, ", data_out[i][j]);
}
}
!!!问题来了:
保持所有代码不变,只是把kernel中的output[id]=input[id];改为output[id]=input[id]+input2[id];时,在host上读取出data_out内容,想要打印时(也就是访问 data_out[i][j]),会出现段错误。
进一步地,我把这一句改为output[id]=0x01;时,同样还是出错。
各位opencl前辈,问题可能会是在哪里呢?请赐教,谢谢。