Intel® oneAPI Deep Neural Network Developer Guide and Reference
A newer version of this document is available. Customers should click here to go to the newest version.
OpenCL interoperability API
Overview
API extensions to interact with the underlying OpenCL run-time. More…
// namespaces namespace dnnl::ocl_interop; // 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_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.