我正在尝试将大型数组写入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);
这可以按预期工作。我的理解是第二种方法与第一种方法相同。但是,情况似乎并非如此。谁能解释一下这里发生了什么?