alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
Traits.hpp
Go to the documentation of this file.
1/* Copyright 2022 Benjamin Worpitz, Bernhard Manfred Gruber
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
10
11#include <type_traits>
12#include <utility>
13
14namespace alpaka
15{
16 struct ConceptQueue;
17
18 namespace concepts
19 {
20 template<typename TQueue>
21 concept Queue
22 = requires { requires interface::ImplementsInterface<ConceptQueue, std::decay_t<TQueue>>::value; };
23 } // namespace concepts
24
25 //! True if TQueue is a queue, i.e. if it implements the ConceptQueue concept.
26 template<typename TQueue>
27 [[deprecated("use the alpaka::concepts::Queue instead.")]] inline constexpr bool isQueue = concepts::Queue<TQueue>;
28
29 //! The queue traits.
30 namespace trait
31 {
32 //! The queue enqueue trait.
33 template<typename TQueue, typename TTask, typename TSfinae = void>
34 struct Enqueue;
35
36 //! The queue empty trait.
37 template<typename TQueue, typename TSfinae = void>
38 struct Empty;
39
40 //! Queue for an accelerator
41 template<typename TAcc, typename TProperty, typename TSfinae = void>
42 struct QueueType;
43 } // namespace trait
44
45 //! Queues the given task in the given queue.
46 //!
47 //! Special Handling for events:
48 //! If the event has previously been queued, then this call will overwrite any existing state of the event.
49 //! Any subsequent calls which examine the status of event will only examine the completion of this most recent
50 //! call to enqueue.
51 //! If a queue is waiting for an event the latter's event state at the time of the API call to wait() will be
52 //! used to release the queue.
53 template<typename TQueue, typename TTask>
54 ALPAKA_FN_HOST auto enqueue(TQueue& queue, TTask&& task) -> void
55 {
56 trait::Enqueue<TQueue, std::decay_t<TTask>>::enqueue(queue, std::forward<TTask>(task));
57 }
58
59 //! Tests if the queue is empty (all ops in the given queue have been completed).
60 //!
61 //! \warning This function is allowed to return false negatives. An empty queue can reported as
62 //! non empty because the status information are not fully propagated by the used alpaka backend.
63 //! \return true queue is empty else false.
64 template<typename TQueue>
65 ALPAKA_FN_HOST auto empty(TQueue const& queue) -> bool
66 {
69 }
70
71 //! Queue based on the environment and a property
72 //!
73 //! \tparam TEnv Environment type, e.g. accelerator, device or a platform.
74 //! trait::QueueType must be specialized for TEnv
75 //! \tparam TProperty Property to define the behavior of TEnv.
76 template<typename TEnv, typename TProperty>
78} // namespace alpaka
#define ALPAKA_FN_HOST
Definition Common.hpp:43
typename detail::ImplementationBaseType< TInterface, TDerived >::type ImplementationBase
Returns the type that implements the given interface in the inheritance hierarchy.
Definition Interface.hpp:66
The alpaka accelerator library.
typename trait::QueueType< TEnv, TProperty >::type Queue
Queue based on the environment and a property.
Definition Traits.hpp:77
constexpr bool isQueue
True if TQueue is a queue, i.e. if it implements the ConceptQueue concept.
Definition Traits.hpp:27
ALPAKA_FN_HOST auto empty(TQueue const &queue) -> bool
Tests if the queue is empty (all ops in the given queue have been completed).
Definition Traits.hpp:65
ALPAKA_FN_HOST auto enqueue(TQueue &queue, TTask &&task) -> void
Queues the given task in the given queue.
Definition Traits.hpp:54
The queue empty trait.
Definition Traits.hpp:38
The queue enqueue trait.
Definition Traits.hpp:34
Queue for an accelerator.
Definition Traits.hpp:42