cl_mem clCreateBuffer(
cl_context context,
cl_mem_flags flags,
size_t size,
void *host_ptr,
cl_int *errcode_ret)
cl_mem_flags |
CL_MEM_READ_WRITE |
表明此内存对象可读可写。这是缺省值。 |
CL_MEM_WRITE_ONLY |
只能写不能读,对这种内存对象的读操作是未定义的。CL_MEM_READ_WRITE和CL_MEM_READ_ONLY是互斥的。 |
CL_MEM_READ_ONLY |
只能读不能写, 对这种内存对象的写操作是未定义的。CL_MEM_READ_WRITE和CL_MEM_WRITE_ONLY是互斥的。 |
CL_MEM_USE_HOST_PTR |
仅当host_ptr不是NULL时才有效。它表明应用想让OpenCL操作使用host_ptr所引用的内存来存储内存对象的内容。 OpenCL操作可以在设备内存中保存一根host_ptr所引用的内存用作缓存。内核在设备上执行时可以使用这份拷贝。 如果多个缓存对象由同一host_ptr创建,或者有重叠区域,那么OpenCL命令操作这些缓存对象是,其结果是未定义的。 用CL_MEM_USE_HOST_PTR创建内存对象时,host_ptr要有对齐规则。 |
CL_MEM_ALLOC_HOST_PTR |
表明应用想让OpenCL操作在主机可以访问的内存中分配内存。 与CL_MEM_USE_HOST_PTR互斥。 |
CL_MEM_COPY_HOST_PTR |
仅当host_ptr不是NULL时才有效。它表明应用想让OpenCL操作使用host_ptr所引用的内存来为内存对象分配内存并拷贝数据。 它与CL_MEM_USE_HOST_PTR互斥。 它与CL_MEM_ALLOC_HOST_PTR一起使用时,可以对 由主机可访问内存 分配的cl_mem对象进行初始化。 |
CL_MEM_HOST_WRITE_ONLY |
表明主机指挥对此内存映象进行写入。可用来对主机的写操作进行优化。 |
CL_MEM_HOST_READ_ONLY |
表明主机指挥对此内存对象进行读取。 他与CL_MEM_HOST_WRITE_ONLY互斥。 |
CL_MEM_HOST_NO_ACCESS |
表明主机不会对此内存对象进行读写。 CL_MEM_HOST_WRITE_ONLY与CL_MEM_HOST_READ_ONLY都与CL_MEM_HOST_NO_ACCESS互斥。 |
cl_mem clCreateSubBuffer(
cl_mem buffer,
cl_mem_flags flags,
cl_buffer_create_type buffer_create_type,
const void *buffer_create_info,
cl_int *errcode_ret)
cl_buffer_create_type |
CL_BUFFER_CREATE_TYPE_REGION |
用buffer中的特定区域创建缓冲对象。 buffer_create_info指向如下的数据结构: struct _cl_buffer_region { size_t origin; size_t size; }cl_buffer_region; (origin, size)就是buffer中的偏移量和字节数。 如果buffer是用CL_MEM_USE_HOST_PTR创建的,所返回缓冲对象的host_ptr就是host_ptr + origin。 所返回的缓冲对象引用了为buffer分配的数据存储空间,并指向其中的特定区域(origin, size)。 如果在buffer中,区域(origin, size)越界了,则会在errcode_ret中返回CL_INVALID_VALUE。 如果size为0,则返回CL_INVALID_BUFFER_SIZE。 如果与buffer相关联的上下文中没有一个设备的CL_DEVICE_MEM_BASE_ADDR_ALIGN与origin对齐,则会返回CL_MISALIGNED_SUB_BUFFER_OFFSET。 |
cl_int clGetMemObjectInfo(cl_mem memobj,
cl_mem_info param_name,
size_t param_value_size,
void *param_value,
size_t param_value_size_ret)
cl_mem_info | 返回类型 | 描述 |
CL_MEM_TYPE | cl_mem_object_type |
返回下列值中的一个:
CL_MEM_OBJECT_BUFFER,memobj使用clCreate{Buffer | SubBuffer}创建的。
cl_image_desc.image_type,用clCreateImage创建
|
CL_MEM_FLAGS | cl_mem_flags | 返回用 clCreate{Buffer | SubBuffer}创建的memobj时所制定的参数flags。 如果memobj是子缓冲对象,则同时会返回父对象所继承的内存访问限定符。 |
CL_MEM_SIZE | size_t | 返回memobj中用于数据存储的内存的实际大小,单位:字节。 |
CL_MEM_HOST_PTR | void * | 如果memobj是由 clCreate{Buffer | Image}创建,且mem_flags中设置了CL_MEM_USE_HOST_PTR, 则返回参数host_ptr的值,否则返回NULL。 如果memobj是由clCreateSubBuffer创建,则返回host_ptr+origin。否则返回NULL。 |
CL_MEM_MAP_COUT | cl_uint | 映射当前缓冲的次数。 |
CL_MEM_REFERENCE_COUNT | cl_uint | 返回memobj的引用技术。 |
CL_MEM_CONTEXT | cl_context | 返回创建内存对象时所指定的上下文。 |
CL_MEM_ASSOCIATED_MEMOBJECT | cl_mem | 返回memobj的父对象。即clCreateSubBuffer的参数buffer。否则返回NULL。 |
CL_MEM_OFFSET | size_t | 如果memobj是由 clCreateSubBuffer创建的自缓冲对象,则返回其偏移量,否则返回0。 |
cl_int clEnqueueReadBuffer( cl_command_queue command_queue,
cl_mem buffer,
cl_bool blocking_read,
size_t offset,
size_t cb,
void *ptr,
cl_uint mem_events_in_wait_list,
const cl_event *event_wait_list,
cl_event *event)
cl_int clEnqueueWriteBuffer( cl_command_queue command_queue,
cl_mem buffer,
cl_bool blocking_write,
size_t offset,
size_t cb,
void *ptr,
cl_uint mem_events_in_wait_list,
const cl_event *event_wait_list,
cl_event *event)
cl_int clEnqueueCopyBuffer(
cl_command_queue command_queue,
cl_mem src_buffer,
cl_mem dst_buffer,
size_t src_offset,
size_t src_offset,
size_t size,
cl_uint num_events_in_wait_list,
const cl_event *event_wait_list,
cl_event *event)
cl_int clEnqueueFillBuffer (
cl_command_queue command_queue,
cl_mem buffer,
const void *pattern,
size_t pattern_size,
size_t offset,
size_t size,
cl_uint num_events_in_wait_list,
cosnt cl_event *event_wait_list,
cl_event *event)
void *clEnqueueMapBuffer( cl_command_queue command_queue,
cl_mem buffer,
cl_bool blocking_map,
cl_map_flags map_flags,
size_t offset,
size_t size,
cl_uint num_events_in_wait_list,
cosnt cl_event *event_wait_list,
cl_event *event,
cl_int *errcode_ret)
cl_map_flags |
CL_MAP_READ |
表明所映射区域是用来读的。当clEnqueueMap{Buffer | Image}所入队的命令完成时,保证所返回的指针中所映射区域的内容是最新的。 |
CL_MAP_WRITE |
表明所映射的区域是用来写的。 当clEnqueueMap{Buffer | Image}所入队的命令完成时,保证所返回的指针中所映射区域的内容是最新的。 |
CL_MAP_WRITE_INVALIDATE_REGION |
表明所映射区域是用来写的。所映射区域中的原有内容会被丢弃。一种典型的情况就是主机会复写(overwrite)其内容。此标志告诉操作可以不用保证clEnqueueMap{Buffer | Image} 所返回的指针中所映射区域的内容是最新的,这回极大提升系能。 它与CL_MAP_WRITE是互斥的。 |
cl_int clEnqueueUnmapMemObject (cl_command_queue command_queue,
cl_mem buffer,
void *mapped_pointer,
cl_uint num_events_in_wait_list,
const cl_event *event_wait_list,
cl_event *event)