Queue class C wrapper¶
Overview¶
// global functions DPCTL_API bool DPCTLQueue_AreEq( __dpctl_keep const DPCTLSyclQueueRef QRef1, __dpctl_keep const DPCTLSyclQueueRef QRef2 ); DPCTL_API __dpctl_give DPCTLSyclQueueRef DPCTLQueue_Copy(__dpctl_keep const DPCTLSyclQueueRef QRef); DPCTL_API __dpctl_give DPCTLSyclQueueRef DPCTLQueue_Create( __dpctl_keep const DPCTLSyclContextRef CRef, __dpctl_keep const DPCTLSyclDeviceRef DRef, error_handler_callback* handler, int properties ); DPCTL_API __dpctl_give DPCTLSyclQueueRef DPCTLQueue_CreateForDevice( __dpctl_keep const DPCTLSyclDeviceRef DRef, error_handler_callback* handler, int properties ); DPCTL_API void DPCTLQueue_Delete(__dpctl_take DPCTLSyclQueueRef QRef); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill128( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint64_t* Value, size_t Count ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill16( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint16_t Value, size_t Count ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill32( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint32_t Value, size_t Count ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill64( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint64_t Value, size_t Count ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill8( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint8_t Value, size_t Count ); DPCTL_API DPCTLSyclBackendType DPCTLQueue_GetBackend(__dpctl_keep DPCTLSyclQueueRef QRef); DPCTL_API __dpctl_give DPCTLSyclContextRef DPCTLQueue_GetContext(__dpctl_keep const DPCTLSyclQueueRef QRef); DPCTL_API __dpctl_give DPCTLSyclDeviceRef DPCTLQueue_GetDevice(__dpctl_keep const DPCTLSyclQueueRef QRef); DPCTL_API bool DPCTLQueue_HasEnableProfiling(__dpctl_keep const DPCTLSyclQueueRef QRef); DPCTL_API size_t DPCTLQueue_Hash(__dpctl_keep const DPCTLSyclQueueRef QRef); DPCTL_API bool DPCTLQueue_IsInOrder(__dpctl_keep const DPCTLSyclQueueRef QRef); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_MemAdvise( __dpctl_keep DPCTLSyclQueueRef QRef, const void* Ptr, size_t Count, int Advice ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Memcpy( __dpctl_keep const DPCTLSyclQueueRef QRef, void* Dest, const void* Src, size_t Count ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_MemcpyWithEvents( __dpctl_keep const DPCTLSyclQueueRef QRef, void* Dest, const void* Src, size_t Count, __dpctl_keep const DPCTLSyclEventRef* DepEvents, size_t DepEventsCount ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Memset( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint8_t Value, size_t Count ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Prefetch( __dpctl_keep DPCTLSyclQueueRef QRef, const void* Ptr, size_t Count ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_SubmitNDRange( __dpctl_keep const DPCTLSyclKernelRef KRef, __dpctl_keep const DPCTLSyclQueueRef QRef, __dpctl_keep void** Args, __dpctl_keep const DPCTLKernelArgType* ArgTypes, size_t NArgs, __dpctl_keep const size_t gRange[3], __dpctl_keep const size_t lRange[3], size_t NDims, __dpctl_keep const DPCTLSyclEventRef* DepEvents, size_t NDepEvents ); DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_SubmitRange( __dpctl_keep const DPCTLSyclKernelRef KRef, __dpctl_keep const DPCTLSyclQueueRef QRef, __dpctl_keep void** Args, __dpctl_keep const DPCTLKernelArgType* ArgTypes, size_t NArgs, __dpctl_keep const size_t Range[3], size_t NRange, __dpctl_keep const DPCTLSyclEventRef* DepEvents, size_t NDepEvents ); DPCTL_API void DPCTLQueue_Wait(__dpctl_keep const DPCTLSyclQueueRef QRef);
Detailed Documentation¶
Global Functions¶
DPCTL_API bool DPCTLQueue_AreEq( __dpctl_keep const DPCTLSyclQueueRef QRef1, __dpctl_keep const DPCTLSyclQueueRef QRef2 )
Checks if two DPCTLSyclQueueRef objects point to the same sycl::queue
.
Parameters:
QRef1 |
First opaque pointer to the |
QRef2 |
Second opaque pointer to the |
Returns:
True if the underlying sycl::queue are same, false otherwise.
DPCTL_API __dpctl_give DPCTLSyclQueueRef DPCTLQueue_Copy(__dpctl_keep const DPCTLSyclQueueRef QRef)
Returns a copy of the DPCTLSyclQueueRef object.
Parameters:
QRef |
DPCTLSyclQueueRef object to be copied. |
Returns:
A new DPCTLSyclQueueRef created by copying the passed in DPCTLSyclQueueRef object.
DPCTL_API __dpctl_give DPCTLSyclQueueRef DPCTLQueue_Create( __dpctl_keep const DPCTLSyclContextRef CRef, __dpctl_keep const DPCTLSyclDeviceRef DRef, error_handler_callback* handler, int properties )
A wrapper for sycl::queue constructor to construct a new queue from the provided context, device, async handler and properties bit flags.
Parameters:
CRef |
An opaque pointer to a sycl::context. |
DRef |
An opaque pointer to a sycl::device |
handler |
A callback function that will be invoked by the async_handler used during queue creation. Can be NULL if no async_handler is needed. |
properties |
A combination of bit flags using the values defined in the DPCTLQueuePropertyType enum. The bit flags are used to create a sycl::property_list that is passed to the SYCL queue constructor. |
Returns:
An opaque DPCTLSyclQueueRef pointer containing the new sycl::queue object. A nullptr is returned if the queue could not be created.
DPCTL_API __dpctl_give DPCTLSyclQueueRef DPCTLQueue_CreateForDevice( __dpctl_keep const DPCTLSyclDeviceRef DRef, error_handler_callback* handler, int properties )
Constructs a sycl::queue
object of the specified SYCL device.
Constructs a new SYCL queue for the specified SYCL device. The behavior of this function differs from the following queue constructor:
queue( const device &syclDevice, const async_handler &asyncHandler, const property_list &propList = {} )
Unlike the SYCL queue constructor, we try not to create a new SYCL context for the device and instead look to reuse a previously cached SYCL context for the device (refer dpctl_sycl_device_manager.cpp). DPCTL caches contexts only for root devices and for all custom devices the function behaves the same way as the SYCL constructor.
Parameters:
DRef |
An opaque pointer to a |
handler |
A callback function that will be invoked by the async_handler used during queue creation. Can be NULL if no async_handler is needed. |
properties |
A combination of bit flags using the values defined in the DPCTLQueuePropertyType enum. The bit flags are used to create a |
Returns:
An opaque DPCTLSyclQueueRef pointer containing the new sycl::queue
object. A nullptr is returned if the queue could not be created.
DPCTL_API void DPCTLQueue_Delete(__dpctl_take DPCTLSyclQueueRef QRef)
Delete the pointer after casting it to sycl::queue.
Parameters:
QRef |
A DPCTLSyclQueueRef pointer that gets deleted. |
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill128( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint64_t* Value, size_t Count )
C-API wrapper for sycl::queue::fill
.
Parameters:
QRef |
An opaque pointer to the |
USMRef |
An USM pointer to the memory to fill. |
Value |
A pointer to uint64_t array of 2 elements with value to fill. |
Count |
A number of 128-bit elements to fill. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::fill
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill16( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint16_t Value, size_t Count )
C-API wrapper for sycl::queue::fill
.
Parameters:
QRef |
An opaque pointer to the |
USMRef |
An USM pointer to the memory to fill. |
Value |
A uint16_t value to fill. |
Count |
A number of uint16_t elements to fill. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::fill
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill32( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint32_t Value, size_t Count )
C-API wrapper for sycl::queue::fill
.
Parameters:
QRef |
An opaque pointer to the |
USMRef |
An USM pointer to the memory to fill. |
Value |
A uint32_t value to fill. |
Count |
A number of uint32_t elements to fill. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::fill
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill64( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint64_t Value, size_t Count )
C-API wrapper for sycl::queue::fill
.
Parameters:
QRef |
An opaque pointer to the |
USMRef |
An USM pointer to the memory to fill. |
Value |
A uint64_t value to fill. |
Count |
A number of uint64_t elements to fill. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::fill
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Fill8( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint8_t Value, size_t Count )
C-API wrapper for sycl::queue::fill
.
Parameters:
QRef |
An opaque pointer to the |
USMRef |
An USM pointer to the memory to fill. |
Value |
A uint8_t value to fill. |
Count |
A number of uint8_t elements to fill. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::fill
function.
DPCTL_API DPCTLSyclBackendType DPCTLQueue_GetBackend(__dpctl_keep DPCTLSyclQueueRef QRef)
Returns the Sycl backend for the provided sycl::queue.
Parameters:
QRef |
An opaque pointer to the sycl queue. |
Returns:
A enum DPCTLSyclBackendType corresponding to the backed for the queue.
DPCTL_API __dpctl_give DPCTLSyclContextRef DPCTLQueue_GetContext(__dpctl_keep const DPCTLSyclQueueRef QRef)
Returns the Sycl context for the queue.
Parameters:
QRef |
An opaque pointer to the sycl queue. |
Returns:
A DPCTLSyclContextRef pointer to the sycl context for the queue.
DPCTL_API __dpctl_give DPCTLSyclDeviceRef DPCTLQueue_GetDevice(__dpctl_keep const DPCTLSyclQueueRef QRef)
returns the Sycl device for the queue.
Parameters:
QRef |
An opaque pointer to the sycl queue. |
Returns:
A DPCTLSyclDeviceRef pointer to the sycl device for the queue.
DPCTL_API bool DPCTLQueue_HasEnableProfiling(__dpctl_keep const DPCTLSyclQueueRef QRef)
C-API wrapper for sycl::queue::has_property<sycl::property::queue::enable_profiling>() that indicates whether the referenced queue was constructed with this property.
Parameters:
QRef |
An opaque pointer to the |
DPCTL_API size_t DPCTLQueue_Hash(__dpctl_keep const DPCTLSyclQueueRef QRef)
C-API wrapper for std::hash<sycl::queue>’s operator().
Parameters:
QRef |
An opaque pointer to the |
Returns:
Hash value of the underlying sycl::queue
instance.
DPCTL_API bool DPCTLQueue_IsInOrder(__dpctl_keep const DPCTLSyclQueueRef QRef)
C-API wrapper for sycl::queue::is_in_order that indicates whether the referenced queue is in-order or out-of-order.
Parameters:
QRef |
An opaque pointer to the |
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_MemAdvise( __dpctl_keep DPCTLSyclQueueRef QRef, const void* Ptr, size_t Count, int Advice )
C-API wrapper for sycl::queue::mem_advise
.
Parameters:
QRef |
An opaque pointer to the |
Ptr |
An USM pointer to memory. |
Count |
A number of bytes to prefetch. |
Advice |
Device-defined advice for the specified allocation. A value of 0 reverts the advice for Ptr to the default behavior. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::mem_advise
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Memcpy( __dpctl_keep const DPCTLSyclQueueRef QRef, void* Dest, const void* Src, size_t Count )
C-API wrapper for sycl::queue::memcpy
.
Parameters:
QRef |
An opaque pointer to the |
Dest |
An USM pointer to the destination memory. |
Src |
An USM pointer to the source memory. |
Count |
A number of bytes to copy. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::memcpy
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_MemcpyWithEvents( __dpctl_keep const DPCTLSyclQueueRef QRef, void* Dest, const void* Src, size_t Count, __dpctl_keep const DPCTLSyclEventRef* DepEvents, size_t DepEventsCount )
C-API wrapper for sycl::queue::memcpy
.
Parameters:
QRef |
An opaque pointer to the |
Dest |
An USM pointer to the destination memory. |
Src |
An USM pointer to the source memory. |
Count |
A number of bytes to copy. |
DepEvents |
A pointer to array of DPCTLSyclEventRef opaque pointers to dependent events. |
DepEventsCount |
A number of dependent events. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::memcpy
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Memset( __dpctl_keep const DPCTLSyclQueueRef QRef, void* USMRef, uint8_t Value, size_t Count )
C-API wrapper for sycl::queue::memset
.
Parameters:
QRef |
An opaque pointer to the |
USMRef |
An USM pointer to the memory to fill. |
Value |
A value to fill. |
Count |
A number of uint8_t elements to fill. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::fill
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_Prefetch( __dpctl_keep DPCTLSyclQueueRef QRef, const void* Ptr, size_t Count )
C-API wrapper for sycl::queue::prefetch
.
Parameters:
QRef |
An opaque pointer to the |
Ptr |
An USM pointer to memory. |
Count |
A number of bytes to prefetch. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue::prefetch
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_SubmitNDRange( __dpctl_keep const DPCTLSyclKernelRef KRef, __dpctl_keep const DPCTLSyclQueueRef QRef, __dpctl_keep void** Args, __dpctl_keep const DPCTLKernelArgType* ArgTypes, size_t NArgs, __dpctl_keep const size_t gRange[3], __dpctl_keep const size_t lRange[3], size_t NDims, __dpctl_keep const DPCTLSyclEventRef* DepEvents, size_t NDepEvents )
Submits the kernel to the specified queue with the provided nd_range argument.
A wrapper over sycl::queue.submit()
. The function takes an interoperability kernel, the kernel arguments, and a Sycl queue as input. The kernel is submitted as parallel_for(nd_range<NRange>, *unwrap<kernel>(KRef))
.
Todo sycl::buffer arguments are not supported yet.
Add support for id<Dims> WorkItemOffset
Parameters:
KRef |
Opaque pointer to an OpenCL interoperability kernel wrapped inside a sycl::kernel. |
QRef |
Opaque pointer to the sycl::queue where the kernel will be enqueued. |
Args |
An array of void* pointers that represent the kernel arguments for the kernel. |
ArgTypes |
An array of DPCTLKernelArgType enum values that represent the type of each kernel argument. |
NArgs |
Size of Args. |
gRange |
Defines the overall dimension of the dispatch for the kernel. The array can have up to three dimensions. |
lRange |
Defines the iteration domain of a single work-group in a parallel dispatch. The array can have up to three dimensions. |
NDims |
The number of dimensions for both local and global ranges. |
DepEvents |
List of dependent DPCTLSyclEventRef objects (events) for the kernel. We call |
NDepEvents |
Size of the DepEvents list. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue.submit()
function.
DPCTL_API __dpctl_give DPCTLSyclEventRef DPCTLQueue_SubmitRange( __dpctl_keep const DPCTLSyclKernelRef KRef, __dpctl_keep const DPCTLSyclQueueRef QRef, __dpctl_keep void** Args, __dpctl_keep const DPCTLKernelArgType* ArgTypes, size_t NArgs, __dpctl_keep const size_t Range[3], size_t NRange, __dpctl_keep const DPCTLSyclEventRef* DepEvents, size_t NDepEvents )
Submits the kernel to the specified queue with the provided range argument.
A wrapper over sycl::queue.submit()
. The function takes an interoperability kernel, the kernel arguments, and a sycl::queue
as input. The kernel is submitted as parallel_for(range<NRange>, *unwrap<kernel>(KRef))
.
Todo sycl::buffer
arguments are not supported yet.
Add support for id<Dims> WorkItemOffset
Parameters:
KRef |
Opaque pointer to an OpenCL interoperability kernel wrapped inside a sycl::kernel. |
QRef |
Opaque pointer to the sycl::queue where the kernel will be enqueued. |
Args |
An array of void* pointers that represent the kernel arguments for the kernel. |
ArgTypes |
An array of DPCTLKernelArgType enum values that represent the type of each kernel argument. |
NArgs |
Size of Args and ArgTypes. |
Range |
Defines the overall dimension of the dispatch for the kernel. The array can have up to three dimensions. |
NRange |
Size of the gRange array. |
DepEvents |
List of dependent DPCTLSyclEventRef objects (events) for the kernel. We call |
NDepEvents |
Size of the DepEvents list. |
Returns:
An opaque pointer to the sycl::event
returned by the sycl::queue.submit()
function.
DPCTL_API void DPCTLQueue_Wait(__dpctl_keep const DPCTLSyclQueueRef QRef)
Calls the sycl::queue::submit
function to do a blocking wait on all enqueued tasks in the queue.
Parameters:
QRef |
Opaque pointer to a |