kokkos-utils
0.0.7
Toggle main menu visibility
Loading...
Searching...
No Matches
test_Manager.cpp
Go to the documentation of this file.
1
#include "gmock/gmock.h"
2
#include "gtest/gtest.h"
3
4
#include "Kokkos_Macros.hpp"
5
#ifdef KOKKOS_ENABLE_EXPERIMENTAL_CXX20_MODULES
6
import
kokkos.core;
7
#else
8
#include "Kokkos_Core.hpp"
9
#endif
10
11
#include "
kokkos-utils/callbacks/Helpers.hpp
"
12
#include "
kokkos-utils/impl/type_traits.hpp
"
13
#include "
kokkos-utils/tests/scoped/ExecutionSpace.hpp
"
14
#include "
kokkos-utils/tests/scoped/callbacks/Manager.hpp
"
15
16
#include "
tests/callbacks/TestWorkload.hpp
"
17
26
27
using
execution_space
= Kokkos::DefaultExecutionSpace;
28
29
namespace
Kokkos::utils::tests::callbacks
30
{
31
32
using namespace
Kokkos::utils::callbacks;
33
35
constexpr
bool
test_singleton_traits
()
36
{
37
static_assert
( ! std::is_copy_constructible_v<Manager>);
38
static_assert
( ! std::is_copy_assignable_v <Manager>);
39
40
static_assert
( ! std::is_move_constructible_v<Manager>);
41
static_assert
( ! std::is_move_assignable_v <Manager>);
42
43
return
true
;
44
}
45
static_assert
(
test_singleton_traits
());
46
51
TEST
(
Manager
, initialize_finalize)
52
{
53
ASSERT_FALSE(
Manager::is_initialized
());
54
55
Manager::initialize
();
56
ASSERT_TRUE(
Manager::is_initialized
());
57
58
const
auto
* ptr = std::addressof(
Manager::get_instance
());
59
60
Manager::initialize
();
61
ASSERT_TRUE(
Manager::is_initialized
());
62
63
ASSERT_EQ(ptr, std::addressof(
Manager::get_instance
()));
64
65
Manager::initialize
();
66
ASSERT_TRUE(
Manager::is_initialized
());
67
68
ASSERT_EQ(ptr, std::addressof(
Manager::get_instance
()));
69
70
Manager::finalize
();
71
ASSERT_FALSE(
Manager::is_initialized
());
72
73
Manager::finalize
();
74
ASSERT_FALSE(
Manager::is_initialized
());
75
76
Manager::finalize
();
77
ASSERT_FALSE(
Manager::is_initialized
());
78
}
79
84
TEST
(
Manager
,
dispatch
) {
85
ASSERT_FALSE(
Manager::is_initialized
());
86
87
dispatch
(
ProfileEvent
{});
88
}
89
94
TEST
(
Manager
,
get_next_event_id
) {
95
ASSERT_FALSE(
Manager::is_initialized
());
96
97
ASSERT_EQ(
get_next_event_id
(),
EventTraits::invalid_event_id
);
98
99
Manager::initialize
();
100
101
ASSERT_TRUE(
Manager::is_initialized
());
102
103
ASSERT_NE(
get_next_event_id
(),
EventTraits::invalid_event_id
);
104
105
Manager::finalize
();
106
}
107
108
class
ManagerTest
:
public
::testing::Test,
109
public
scoped::callbacks::Manager
,
110
public
scoped::ExecutionSpace
<execution_space>
111
{};
112
120
template
<Event... EventTypes>
121
struct
TesterListener
122
{
123
template
<
Kokkos::utils::impl::IsTypeOneOf
<EventTypes...> EventType>
124
void
operator()
(
const
EventType& event) {
125
std::get<std::vector<EventType>>(
events
).push_back(event);
126
}
127
128
std::tuple<std::vector<EventTypes>...>
events
{};
129
};
130
132
TEST_F
(
ManagerTest
, dispatch_to_call_operators_of_single_listener)
133
{
134
const
auto
tester_listener = std::make_shared<TesterListener<BeginParallelForEvent, EndParallelForEvent, BeginFenceEvent>>();
135
136
Kokkos::utils::callbacks::Manager::register_listener
(tester_listener);
137
138
MyWorkload<execution_space>
{}.
execute
(exec);
139
140
Kokkos::utils::callbacks::Manager::unregister_listener
(tester_listener.get());
141
142
const
auto
& [begin_parallel_for_events, end_parallel_for_events, begin_fence_events] = tester_listener->events;
143
145
ASSERT_EQ(begin_parallel_for_events.size(), 1);
146
ASSERT_EQ(begin_parallel_for_events[0].name,
"computation - level 0 - pfor"
);
147
149
ASSERT_EQ(end_parallel_for_events.size(), 1);
150
ASSERT_EQ(begin_parallel_for_events[0].event_id, end_parallel_for_events[0].event_id);
151
153
ASSERT_GT(begin_fence_events.size(), 2);
154
ASSERT_THAT(
155
begin_fence_events,
156
::testing::Contains(::testing::Field(&
BeginFenceEvent::name
, ::testing::StrEq(
"computation - level 0 - fence after pfor and single"
)))
157
);
158
ASSERT_THAT(
159
begin_fence_events,
160
::testing::Contains(::testing::Field(&
BeginFenceEvent::name
, ::testing::StrEq(
"other fence after stopping the profile section"
)))
161
);
162
}
163
165
TEST_F
(
ManagerTest
, dispatch_to_call_operators_of_multiple_listeners)
166
{
167
const
auto
tester_listener_a = std::make_shared<TesterListener<BeginParallelForEvent>>();
168
const
auto
tester_listener_b = std::make_shared<TesterListener<BeginParallelForEvent, EndParallelForEvent>>();
169
170
Kokkos::utils::callbacks::Manager::register_listener
(tester_listener_a);
171
Kokkos::utils::callbacks::Manager::register_listener
(tester_listener_b);
172
173
MyWorkload<execution_space>
{}.
execute
(exec);
174
175
Kokkos::utils::callbacks::Manager::unregister_listener
(tester_listener_a.get());
176
Kokkos::utils::callbacks::Manager::unregister_listener
(tester_listener_b.get());
177
178
const
auto
& [begin_parallel_for_events_listener_a] = tester_listener_a->events;
179
const
auto
& [begin_parallel_for_events_listener_b, end_parallel_for_events_listener_b] = tester_listener_b->events;
180
182
ASSERT_EQ(begin_parallel_for_events_listener_a.size(), 1);
183
ASSERT_EQ(begin_parallel_for_events_listener_a[0].name,
"computation - level 0 - pfor"
);
184
ASSERT_EQ(begin_parallel_for_events_listener_b.size(), 1);
185
ASSERT_EQ(begin_parallel_for_events_listener_b[0].name,
"computation - level 0 - pfor"
);
186
188
ASSERT_EQ(end_parallel_for_events_listener_b.size(), 1);
189
ASSERT_EQ(begin_parallel_for_events_listener_b[0].event_id, end_parallel_for_events_listener_b[0].event_id);
190
}
191
193
TEST_F
(
ManagerTest
, listener_from_lambda)
194
{
195
bool
matched =
false
;
196
197
using
view_t = Kokkos::View<int, execution_space>;
198
199
const
view_t my_src_view(Kokkos::view_alloc(Kokkos::WithoutInitializing, exec,
"my rank-0 src view"
));
200
const
view_t my_dst_view(Kokkos::view_alloc(Kokkos::WithoutInitializing, exec,
"my rank-0 dst view"
));
201
202
const
auto
listener_handle =
Kokkos::utils::callbacks::Manager::register_listener
(
203
[&](
const
BeginDeepCopyEvent
& event) {
204
if
(event.
dst
.
size
==
sizeof
(
int
) && event.
src
.
ptr
== my_src_view.data()
205
&& event.
dst
.
ptr
== my_dst_view.data()) matched =
true
;
206
}
207
);
208
209
Kokkos::deep_copy(exec, my_dst_view, my_src_view);
210
211
ASSERT_TRUE(matched);
212
213
Kokkos::utils::callbacks::Manager::unregister_listener
(listener_handle);
214
}
215
216
}
// namespace Kokkos::utils::tests::callbacks
ExecutionSpace.hpp
TestWorkload.hpp
Kokkos::utils::callbacks::Manager
Class to manage Kokkos profiling callback calls.
Definition
Manager.hpp:141
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::get_instance
static Manager & get_instance()
Definition
Manager.hpp:166
Kokkos::utils::callbacks::Manager::initialize
static void initialize()
Definition
Manager.hpp:161
Kokkos::utils::callbacks::Manager::is_initialized
static bool is_initialized()
Definition
Manager.hpp:164
Kokkos::utils::callbacks::Manager::finalize
static void finalize()
Definition
Manager.hpp:162
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::tests::callbacks::ManagerTest
Definition
test_Manager.cpp:111
Kokkos::utils::impl::IsTypeOneOf
Check if T is the same as one of the types Ts.
Definition
type_traits.hpp:37
Helpers.hpp
Kokkos::utils::callbacks::get_next_event_id
auto get_next_event_id() noexcept
If the Manager is initialized, return Manager::get_next_event_id. Otherwise, return EventTraits::inva...
Definition
Manager.hpp:492
Kokkos::utils::callbacks::dispatch
void dispatch(const EventType &event)
If the Manager is initialized, call Manager::dispatch with event.
Definition
Manager.hpp:486
Kokkos::utils::tests::callbacks
Definition
Helpers.hpp:7
Kokkos::utils::tests::callbacks::TEST_F
TEST_F(EnqueuedEventTimerTest, duration)
Definition
test_EnqueuedEventTimer.cpp:52
Kokkos::utils::tests::callbacks::test_singleton_traits
constexpr bool test_singleton_traits()
Definition
test_Manager.cpp:35
Kokkos::utils::tests::callbacks::TEST
TEST(EventTest, BeginEvent)
Definition
test_Events.cpp:28
Kokkos::utils::callbacks::AllocDescriptor::size
uint64_t size
Definition
Events.hpp:139
Kokkos::utils::callbacks::AllocDescriptor::ptr
const void * ptr
Definition
Events.hpp:138
Kokkos::utils::callbacks::BeginDeepCopyEvent
Begin-deep-copy event associated with Kokkos::Tools::Experimental::EventSet::begin_deep_copy.
Definition
Events.hpp:162
Kokkos::utils::callbacks::BeginDeepCopyEvent::src
AllocDescriptor src
Definition
Events.hpp:164
Kokkos::utils::callbacks::BeginDeepCopyEvent::dst
AllocDescriptor dst
Definition
Events.hpp:163
Kokkos::utils::callbacks::BeginFenceEvent::name
std::string name
Definition
Events.hpp:118
Kokkos::utils::callbacks::EventTraits::invalid_event_id
static constexpr event_id_t invalid_event_id
Definition
Events.hpp:25
Kokkos::utils::callbacks::ProfileEvent
Profile event associated with Kokkos::Tools::Experimental::EventSet::profile_event.
Definition
Events.hpp:224
Kokkos::utils::tests::callbacks::MyWorkload
Definition
TestWorkload.hpp:19
Kokkos::utils::tests::callbacks::MyWorkload::execute
void execute(const Exec &exec) const
Definition
TestWorkload.hpp:33
Kokkos::utils::tests::callbacks::TesterListener
Listener that stores the events it receives.
Definition
test_Manager.cpp:122
Kokkos::utils::tests::callbacks::TesterListener::operator()
void operator()(const EventType &event)
Definition
test_Manager.cpp:124
Kokkos::utils::tests::callbacks::TesterListener::events
std::tuple< std::vector< EventTypes >... > events
Definition
test_Manager.cpp:128
Kokkos::utils::tests::scoped::ExecutionSpace
Create a new execution space instance with RAII semantics.
Definition
ExecutionSpace.hpp:17
Kokkos::utils::tests::scoped::callbacks::Manager
Initializing and finalizing Kokkos::utils::callbacks::Manager in a RAII manner.
Definition
Manager.hpp:10
execution_space
Kokkos::DefaultExecutionSpace execution_space
Definition
test_InsertOp.cpp:13
Manager.hpp
type_traits.hpp
tests
callbacks
test_Manager.cpp
Generated on
for kokkos-utils by
1.18.0