kokkos-utils
0.0.6
Toggle main menu visibility
Loading...
Searching...
No Matches
RecorderListener.hpp
Go to the documentation of this file.
1
#ifndef KOKKOS_UTILS_CALLBACKS_RECORDERLISTENER_HPP
2
#define KOKKOS_UTILS_CALLBACKS_RECORDERLISTENER_HPP
3
4
#include <deque>
5
#include <functional>
6
#include <mutex>
7
#include <variant>
8
9
#include "
kokkos-utils/callbacks/Listener.hpp
"
10
#include "
kokkos-utils/callbacks/Manager.hpp
"
11
#include "
kokkos-utils/callbacks/Matcher.hpp
"
12
13
namespace
Kokkos::utils::callbacks
14
{
15
16
template
<
typename
...>
17
class
RecorderListener
;
18
26
template
<
typename
MatcherType,
Event
... EventTypes>
requires
(
sizeof
...(EventTypes) > 0 &&
MatcherFor
<MatcherType, EventTypes...>)
27
class
RecorderListener<MatcherType, EventTypes...>
28
{
29
public
:
30
using
matcher_t
= MatcherType;
31
using
event_type_list_t
= Kokkos::Impl::type_list<EventTypes...>;
32
using
event_variant_t
= std::variant<EventTypes...>;
33
34
public
:
35
RecorderListener
() =
default
;
36
37
template
<
typename
T>
requires
std::same_as<std::remove_cvref_t<T>, MatcherType>
38
explicit
RecorderListener
(T&& matcher_)
39
:
matcher
(std::forward<T>(matcher_)) {}
40
41
RecorderListener
(
const
RecorderListener
&) =
delete
;
42
RecorderListener
&
operator=
(
const
RecorderListener
&) =
delete
;
43
RecorderListener
(
RecorderListener
&&) =
delete
;
44
RecorderListener
&
operator=
(
RecorderListener
&&) =
delete
;
45
47
template
<
EventOneOf
<EventTypes...> EventType>
48
void
operator()
(
const
EventType& event) {
49
if
(
matcher
(event)) {
50
const
std::lock_guard lock(
mtx
);
51
recorded_events
.push_back(event);
52
}
53
}
54
63
void
report
(std::ostream& out)
const
64
{
65
out <<
"Number of events recorded: "
<<
recorded_events
.size() << std::endl;
66
for
(
const
auto
& recorded_event :
recorded_events
) {
67
std::visit([&out] (
const
auto
& arg) { out <<
"- "
<< arg << std::endl; }, recorded_event);
68
}
69
}
70
72
template
<
typename
Callable>
73
static
auto
record
(Callable&& callable)
74
{
75
const
auto
recorder_listener = std::make_shared<RecorderListener>();
76
77
Manager::register_listener
(recorder_listener);
78
79
std::invoke(std::forward<Callable>(callable));
80
81
Manager::unregister_listener
(recorder_listener.get());
82
83
return
std::move(recorder_listener->recorded_events);
84
}
85
86
public
:
91
std::deque<event_variant_t>
recorded_events
{};
92
93
private
:
94
MatcherType
matcher
{};
95
mutable
std::mutex
mtx
;
96
};
97
98
template
<
typename
MatcherType,
Event
... EventTypes>
99
class
RecorderListener
<MatcherType,
Kokkos
::Impl::type_list<EventTypes...>> :
public
RecorderListener
<MatcherType, EventTypes...> {
100
using
RecorderListener
<MatcherType, EventTypes...>
::RecorderListener
;
101
};
102
103
template
<
Event
... EventTypes>
104
class
RecorderListener
<EventTypes...> :
public
RecorderListener
<AnyEventMatcher, EventTypes...> {};
105
106
template
<
Event
... EventTypes>
107
class
RecorderListener
<
Kokkos
::Impl::type_list<EventTypes...>> :
public
RecorderListener
<AnyEventMatcher, EventTypes...> {};
108
109
}
// namespace Kokkos::utils::callbacks
110
111
#endif
// KOKKOS_UTILS_CALLBACKS_RECORDERLISTENER_HPP
Listener.hpp
Matcher.hpp
Manager.hpp
Kokkos::utils::callbacks::Manager::unregister_listener
static void unregister_listener(const Callable *const callable)
Unregister a callable object as a listener.
Definition
Manager.hpp:197
Kokkos::utils::callbacks::Manager::register_listener
static listener_list_const_iter_t register_listener(std::shared_ptr< Callable > callable)
Register a callable object, passed as a shared pointer, as a listener.
Definition
Manager.hpp:174
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::record
static auto record(Callable &&callable)
Returns the events of the types EventTypes... that occur during the execution of callable.
Definition
RecorderListener.hpp:73
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::RecorderListener
RecorderListener(T &&matcher_)
Definition
RecorderListener.hpp:38
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::operator=
RecorderListener & operator=(RecorderListener &&)=delete
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::recorded_events
std::deque< event_variant_t > recorded_events
Definition
RecorderListener.hpp:91
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::operator=
RecorderListener & operator=(const RecorderListener &)=delete
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::RecorderListener
RecorderListener(RecorderListener &&)=delete
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::event_variant_t
std::variant< EventTypes... > event_variant_t
Definition
RecorderListener.hpp:32
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::RecorderListener
RecorderListener(const RecorderListener &)=delete
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::mtx
std::mutex mtx
Definition
RecorderListener.hpp:95
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::matcher
MatcherType matcher
Definition
RecorderListener.hpp:94
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::RecorderListener
RecorderListener()=default
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::matcher_t
MatcherType matcher_t
Definition
RecorderListener.hpp:30
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::operator()
void operator()(const EventType &event)
Ensure atomic growth of recorded_events with mtx.
Definition
RecorderListener.hpp:48
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::report
void report(std::ostream &out) const
Report the recorded events.
Definition
RecorderListener.hpp:63
Kokkos::utils::callbacks::RecorderListener< MatcherType, EventTypes... >::event_type_list_t
Kokkos::Impl::type_list< EventTypes... > event_type_list_t
Definition
RecorderListener.hpp:31
Kokkos::utils::callbacks::RecorderListener
Definition
RecorderListener.hpp:17
Kokkos::utils::callbacks::EventOneOf
Concept to constrain any event type that is one of the given event types.
Definition
Events.hpp:288
Kokkos::utils::callbacks::Event
Definition
Events.hpp:223
Kokkos::utils::callbacks::MatcherFor
Check that Callable is a matcher for each event in EventTypes.
Definition
Matcher.hpp:35
Kokkos::utils::callbacks
Definition
BeginEndTimerListener.hpp:12
Kokkos
Definition
InsertOp.hpp:9
include
kokkos-utils
callbacks
RecorderListener.hpp
Generated on
for kokkos-utils by
1.18.0