【发布时间】:2014-05-18 12:21:57
【问题描述】:
当在 OpenCL 中使用 clCreateBuffer 进行内存分配并且使用 clEnqueueWriteBuffer 进行写入时,如何决定分配哪个内存(CPU 内存或 GPU 内存)
如果正在分配GPU内存,如果分配大于内存限制,程序会失败吗? (或者会有分页之类的东西)
【问题讨论】:
当在 OpenCL 中使用 clCreateBuffer 进行内存分配并且使用 clEnqueueWriteBuffer 进行写入时,如何决定分配哪个内存(CPU 内存或 GPU 内存)
如果正在分配GPU内存,如果分配大于内存限制,程序会失败吗? (或者会有分页之类的东西)
【问题讨论】:
如果请求的缓冲区大小大于设备的CL_DEVICE_MAX_MEM_ALLOC_SIZE(可以使用clGetDeviceInfo()函数查询),clCreateBuffer()将返回一个空缓冲区并将错误代码设置为CL_INVALID_BUFFER_SIZE。
有关更多信息,请参阅documentation clCreateBuffer()。
【讨论】:
clCreateBuffer() 在设备上分配内存。如果您传递CL_MEM_ALLOC_HOST_PTR 标志,它还可以选择在主机上分配内存。