clCreateBuffer出错,但clEnqueueWriteBuffer出错

时间:2016-08-03 07:37:22

标签: memory-management opencl

我正在尝试将大型数组写入GPU设备内存。

我首先尝试用

执行此操作
cl_mem obj = clCreateBuffer(context,
                            CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
                            sizeof(int)*hugeVal,
                            &arr,
                            &error);

但是,我会收到CL_OUT_OF_HOST_MEMORY错误。当我查询我的GPU时,我看到了

CL_DEVICE_MAX_MEM_ALLOC_SIZE ~= 0.5 GB

那个

CL_DEVICE_GLOBAL_MEM_SIZE ~= 2 GB

我尝试传入的数组大约是0.75 GB。然后我开始使用

cl_mem obj = clCreateBuffer(context,
                            CL_MEM_READ_WRITE,
                            sizeof(int)*hugeVal,
                            nullptr,
                            &error);    

clEnqueueWriteBuffer(commandqueue, 
                     obj, 
                     CL_TRUE, 
                     0, 
                     sizeof(int)*hugeVal, 
                     &arr, 
                     0, 
                     nullptr, 
                     nullptr);

这可以按预期工作。我的理解是第二种方法与第一种方法相同。但是,情况似乎并非如此。谁能解释一下这里发生了什么?

0 个答案:

没有答案