内存对象(memory object)是OpenCL跨平台的一个重要方面,因为不需要将向device传递的数据转换成device特定的硬件平台的数据类型,而统一打包成cl_mem对象。缓冲区对象(Buffer Object)就是host向device传递数据的一种重要的内存对象。
通过clCreateBuffer函数可以创建缓冲区对象(返回值为cl_mem),函数原型如下:
clCreateBuffer(cl_context context, cl_mem_flags options, size_t size, void *host_ptr, cl_int *error)
这里重点解释一下options这个参数。cl_mem_flags有以下六个值:
- CL_MEM_READ_WRITE(default)
- CL_MEM_WRITE_ONLY (host_ptr可以为NULL,因为缓冲区对象分配在device的内存区域中,比如gpu的vram)
- CL_MEM_READ_O