18 #ifdef ALPAKA_ACC_SYCL_ENABLED
20 # include <sycl/sycl.hpp>
25 template<
typename TDev>
26 class EventGenericSycl final
29 explicit EventGenericSycl(TDev
const& dev) : m_dev{dev}
33 friend auto operator==(EventGenericSycl
const& lhs, EventGenericSycl
const& rhs) ->
bool
35 return (lhs.m_event == rhs.m_event);
38 friend auto operator!=(EventGenericSycl
const& lhs, EventGenericSycl
const& rhs) ->
bool
48 void setEvent(sycl::event
const& event)
56 sycl::event m_event{};
63 template<
typename TDev>
64 struct GetDev<EventGenericSycl<TDev>>
66 static auto getDev(EventGenericSycl<TDev>
const& event) -> TDev
73 template<
typename TDev>
74 struct IsComplete<EventGenericSycl<TDev>>
76 static auto isComplete(EventGenericSycl<TDev>
const& event)
79 =
event.getNativeHandle().template get_info<sycl::info::event::command_execution_status>();
80 return (status == sycl::info::event_command_status::complete);
85 template<
typename TDev>
86 struct Enqueue<QueueGenericSyclNonBlocking<TDev>, EventGenericSycl<TDev>>
88 static auto enqueue(QueueGenericSyclNonBlocking<TDev>& queue, EventGenericSycl<TDev>& event)
90 event.setEvent(queue.m_spQueueImpl->get_last_event());
95 template<
typename TDev>
96 struct Enqueue<QueueGenericSyclBlocking<TDev>, EventGenericSycl<TDev>>
98 static auto enqueue(QueueGenericSyclBlocking<TDev>& queue, EventGenericSycl<TDev>& event)
100 event.setEvent(queue.m_spQueueImpl->get_last_event());
108 template<
typename TDev>
109 struct CurrentThreadWaitFor<EventGenericSycl<TDev>>
111 static auto currentThreadWaitFor(EventGenericSycl<TDev>
const& event)
113 event.getNativeHandle().wait_and_throw();
118 template<
typename TDev>
119 struct WaiterWaitFor<QueueGenericSyclNonBlocking<TDev>, EventGenericSycl<TDev>>
121 static auto waiterWaitFor(QueueGenericSyclNonBlocking<TDev>& queue, EventGenericSycl<TDev>
const& event)
123 queue.m_spQueueImpl->register_dependency(event.getNativeHandle());
128 template<
typename TDev>
129 struct WaiterWaitFor<QueueGenericSyclBlocking<TDev>, EventGenericSycl<TDev>>
131 static auto waiterWaitFor(QueueGenericSyclBlocking<TDev>& queue, EventGenericSycl<TDev>
const& event)
133 queue.m_spQueueImpl->register_dependency(event.getNativeHandle());
141 template<
typename TDev>
142 struct WaiterWaitFor<TDev, EventGenericSycl<TDev>>
144 static auto waiterWaitFor(TDev& dev, EventGenericSycl<TDev>
const& event)
146 dev.m_impl->register_dependency(event.getNativeHandle());
151 template<
typename TDev>
154 [[nodiscard]]
static auto getNativeHandle(EventGenericSycl<TDev>
const& event)
156 return event.getNativeHandle();
The alpaka accelerator library.
ALPAKA_FN_HOST auto isComplete(TEvent const &event) -> bool
Tests if the given event has already been completed.
constexpr ALPAKA_FN_HOST_ACC bool operator==(Complex< T > const &lhs, Complex< T > const &rhs)
Equality of two complex numbers.
decltype(getNativeHandle(std::declval< TImpl >())) NativeHandle
Alias to the type of the native handle.
ALPAKA_FN_HOST auto getDev(T const &t)
ALPAKA_FN_HOST auto getNativeHandle(TImpl const &impl)
Get the native handle of the alpaka object. It will return the alpaka object handle if there is any,...
ALPAKA_FN_HOST auto enqueue(TQueue &queue, TTask &&task) -> void
Queues the given task in the given queue.
constexpr ALPAKA_FN_HOST_ACC bool operator!=(Complex< T > const &lhs, Complex< T > const &rhs)
Inequality of two complex numbers.
static auto getNativeHandle(TImpl const &)