【问题标题】:OpenCL: Why using clEnqueueMapBuffer Crash without return error?OpenCL:为什么使用 clEnqueueMapBuffer 崩溃而没有返回错误?
【发布时间】:2016-08-12 19:00:52
【问题描述】:

当我使用 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) 我是否在某处有错误的标志或遗漏了一些重要概念?

【问题讨论】:

    标签: opencl


    【解决方案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 是以字节为单位的偏移量和区域的大小 正在映射的缓冲区对象。”

    【讨论】:

    • 感谢您的回答,但我得到了相同的结果.. 还缺少什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    相关资源
    最近更新 更多