DPC++ Runtime
Runtime libraries for oneAPI DPC++
|
|
Go to the documentation of this file.
26 #include <sycl/feature_test.hpp>
36 #if SYCL_BACKEND_OPENCL
39 #if SYCL_EXT_ONEAPI_BACKEND_CUDA
40 #ifdef SYCL_EXT_ONEAPI_BACKEND_CUDA_EXPERIMENTAL
46 #if SYCL_EXT_ONEAPI_BACKEND_HIP
49 #if SYCL_EXT_ONEAPI_BACKEND_LEVEL_ZERO
55 #include <type_traits>
59 inline namespace _V1 {
81 template <backend Backend,
typename SyclType>
85 template <backend Backend,
typename SyclType>
90 template <backend Backend,
typename DataT,
int Dimensions,
typename AllocatorT>
98 ReturnValue = detail::pi::cast<ReturnType>(Handle[0]);
104 template <
typename DataT,
int Dimensions,
typename AllocatorT>
111 for (
auto &Obj : Handle) {
112 ReturnValue.push_back(
119 #if SYCL_EXT_ONEAPI_BACKEND_LEVEL_ZERO
129 "Buffer interop is not supported by level zero yet");
130 return Obj.template getNative<BackendName>();
135 template <backend BackendName,
class SyclObjectT>
138 if (Obj.get_backend() != BackendName) {
140 "Backends mismatch");
146 template <backend BackendName>
148 if (Obj.get_backend() != BackendName) {
150 "Backends mismatch");
152 int32_t IsImmCmdList;
156 RetVal = IsImmCmdList
167 template <backend BackendName, bundle_state State>
170 if (Obj.get_backend() != BackendName) {
172 "Backends mismatch");
174 return Obj.template getNative<BackendName>();
181 return detail::get_native_buffer<BackendName>(Obj);
184 #if SYCL_BACKEND_OPENCL
187 get_native<backend::opencl, event>(
const event &Obj) {
190 "Backends mismatch");
192 backend_return_t<backend::opencl, event> ReturnValue;
193 for (
auto const &element : Obj.getNativeVector()) {
194 ReturnValue.push_back(
203 #if SYCL_EXT_ONEAPI_BACKEND_CUDA
205 inline backend_return_t<backend::ext_oneapi_cuda, device>
206 get_native<backend::ext_oneapi_cuda, device>(
const device &Obj) {
209 "Backends mismatch");
213 return static_cast<backend_return_t<backend::ext_oneapi_cuda, device>
>(
223 typename detail::interop<
229 class kernel_bundle_impl;
239 int32_t nativeHandleDesc,
240 const context &TargetContext,
241 const device *TargetDevice,
bool KeepOwnership,
242 const property_list &PropList,
245 const context &TargetContext,
backend Backend);
247 const context &TargetContext,
bool KeepOwnership,
251 const context &TargetContext,
backend Backend);
253 const context &TargetContext,
254 const kernel_bundle<bundle_state::executable> &KernelBundle,
257 __SYCL_EXPORT std::shared_ptr<detail::kernel_bundle_impl>
260 __SYCL_EXPORT std::shared_ptr<detail::kernel_bundle_impl>
265 template <backend Backend>
272 detail::pi::cast<pi_native_handle>(BackendObject), Backend);
275 template <backend Backend>
276 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeDevice ==
true,
284 template <backend Backend>
285 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeContext ==
true,
295 template <backend Backend>
296 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeQueue ==
true,
304 false, TargetContext,
nullptr, KeepOwnership, {},
308 template <backend Backend>
309 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeEvent ==
true,
313 const context &TargetContext) {
315 TargetContext, Backend);
318 template <backend Backend>
320 std::enable_if_t<
detail::InteropFeatureSupportMap<Backend>::MakeEvent == true,
322 template input_type<
event>
325 bool KeepOwnership) {
327 TargetContext, KeepOwnership, Backend);
332 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeBuffer ==
338 const context &TargetContext,
event AvailableEvent = {}) {
339 return detail::make_buffer_helper<T, Dimensions, AllocatorT>(
340 detail::pi::cast<pi_native_handle>(BackendObject), TargetContext,
346 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeImage ==
true &&
348 image<Dimensions, AllocatorT>>
351 const context &TargetContext,
event AvailableEvent = {}) {
353 detail::pi::cast<pi_native_handle>(BackendObject), TargetContext,
357 template <backend Backend>
361 const context &TargetContext) {
363 TargetContext, Backend);
366 template <backend Backend, bundle_state State>
367 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeKernelBundle ==
372 const context &TargetContext) {
373 std::shared_ptr<detail::kernel_bundle_impl> KBImpl =
375 detail::pi::cast<pi_native_handle>(BackendObject), TargetContext,
376 false, State, Backend);
377 return detail::createSyclObjFromImpl<kernel_bundle<State>>(KBImpl);
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS IsPlaceholder
struct _ze_command_list_handle_t * ze_command_list_handle_t
Defines a shared image data.
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeQueue==true, queue > make_queue(const typename backend_traits< Backend >::template input_type< queue > &BackendObject, const context &TargetContext, const async_handler Handler={})
kernel make_kernel(const typename backend_traits< Backend >::template input_type< kernel > &BackendObject, const context &TargetContext)
std::shared_ptr< detail::kernel_bundle_impl > make_kernel_bundle(pi_native_handle NativeHandle, const context &TargetContext, bundle_state State, backend Backend)
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakePlatform==true, platform > make_platform(const typename backend_traits< Backend >::template input_type< platform > &BackendObject)
backend_return_t< backend::opencl, buffer< DataT, Dimensions, AllocatorT > > ReturnType
std::error_code make_error_code(sycl::errc E) noexcept
Constructs an error code using e and sycl_category()
Defines a shared array that can be used by kernels in queues.
struct _ze_command_queue_handle_t * ze_command_queue_handle_t
backend convertBackend(pi_platform_backend PiBackend)
queue make_queue(pi_native_handle NativeHandle, int32_t nativeHandleDesc, const context &TargetContext, const device *TargetDevice, bool KeepOwnership, const property_list &PropList, const async_handler &Handler, backend Backend)
auto get_native_buffer(const buffer< DataT, Dimensions, Allocator, void > &Obj) -> backend_return_t< BackendName, buffer< DataT, Dimensions, Allocator, void >>
---— Error handling, matching OpenCL plugin semantics.
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
backend_return_t< Backend, buffer< DataT, Dimensions, AllocatorT > > ReturnType
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor accessor(buffer< DataT, Dimensions, AllocatorT >) -> accessor< DataT, Dimensions, access::mode::read_write, target::device, access::placeholder::true_t >
Buffer accessor.
kernel make_kernel(pi_native_handle NativeHandle, const context &TargetContext, backend Backend)
An event object can be used to synchronize memory transfers, enqueues of kernels and signaling barrie...
#define __SYCL_DEPRECATED(message)
typename backend_traits< Backend >::template input_type< SyclType > backend_input_t
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeContext==true, context > make_context(const typename backend_traits< Backend >::template input_type< context > &BackendObject, const async_handler &Handler={})
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeDevice==true, device > make_device(const typename backend_traits< Backend >::template input_type< device > &BackendObject)
Encapsulates a single SYCL queue which schedules kernels on a SYCL device.
backend get_backend() const noexcept
Returns the backend associated with this platform.
The kernel_bundle class represents collection of device images in a particular state.
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeBuffer==true &&Backend !=backend::ext_oneapi_level_zero, buffer< T, Dimensions, AllocatorT > > make_buffer(const typename backend_traits< Backend >::template input_type< buffer< T, Dimensions, AllocatorT >> &BackendObject, const context &TargetContext, event AvailableEvent={})
typename backend_traits< Backend >::template return_type< SyclType > backend_return_t
detail::aligned_allocator< byte > image_allocator
platform make_platform(pi_native_handle NativeHandle, backend Backend)
The SYCL device class encapsulates a single SYCL device on which kernels may be executed.
static constexpr bool MakePlatform
static ReturnType GetNativeObjs(const std::vector< pi_native_handle > &Handle)
PiProgram cast(cl_program)=delete
uintptr_t pi_native_handle
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeKernelBundle==true, kernel_bundle< State > > make_kernel_bundle(const typename backend_traits< Backend >::template input_type< kernel_bundle< State >> &BackendObject, const context &TargetContext)
context make_context(pi_native_handle NativeHandle, const async_handler &Handler, backend Backend)
typename detail::BackendInput< Backend, T >::type input_type
static ReturnType GetNativeObjs(const std::vector< pi_native_handle > &Handle)
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeEvent==true, event > make_event(const typename backend_traits< Backend >::template input_type< event > &BackendObject, const context &TargetContext)
std::function< void(sycl::exception_list)> async_handler
device make_device(pi_native_handle NativeHandle, backend Backend)
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeImage==true &&Backend !=backend::ext_oneapi_level_zero, image< Dimensions, AllocatorT > > make_image(const typename backend_traits< Backend >::template input_type< image< Dimensions, AllocatorT >> &BackendObject, const context &TargetContext, event AvailableEvent={})
detail::sycl_memory_object_allocator< DataT > buffer_allocator
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS AccessMode
event make_event(pi_native_handle NativeHandle, const context &TargetContext, backend Backend)
auto get_native(const SyclObjectT &Obj) -> backend_return_t< BackendName, SyclObjectT >
typename detail::BackendReturn< Backend, T >::type return_type
The context class represents a SYCL context on which kernel functions may be executed.