OpenCL:为什么使用clEnqueueMapBuffer崩溃没有返回错误?

时间:2016-08-12 07:12:17

标签: opencl

当我使用clEnqueueMapBuffer从内核获取计算结果时遇到问题,它会崩溃而不会出现任何错误。我的流程在:

.
.
// Create a buffer in Host, and use CL_MEM_USE_HOST_PTR in device
int out_data;
cl_mem cl_dst = clCreateBuffer(context_CL, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, sizeof(int), &out_data, &err);
.
.
//Do something in a kernel(ignore the detail of kernel and other input data, because there is no wrong there. the output is cl_dst(INT))
err = clEnqueueNDRangeKernel(....)
.
.
//Mapping the result back to the host
clEnqueueMapBuffer(queue_CL, cl_dst, CL_TRUE, CL_MAP_READ, 0, sizeof(cl_dst), 0, NULL, NULL, &err);
//And then my graphic card shut down here at this command...
.
.
.

我的显卡是Intel HD 5500(支持OpenCL 2.0) 我在某处有错误的标志或遗漏了一些重要的概念吗?

1 个答案:

答案 0 :(得分:1)

我认为映射区域的大小不正确:

clEnqueueMapBuffer(queue_CL, cl_dst, CL_TRUE, CL_MAP_READ, 0, sizeof(cl_dst), 0, NULL, NULL, &err);

应该是:

clEnqueueMapBuffer(queue_CL, cl_dst, CL_TRUE, CL_MAP_READ, 0, sizeof(int), 0, NULL, NULL, &err);

根据OpenCL 2.0规范:

  

" offset和size是以字节为单位的偏移量和区域中的大小   正在映射的缓冲区对象。"