Read讀(從設備到主機)
// 將緩存對象中的數據讀到內存對象中 cl_int clEnqueueReadBuffer ( cl_command_queue command_queue, //命令隊列 cl_mem buffer, // 緩存對象 cl_bool blocking_read, //CL_TRUE 或 CL_FALSE 是否阻塞 size_t offset, // 偏置位置 size_t size, //大小 void *ptr, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event )
// 將圖像對象中的數據讀到內存對象中 cl_int clEnqueueReadImage ( cl_command_queue command_queue , //命令隊列 cl_mem image , // 圖像對象 cl_bool blocking_read , const size_t *origin , //第一個像素位置 const size_t *region , //區域 size_t row_pitch , size_t slice_pitch , void *ptr , cl_uint num_events_in_wait_list , const cl_event *event_wait_list , cl_event *event )
// 參考: https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueReadImage.html
write寫從主機到設備
// 將主機內存寫到緩存對象中 cl_int clEnqueueWriteBuffer ( cl_command_queue command_queue, // 命令隊列 cl_mem buffer, cl_bool blocking_write, size_t offset, size_t size, const void *ptr, // host memory cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event ) // 將主機內存寫到圖像對象中 cl_int clEnqueueWriteImage ( cl_command_queue command_queue , //命令隊列 cl_mem image , //圖像對象 cl_bool blocking_write , const size_t *origin , const size_t *region , size_t input_row_pitch , size_t input_slice_pitch , const void * ptr , //主機地址 cl_uint num_events_in_wait_list , const cl_event *event_wait_list , cl_event *event )
內存映射命令
參考:https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/clEnqueueMapBuffer.html
// 將緩存對象中的區域映射到主機內存 // 返回映射指針 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, const cl_event *event_wait_list, cl_event *event, cl_int *errcode_ret ) // 將圖像對象中的區域映射到主機內存 // 返回映射指針 void * clEnqueueMapImage ( cl_command_queue command_queue , //命令 cl_mem image , //圖像對象 cl_bool blocking_map , cl_map_flags map_flags , const size_t * origin , const size_t * region , size_t *image_row_pitch , size_t *image_slice_pitch , cl_uint num_events_in_wait_list , const cl_event *event_wait_list , cl_event *event , cl_int *errcode_ret ) //解映射(將主機內存中存在的內存對象) cl_int clEnqueueUnmapMemObject ( cl_command_queue command_queue , //命令隊列 cl_mem memobj, //緩存對象 或 圖像對象 void *mapped_ptr, //映射指針 cl_uint num_events_in_wait_list , const cl_event *event_wait_list , cl_event *event )
cl_map_flags | Description |
---|---|
CL_MAP_READ |
This flag specifies that the region being mapped in the memory object is being mapped for reading. The pointer returned by |
CL_MAP_WRITE |
This flag specifies that the region being mapped in the memory object is being mapped for writing. The pointer returned by |
CL_MAP_WRITE_INVALIDATE_REGION |
This flag specifies that the region being mapped in the memory object is being mapped for writing. The contents of the region being mapped are to be discarded. This is typically the case when the region being mapped is overwritten by the host. This flag allows the implementation to no longer guarantee that the pointer returned by
|
內存對象間復制
參考:https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/clEnqueueCopyBuffer .html
clEnqueueCopyBuffer : 緩存對象--->緩存對象
clEnqueueCopyImage: 圖像對象---->圖像對象
clEnqueueCopyBufferToImage: 緩存對象--->圖像對象
clEnqueueCopyImageToBuffer
clEnqueueCopyBufferRect