Visible to Intel only — GUID: GUID-D9CA2172-70D6-4C0C-98DE-D9116A7FF41C
Visible to Intel only — GUID: GUID-D9CA2172-70D6-4C0C-98DE-D9116A7FF41C
OpenCL interoperability API
Overview
API extensions to interact with the underlying OpenCL run-time. More…
// enums enum dnnl_ocl_interop_memory_kind_t; // global functions dnnl_status_t DNNL_API dnnl_ocl_interop_memory_create( dnnl_memory_t* memory, const_dnnl_memory_desc_t memory_desc, dnnl_engine_t engine, dnnl_ocl_interop_memory_kind_t memory_kind, void* handle ); dnnl_status_t DNNL_API dnnl_ocl_interop_memory_get_memory_kind( const_dnnl_memory_t memory, dnnl_ocl_interop_memory_kind_t* memory_kind ); dnnl_status_t DNNL_API dnnl_ocl_interop_memory_get_mem_object( const_dnnl_memory_t memory, cl_mem* mem_object ); dnnl_status_t DNNL_API dnnl_ocl_interop_memory_set_mem_object( dnnl_memory_t memory, cl_mem mem_object ); dnnl_status_t DNNL_API dnnl_ocl_interop_engine_get_cache_blob_id( cl_device_id device, size_t* size, uint8_t* cache_blob_id ); dnnl_status_t DNNL_API dnnl_ocl_interop_engine_get_cache_blob( dnnl_engine_t engine, size_t* size, uint8_t* cache_blob ); dnnl_status_t DNNL_API dnnl_ocl_interop_engine_create_from_cache_blob( dnnl_engine_t* engine, cl_device_id device, cl_context context, size_t size, const uint8_t* cache_blob ); dnnl_status_t DNNL_API dnnl_ocl_interop_engine_create( dnnl_engine_t* engine, cl_device_id device, cl_context context ); dnnl_status_t DNNL_API dnnl_ocl_interop_engine_get_context( dnnl_engine_t engine, cl_context* context ); dnnl_status_t DNNL_API dnnl_ocl_interop_get_device( dnnl_engine_t engine, cl_device_id* device ); dnnl_status_t DNNL_API dnnl_ocl_interop_stream_create( dnnl_stream_t* stream, dnnl_engine_t engine, cl_command_queue queue ); dnnl_status_t DNNL_API dnnl_ocl_interop_stream_get_command_queue( dnnl_stream_t stream, cl_command_queue* queue ); dnnl_status_t DNNL_API dnnl_ocl_interop_primitive_execute( const_dnnl_primitive_t primitive, dnnl_stream_t stream, int nargs, const dnnl_exec_arg_t* args, const cl_event* deps, int ndeps, cl_event* return_event );
Detailed Documentation
API extensions to interact with the underlying OpenCL run-time.
See also:
OpenCL Interoperability in developer guide
Global Functions
dnnl_status_t DNNL_API dnnl_ocl_interop_memory_create( dnnl_memory_t* memory, const_dnnl_memory_desc_t memory_desc, dnnl_engine_t engine, dnnl_ocl_interop_memory_kind_t memory_kind, void* handle )
Creates a memory object.
Unless handle is equal to DNNL_MEMORY_NONE or DNNL_MEMORY_ALLOCATE, the constructed memory object will have the underlying buffer set. In this case, the buffer will be initialized as if:
dnnl_memory_set_data_handle() has been called, if memory_kind is equal to dnnl_ocl_interop_usm, or
dnnl_ocl_interop_memory_set_mem_object() has been called, if memory_kind is equal to dnnl_ocl_interop_buffer.
Parameters:
memory |
Output memory object. |
memory_desc |
Memory descriptor. |
engine |
Engine to use. |
memory_kind |
Memory allocation kind to specify the type of handle. |
handle |
Handle of the memory buffer to use as an underlying storage.
|
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_memory_get_memory_kind( const_dnnl_memory_t memory, dnnl_ocl_interop_memory_kind_t* memory_kind )
Returns the memory allocation kind associated with a memory object.
Parameters:
memory |
Memory to query. |
memory_kind |
Output underlying memory allocation kind of the memory object. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_memory_get_mem_object( const_dnnl_memory_t memory, cl_mem* mem_object )
Returns an OpenCL memory object associated with a memory object.
Parameters:
memory |
Memory object. |
mem_object |
Output OpenCL memory object. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_memory_set_mem_object( dnnl_memory_t memory, cl_mem mem_object )
Sets OpenCL memory object associated with a memory object.
For behavioral details, see dnnl_memory_set_data_handle().
Parameters:
memory |
Memory object. |
mem_object |
OpenCL memory object. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_engine_get_cache_blob_id( cl_device_id device, size_t* size, uint8_t* cache_blob_id )
Retrieves a cache blob ID for the OpenCL device.
Parameters:
device |
An OpenCL device. |
size |
Size of the cache blob ID in bytes. |
cache_blob_id |
Cache blob id of size size. If the cache_blob_id is nullptr then the size of the cache blob ID is returned in size. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_engine_get_cache_blob( dnnl_engine_t engine, size_t* size, uint8_t* cache_blob )
Retrieves a cache blob associated with the given engine.
Parameters:
engine |
Engine to query for the cache blob. |
size |
Size of the cache blob in bytes. |
cache_blob |
Cache blob of size size. If the cache_blob is nullptr then the size of the cache blob is returned in size. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_engine_create_from_cache_blob( dnnl_engine_t* engine, cl_device_id device, cl_context context, size_t size, const uint8_t* cache_blob )
Creates an engine from the given cache blob.
Parameters:
engine |
Output engine. |
device |
The OpenCL device that this engine will encapsulate. |
context |
The OpenCL context (containing the device) that this engine will use for all operations. |
size |
Size of the cache blob in bytes. |
cache_blob |
Cache blob of size size. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_engine_create( dnnl_engine_t* engine, cl_device_id device, cl_context context )
Creates an engine associated with an OpenCL device and an OpenCL context.
Parameters:
engine |
Output engine. |
device |
Underlying OpenCL device to use for the engine. |
context |
Underlying OpenCL context to use for the engine. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_engine_get_context( dnnl_engine_t engine, cl_context* context )
Returns the OpenCL context associated with an engine.
Parameters:
engine |
Engine to query. |
context |
Output underlying OpenCL context of the engine. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_get_device( dnnl_engine_t engine, cl_device_id* device )
Returns the OpenCL device associated with an engine.
Parameters:
engine |
Engine to query. |
device |
Output underlying OpenCL device of the engine. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_stream_create( dnnl_stream_t* stream, dnnl_engine_t engine, cl_command_queue queue )
Creates an execution stream for a given engine associated with an OpenCL command queue.
Parameters:
stream |
Output execution stream. |
engine |
Engine to create the execution stream on. |
queue |
OpenCL command queue to use. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_stream_get_command_queue( dnnl_stream_t stream, cl_command_queue* queue )
Returns the OpenCL command queue associated with an execution stream.
Parameters:
stream |
Execution stream to query. |
queue |
Output OpenCL command queue. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_ocl_interop_primitive_execute( const_dnnl_primitive_t primitive, dnnl_stream_t stream, int nargs, const dnnl_exec_arg_t* args, const cl_event* deps, int ndeps, cl_event* return_event )
Executes computations specified by the primitive in a specified stream and returns an OpenCL event.
Parameters:
primitive |
Primitive to execute. |
stream |
Stream to use. |
nargs |
Number of arguments. |
args |
Array of arguments. Each argument is an <index, dnnl_memory_t> pair. The index is one of the DNNL_ARG_* values such as DNNL_ARG_SRC. Unless runtime shapes are used (see DNNL_RUNTIME_DIM_VAL), the memory object must have the same memory descriptor as that returned by dnnl_primitive_desc_query_md (dnnl_query_exec_arg_md, index). |
deps |
A pointer to a vector of size ndeps that contains dependencies. |
ndeps |
Number of dependencies. |
return_event |
Output event. It’s the user’s responsibility to manage lifetime of the event. Can be NULL. When stream is in-order NULL will be returned. |
Returns:
dnnl_success on success and a status describing the error otherwise.