oneAPI Deep Neural Network Library (oneDNN)
Performance library for Deep Learning
1.96.0
SYCL interoperability API

API extensions to interact with the underlying SYCL run-time. More...

Namespaces

 dnnl::sycl_interop
 SYCL interoperability namespace.
 

Enumerations

enum  dnnl_sycl_interop_memory_kind_t
 Memory allocation kind. More...
 

Functions

dnnl_status_t DNNL_API dnnl_sycl_interop_engine_create (dnnl_engine_t *engine, const void *device, const void *context)
 Creates an engine associated with a SYCL device and a SYCL context. More...
 
dnnl_status_t DNNL_API dnnl_sycl_interop_engine_get_context (dnnl_engine_t engine, void **context)
 Returns the SYCL context associated with an engine. More...
 
dnnl_status_t DNNL_API dnnl_sycl_interop_engine_get_device (dnnl_engine_t engine, void **device)
 Returns the SYCL device associated with an engine. More...
 
dnnl_status_t DNNL_API dnnl_sycl_interop_memory_create (dnnl_memory_t *memory, const dnnl_memory_desc_t *memory_desc, dnnl_engine_t engine, dnnl_sycl_interop_memory_kind_t memory_kind, void *handle)
 Creates a memory object. More...
 
dnnl_status_t DNNL_API dnnl_sycl_interop_memory_get_memory_kind (const_dnnl_memory_t memory, dnnl_sycl_interop_memory_kind_t *memory_kind)
 Returns the memory allocation kind associated with a memory object. More...
 
dnnl_status_t DNNL_API dnnl_sycl_interop_memory_set_buffer (dnnl_memory_t memory, void *buffer, dnnl_stream_t stream)
 Sets a SYCL buffer for a memory object. More...
 
dnnl_status_t DNNL_API dnnl_sycl_interop_stream_create (dnnl_stream_t *stream, dnnl_engine_t engine, void *queue)
 Creates an execution stream for a given engine associated with a SYCL queue. More...
 
dnnl_status_t DNNL_API dnnl_sycl_interop_stream_get_queue (dnnl_stream_t stream, void **queue)
 Returns the SYCL queue associated with an execution stream. More...
 
dnnl_status_t DNNL_API dnnl_sycl_interop_primitive_execute (const_dnnl_primitive_t primitive, dnnl_stream_t stream, int nargs, const dnnl_exec_arg_t *args, const void *deps, void *return_event)
 Executes computations specified by the primitive in a specified stream and returns a SYCL event. More...
 

Detailed Description

API extensions to interact with the underlying SYCL run-time.

See also
DPC++ Interoperability in developer guide

Enumeration Type Documentation

◆ dnnl_sycl_interop_memory_kind_t

Memory allocation kind.

Enumerator
dnnl_sycl_interop_usm 

USM (device, shared, host, or unknown) memory allocation kind.

dnnl_sycl_interop_buffer 

Buffer memory allocation kind.

Function Documentation

◆ dnnl_sycl_interop_engine_create()

dnnl_status_t DNNL_API dnnl_sycl_interop_engine_create ( dnnl_engine_t engine,
const void *  device,
const void *  context 
)

Creates an engine associated with a SYCL device and a SYCL context.

Parameters
engineOutput engine.
devicePointer to the SYCL device to use for the engine.
contextPointer to the SYCL context to use for the engine.
Returns
dnnl_success on success and a status describing the error otherwise.

◆ dnnl_sycl_interop_engine_get_context()

dnnl_status_t DNNL_API dnnl_sycl_interop_engine_get_context ( dnnl_engine_t  engine,
void **  context 
)

Returns the SYCL context associated with an engine.

Parameters
engineEngine to query.
contextPointer to the underlying SYCL context of the engine.
Returns
dnnl_success on success and a status describing the error otherwise.

◆ dnnl_sycl_interop_engine_get_device()

dnnl_status_t DNNL_API dnnl_sycl_interop_engine_get_device ( dnnl_engine_t  engine,
void **  device 
)

Returns the SYCL device associated with an engine.

Parameters
engineEngine to query.
devicePointer to the underlying SYCL device of the engine.
Returns
dnnl_success on success and a status describing the error otherwise.

◆ dnnl_sycl_interop_memory_create()

dnnl_status_t DNNL_API dnnl_sycl_interop_memory_create ( dnnl_memory_t memory,
const dnnl_memory_desc_t memory_desc,
dnnl_engine_t  engine,
dnnl_sycl_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:

Parameters
memoryOutput memory object.
memory_descMemory descriptor.
engineEngine to use.
memory_kindMemory allocation kind to specify the type of handle.
handleHandle of the memory buffer to use as an underlying storage.
  • A USM pointer to the user-allocated buffer. In this case the library doesn't own the buffer. Requires memory_kind to be equal to dnnl_sycl_interop_usm.
  • A pointer to SYCL buffer. In this case the library doesn't own the buffer. Requires memory_kind be equal to be equal to dnnl_sycl_interop_buffer.
  • The DNNL_MEMORY_ALLOCATE special value. Instructs the library to allocate the buffer that corresponds to the memory allocation kind memory_kind for the memory object. In this case the library owns the buffer.
  • The DNNL_MEMORY_NONE specific value. Instructs the library to create memory object without an underlying buffer.
Returns
dnnl_success on success and a status describing the error otherwise.

◆ dnnl_sycl_interop_memory_get_memory_kind()

dnnl_status_t DNNL_API dnnl_sycl_interop_memory_get_memory_kind ( const_dnnl_memory_t  memory,
dnnl_sycl_interop_memory_kind_t memory_kind 
)

Returns the memory allocation kind associated with a memory object.

Parameters
memoryMemory to query.
memory_kindOutput underlying memory allocation kind of the memory object.
Returns
dnnl_success on success and a status describing the error otherwise.

◆ dnnl_sycl_interop_memory_set_buffer()

dnnl_status_t DNNL_API dnnl_sycl_interop_memory_set_buffer ( dnnl_memory_t  memory,
void *  buffer,
dnnl_stream_t  stream 
)

Sets a SYCL buffer for a memory object.

Parameters
memoryMemory object.
bufferSYCL buffer to be set in the memory object.
streamStream to use to execute padding in.
Returns
dnnl_success on success and a status describing the error otherwise.

◆ dnnl_sycl_interop_stream_create()

dnnl_status_t DNNL_API dnnl_sycl_interop_stream_create ( dnnl_stream_t stream,
dnnl_engine_t  engine,
void *  queue 
)

Creates an execution stream for a given engine associated with a SYCL queue.

Parameters
streamOutput execution stream.
engineEngine to create the execution stream on.
queueSYCL queue to use.
Returns
dnnl_success on success and a status describing the error otherwise.

◆ dnnl_sycl_interop_stream_get_queue()

dnnl_status_t DNNL_API dnnl_sycl_interop_stream_get_queue ( dnnl_stream_t  stream,
void **  queue 
)

Returns the SYCL queue associated with an execution stream.

Parameters
streamExecution stream to query.
queueOutput SYCL command queue.
Returns
dnnl_success on success and a status describing the error otherwise.

◆ dnnl_sycl_interop_primitive_execute()

dnnl_status_t DNNL_API dnnl_sycl_interop_primitive_execute ( const_dnnl_primitive_t  primitive,
dnnl_stream_t  stream,
int  nargs,
const dnnl_exec_arg_t args,
const void *  deps,
void *  return_event 
)

Executes computations specified by the primitive in a specified stream and returns a SYCL event.

Parameters
primitivePrimitive to execute.
streamStream to use.
nargsNumber of arguments.
argsArray 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).
depsA pointer to std::vector<sycl::event> that contains dependencies.
return_eventOutput event.
Returns
dnnl_success on success and a status describing the error otherwise.