DPC++ Runtime
Runtime libraries for oneAPI DPC++
backend_traits_level_zero.hpp
Go to the documentation of this file.
1 //===---- backend_traits_level_zero.hpp - Backend traits for Level Zero ---===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines the specializations of the sycl::detail::interop,
10 // sycl::detail::BackendInput, sycl::detail::BackendReturn and
11 // sycl::detail::InteropFeatureSupportMap class templates for the Level Zero
12 // backend.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #pragma once
17 
18 #include <sycl/accessor.hpp>
19 #include <sycl/context.hpp>
21 #include <sycl/detail/defines.hpp>
22 #include <sycl/device.hpp>
23 #include <sycl/event.hpp>
26 #include <sycl/kernel_bundle.hpp>
27 #include <sycl/queue.hpp>
28 #include <variant>
29 
30 typedef struct _ze_command_queue_handle_t *ze_command_queue_handle_t;
31 typedef struct _ze_command_list_handle_t *ze_command_list_handle_t;
32 typedef struct _ze_context_handle_t *ze_context_handle_t;
33 typedef struct _ze_device_handle_t *ze_device_handle_t;
34 typedef struct _ze_driver_handle_t *ze_driver_handle_t;
35 typedef struct _ze_event_handle_t *ze_event_handle_t;
36 typedef struct _ze_image_handle_t *ze_image_handle_t;
37 typedef struct _ze_kernel_handle_t *ze_kernel_handle_t;
38 typedef struct _ze_module_handle_t *ze_module_handle_t;
39 
40 namespace sycl {
42 namespace detail {
43 
44 // Forward declarations
45 class device_impl;
46 
47 // TODO the interops for context, device, event, platform and program
48 // may be removed after removing the deprecated 'get_native()' methods
49 // from the corresponding classes. The interop<backend, queue> specialization
50 // is also used in the get_queue() method of the deprecated class
51 // interop_handler and also can be removed after API cleanup.
54 };
55 
58 };
59 
60 template <> struct interop<backend::ext_oneapi_level_zero, event> {
62 };
63 
64 template <> struct interop<backend::ext_oneapi_level_zero, queue> {
65  using type =
66  std::variant<ze_command_queue_handle_t, ze_command_list_handle_t>;
67 };
68 
71 };
72 
73 // TODO the interops for accessor is used in the already deprecated class
74 // interop_handler and can be removed after API cleanup.
75 template <typename DataT, int Dimensions, access::mode AccessMode>
77  accessor<DataT, Dimensions, AccessMode, access::target::device,
78  access::placeholder::false_t>> {
79  using type = char *;
80 };
81 
82 template <typename DataT, int Dimensions, access::mode AccessMode>
83 struct interop<
85  accessor<DataT, Dimensions, AccessMode, access::target::constant_buffer,
86  access::placeholder::false_t>> {
87  using type = char *;
88 };
89 
90 template <typename DataT, int Dimensions, access::mode AccessMode>
92  accessor<DataT, Dimensions, AccessMode, access::target::image,
93  access::placeholder::false_t>> {
95 };
96 
99 };
100 
102  struct type {
104  std::vector<device> DeviceList;
106  ext::oneapi::level_zero::ownership::transfer};
107  };
108 };
109 
112 };
113 
116 };
117 
120 };
121 
123  struct type {
126  ext::oneapi::level_zero::ownership::transfer};
127  };
128 };
129 
132 };
133 
135  struct type {
139 
141 
143  device dev,
145  ext::oneapi::level_zero::ownership::transfer,
146  property_list properties = {})
147  : NativeHandle(nativeHandle), Ownership(ownership),
148  Properties(properties), Device(dev) {}
149  };
150 };
151 
152 template <typename DataT, int Dimensions, typename AllocatorT>
154  buffer<DataT, Dimensions, AllocatorT>> {
155  struct type {
158  ext::oneapi::level_zero::ownership::transfer};
159  };
160 };
161 
162 template <typename DataT, int Dimensions, typename AllocatorT>
164  buffer<DataT, Dimensions, AllocatorT>> {
165  using type = void *;
166 };
167 
168 template <int Dimensions, typename AllocatorT>
170  image<Dimensions, AllocatorT>> {
171  // LevelZero has no way of getting image description FROM a ZeImageHandle so
172  // it must be provided.
173  struct type {
179  ext::oneapi::level_zero::ownership::transfer};
180  };
181 };
182 
183 template <int Dimensions, typename AllocatorT>
185  image<Dimensions, AllocatorT>> {
187 };
188 
190  using type =
191  std::variant<ze_command_queue_handle_t, ze_command_list_handle_t>;
192 };
193 
196 };
197 
200 };
201 
202 template <bundle_state State>
204  struct type {
207  ext::oneapi::level_zero::ownership::transfer};
208  };
209 };
210 
211 template <bundle_state State>
213  using type = std::vector<ze_module_handle_t>;
214 };
215 
217  struct type {
221  ext::oneapi::level_zero::ownership::transfer};
222  };
223 };
224 
227 };
228 
230  static constexpr bool MakePlatform = true;
231  static constexpr bool MakeDevice = true;
232  static constexpr bool MakeContext = true;
233  static constexpr bool MakeQueue = true;
234  static constexpr bool MakeEvent = true;
235  static constexpr bool MakeKernelBundle = true;
236  static constexpr bool MakeKernel = true;
237  static constexpr bool MakeBuffer = true;
238  static constexpr bool MakeImage = true;
239 };
240 
241 } // namespace detail
242 } // __SYCL_INLINE_VER_NAMESPACE(_V1)
243 } // namespace sycl
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, accessor< DataT, Dimensions, AccessMode, access::target::device, access::placeholder::false_t > >::type
char * type
Definition: backend_traits_level_zero.hpp:79
sycl::_V1::property_list
Objects of the property_list class are containers for the SYCL properties.
Definition: property_list.hpp:24
ze_image_handle_t
struct _ze_image_handle_t * ze_image_handle_t
Definition: backend_traits_level_zero.hpp:36
ze_command_list_handle_t
struct _ze_command_list_handle_t * ze_command_list_handle_t
Definition: backend_traits_level_zero.hpp:31
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, queue >::type::Properties
property_list Properties
Definition: backend_traits_level_zero.hpp:138
sycl::_V1::image
Defines a shared image data.
Definition: image.hpp:30
sycl::_V1::backend
backend
Definition: backend_types.hpp:21
ze_module_handle_t
struct _ze_module_handle_t * ze_module_handle_t
Definition: backend_traits_level_zero.hpp:38
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, buffer< DataT, Dimensions, AllocatorT > >::type::NativeHandle
void * NativeHandle
Definition: backend_traits_level_zero.hpp:156
sycl::_V1::backend::ext_oneapi_level_zero
@ ext_oneapi_level_zero
device.hpp
__SYCL_INLINE_VER_NAMESPACE
#define __SYCL_INLINE_VER_NAMESPACE(X)
Definition: defines_elementary.hpp:11
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, image< Dimensions, AllocatorT > >::type::ChanOrder
sycl::image_channel_order ChanOrder
Definition: backend_traits_level_zero.hpp:175
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, context >::type::NativeHandle
interop< backend::ext_oneapi_level_zero, context >::type NativeHandle
Definition: backend_traits_level_zero.hpp:103
sycl::_V1::buffer
Defines a shared array that can be used by kernels in queues.
Definition: buffer.hpp:37
ze_command_queue_handle_t
struct _ze_command_queue_handle_t * ze_command_queue_handle_t
Definition: backend_traits_level_zero.hpp:30
ze_event_handle_t
struct _ze_event_handle_t * ze_event_handle_t
Definition: backend_traits_level_zero.hpp:35
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, kernel >::type::KernelBundle
kernel_bundle< bundle_state::executable > KernelBundle
Definition: backend_traits_level_zero.hpp:218
context.hpp
event.hpp
ze_device_handle_t
struct _ze_device_handle_t * ze_device_handle_t
Definition: backend_traits_level_zero.hpp:33
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, platform >::type
ze_driver_handle_t type
Definition: backend_traits_level_zero.hpp:195
sycl
---— Error handling, matching OpenCL plugin semantics.
Definition: access.hpp:14
sycl::_V1::event
An event object can be used to synchronize memory transfers, enqueues of kernels and signaling barrie...
Definition: event.hpp:40
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, queue >::type::Device
device Device
Definition: backend_traits_level_zero.hpp:140
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, kernel_bundle< State > >::type
std::vector< ze_module_handle_t > type
Definition: backend_traits_level_zero.hpp:213
backend_traits.hpp
sycl::_V1::detail::BackendInput
Definition: backend_traits.hpp:20
sycl::_V1::detail::InteropFeatureSupportMap
Definition: backend_traits.hpp:24
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, kernel >::type
ze_kernel_handle_t type
Definition: backend_traits_level_zero.hpp:226
sycl::_V1::kernel
Provides an abstraction of a SYCL kernel.
Definition: kernel.hpp:72
sycl::_V1::range< Dimensions >
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, buffer< DataT, Dimensions, AllocatorT > >::type
void * type
Definition: backend_traits_level_zero.hpp:165
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, event >::type
ze_event_handle_t type
Definition: backend_traits_level_zero.hpp:131
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, kernel >::type::NativeHandle
ze_kernel_handle_t NativeHandle
Definition: backend_traits_level_zero.hpp:219
filter_selector.hpp
sycl::_V1::detail::interop
Definition: backend_traits.hpp:18
kernel_bundle.hpp
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, image< Dimensions, AllocatorT > >::type::ChanType
sycl::image_channel_type ChanType
Definition: backend_traits_level_zero.hpp:176
sycl::_V1::queue
Encapsulates a single SYCL queue which schedules kernels on a SYCL device.
Definition: queue.hpp:89
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, event >::type::NativeHandle
interop< backend::ext_oneapi_level_zero, event >::type NativeHandle
Definition: backend_traits_level_zero.hpp:124
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, queue >::type::Ownership
ext::oneapi::level_zero::ownership Ownership
Definition: backend_traits_level_zero.hpp:137
defines.hpp
sycl::_V1::kernel_bundle
The kernel_bundle class represents collection of device images in a particular state.
Definition: kernel.hpp:30
sycl::_V1::image_channel_order
image_channel_order
Definition: image.hpp:38
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, queue >::type::NativeHandle
interop< backend::ext_oneapi_level_zero, queue >::type NativeHandle
Definition: backend_traits_level_zero.hpp:136
sycl::_V1::device
The SYCL device class encapsulates a single SYCL device on which kernels may be executed.
Definition: device.hpp:49
queue.hpp
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, context >::type::DeviceList
std::vector< device > DeviceList
Definition: backend_traits_level_zero.hpp:104
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, kernel_bundle< State > >::type::NativeHandle
ze_module_handle_t NativeHandle
Definition: backend_traits_level_zero.hpp:205
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, image< Dimensions, AllocatorT > >::type::ZeImageHandle
ze_image_handle_t ZeImageHandle
Definition: backend_traits_level_zero.hpp:174
level_zero_ownership.hpp
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, device >::type
ze_device_handle_t type
Definition: backend_traits_level_zero.hpp:119
sycl::_V1::ext::oneapi::level_zero::ownership
ownership
Definition: level_zero_ownership.hpp:21
sycl::_V1::accessor
Definition: accessor.hpp:225
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, kernel >::type
ze_kernel_handle_t type
Definition: backend_traits_level_zero.hpp:98
accessor.hpp
sycl::_V1::detail::BackendReturn
Definition: backend_traits.hpp:22
ze_context_handle_t
struct _ze_context_handle_t * ze_context_handle_t
Definition: backend_traits_level_zero.hpp:32
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, context >::type
ze_context_handle_t type
Definition: backend_traits_level_zero.hpp:111
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, accessor< DataT, Dimensions, AccessMode, access::target::constant_buffer, access::placeholder::false_t > >::type
char * type
Definition: backend_traits_level_zero.hpp:87
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, image< Dimensions, AllocatorT > >::type::Range
range< Dimensions > Range
Definition: backend_traits_level_zero.hpp:177
ze_driver_handle_t
struct _ze_driver_handle_t * ze_driver_handle_t
Definition: backend_traits_level_zero.hpp:34
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, context >::type
ze_context_handle_t type
Definition: backend_traits_level_zero.hpp:53
sycl::_V1::platform
Encapsulates a SYCL platform on which kernels may be executed.
Definition: platform.hpp:45
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, device >::type
ze_device_handle_t type
Definition: backend_traits_level_zero.hpp:115
ze_kernel_handle_t
struct _ze_kernel_handle_t * ze_kernel_handle_t
Definition: backend_traits_level_zero.hpp:37
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, event >::type
ze_event_handle_t type
Definition: backend_traits_level_zero.hpp:61
sycl::_V1::image_channel_type
image_channel_type
Definition: image.hpp:56
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, queue >::type
std::variant< ze_command_queue_handle_t, ze_command_list_handle_t > type
Definition: backend_traits_level_zero.hpp:191
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, accessor< DataT, Dimensions, AccessMode, access::target::image, access::placeholder::false_t > >::type
ze_image_handle_t type
Definition: backend_traits_level_zero.hpp:94
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, platform >::type
ze_driver_handle_t type
Definition: backend_traits_level_zero.hpp:199
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, device >::type
ze_device_handle_t type
Definition: backend_traits_level_zero.hpp:57
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, platform >::type
ze_driver_handle_t type
Definition: backend_traits_level_zero.hpp:70
sycl::_V1::detail::BackendReturn< backend::ext_oneapi_level_zero, image< Dimensions, AllocatorT > >::type
ze_image_handle_t type
Definition: backend_traits_level_zero.hpp:186
sycl::_V1::detail::interop< backend::ext_oneapi_level_zero, queue >::type
std::variant< ze_command_queue_handle_t, ze_command_list_handle_t > type
Definition: backend_traits_level_zero.hpp:66
sycl::_V1::context
The context class represents a SYCL context on which kernel functions may be executed.
Definition: context.hpp:41
sycl::_V1::detail::BackendInput< backend::ext_oneapi_level_zero, queue >::type::type
type(interop< backend::ext_oneapi_level_zero, queue >::type nativeHandle, device dev, ext::oneapi::level_zero::ownership ownership=ext::oneapi::level_zero::ownership::transfer, property_list properties={})
Definition: backend_traits_level_zero.hpp:142