kokkos-utils 0.0.1
 
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_Core.hpp"
5
8
10
19
20using execution_space = Kokkos::DefaultExecutionSpace;
21
23{
24
25using namespace Kokkos::utils::callbacks;
26
28{
29public:
30 void SetUp() override {
31 this->exec = Kokkos::Experimental::partition_space(execution_space{}, 1)[0];
32 }
33
34protected:
36};
37
39TEST(Manager, singleton_traits)
40{
41 static_assert( ! std::is_copy_constructible_v<Manager>);
42 static_assert( ! std::is_copy_assignable_v <Manager>);
43
44 static_assert( ! std::is_move_constructible_v<Manager>);
45 static_assert( ! std::is_move_assignable_v <Manager>);
46}
47
55template <Event... EventTypes>
57{
58 template <Kokkos::utils::impl::IsTypeOneOf<EventTypes...> EventType>
59 void operator()(const EventType& event) {
60 std::get<std::vector<EventType>>(events).push_back(event);
61 }
62
63 std::tuple<std::vector<EventTypes>...> events {};
64};
65
67TEST_F(ManagerTest, dispatch_to_call_operators_of_single_listener)
68{
69 const auto tester_listener = std::make_shared<TesterListener<BeginParallelForEvent, EndParallelForEvent, BeginFenceEvent>>();
70
71 Manager::register_listener(tester_listener);
72
74
75 Manager::unregister_listener(tester_listener.get());
76
77 const auto& [begin_parallel_for_events, end_parallel_for_events, begin_fence_events] = tester_listener->events;
78
80 ASSERT_EQ(begin_parallel_for_events.size(), 1);
81 ASSERT_EQ(begin_parallel_for_events[0].name, "computation - level 0 - pfor");
82
84 ASSERT_EQ(end_parallel_for_events.size(), 1);
85 ASSERT_EQ(begin_parallel_for_events[0].event_id, end_parallel_for_events[0].event_id);
86
88 ASSERT_GT(begin_fence_events.size(), 2);
89 ASSERT_THAT(
90 begin_fence_events,
91 ::testing::Contains(::testing::Field(&BeginFenceEvent::name, ::testing::StrEq("computation - level 0 - fence after pfor")))
92 );
93 ASSERT_THAT(
94 begin_fence_events,
95 ::testing::Contains(::testing::Field(&BeginFenceEvent::name, ::testing::StrEq("other fence after stopping the profile section")))
96 );
97}
98
100TEST_F(ManagerTest, dispatch_to_call_operators_of_multiple_listeners)
101{
102 const auto tester_listener_a = std::make_shared<TesterListener<BeginParallelForEvent>>();
103 const auto tester_listener_b = std::make_shared<TesterListener<BeginParallelForEvent, EndParallelForEvent>>();
104
105 Manager::register_listener(tester_listener_a);
106 Manager::register_listener(tester_listener_b);
107
109
110 Manager::unregister_listener(tester_listener_a.get());
111 Manager::unregister_listener(tester_listener_b.get());
112
113 const auto& [begin_parallel_for_events_listener_a] = tester_listener_a->events;
114 const auto& [begin_parallel_for_events_listener_b, end_parallel_for_events_listener_b] = tester_listener_b->events;
115
117 ASSERT_EQ(begin_parallel_for_events_listener_a.size(), 1);
118 ASSERT_EQ(begin_parallel_for_events_listener_a[0].name, "computation - level 0 - pfor");
119 ASSERT_EQ(begin_parallel_for_events_listener_b.size(), 1);
120 ASSERT_EQ(begin_parallel_for_events_listener_b[0].name, "computation - level 0 - pfor");
121
123 ASSERT_EQ(end_parallel_for_events_listener_b.size(), 1);
124 ASSERT_EQ(begin_parallel_for_events_listener_b[0].event_id, end_parallel_for_events_listener_b[0].event_id);
125}
126
128TEST_F(ManagerTest, listener_from_lambda)
129{
130 bool matched = false;
131
132 using view_t = Kokkos::View<int, execution_space>;
133
134 const view_t my_src_view(Kokkos::view_alloc(Kokkos::WithoutInitializing, exec, "my rank-0 src view"));
135 const view_t my_dst_view(Kokkos::view_alloc(Kokkos::WithoutInitializing, exec, "my rank-0 dst view"));
136
137 auto listener_handle = Manager::register_listener(
138 [&](const BeginDeepCopyEvent& event) {
139 if (event.dst.size == sizeof(int) && event.src.ptr == my_src_view.data()
140 && event.dst.ptr == my_dst_view.data()) matched = true;
141 }
142 );
143
144 Kokkos::deep_copy(exec, my_dst_view, my_src_view);
145
146 ASSERT_TRUE(matched);
147
148 Manager::unregister_listener(listener_handle);
149}
150
151} // namespace Kokkos::utils::tests::callbacks
Class to manage Kokkos profiling callback calls.
Definition Manager.hpp:140
static void unregister_listener(const Callable *const callable)
Unregister a callable object as a listener.
Definition Manager.hpp:194
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:171
Check if T is the same as one of the types Ts.
TEST_F(ManagerTest, dispatch_to_call_operators_of_single_listener)
TEST(EventTest, BeginEvent)
Begin-deep-copy event associated with Kokkos::Tools::Experimental::EventSet::begin_deep_copy.
Definition Events.hpp:102
Listener that stores the events it receives.
std::tuple< std::vector< EventTypes >... > events
Kokkos::DefaultExecutionSpace execution_space