BioCMAMC-ST
cycle_reducer.hpp
1#ifndef __SIMULATIONS_KERNEL_REDUCER_HPP__
2#define __SIMULATIONS_KERNEL_REDUCER_HPP__
3
4#include <Kokkos_Core.hpp>
5#include <biocma_cst_config.hpp>
6#include <cassert>
7#include <common/common.hpp>
8#include <mc/alias.hpp>
9#include <mc/events.hpp>
10#include <mc/traits.hpp>
11
13{
15 {
17 std::size_t dead_total;
18 // std::size_t division;
19
20 KOKKOS_INLINE_FUNCTION CycleReducerType&
22 {
23 this->waiting_allocation_particle += a.waiting_allocation_particle;
24 this->dead_total += a.dead_total;
25 // this->division+=a.division;
26 return *this;
27 }
28 };
29
30 template <class Space> class CycleReducer
31 {
32 public:
33 // Required for Concept
36 using result_view_type = Kokkos::View<value_type, Space>;
37
38 KOKKOS_INLINE_FUNCTION
39 void
40 join(value_type& dest, const value_type& src) const
41 {
42 // dest.dead_total += src.dead_total;
43 // dest.waiting_allocation_particle += src.waiting_allocation_particle;
44 dest += src;
45 }
46
47 [[nodiscard]] KOKKOS_INLINE_FUNCTION value_type&
48 reference() const
49 {
50 return *value.data();
51 }
52
53 KOKKOS_INLINE_FUNCTION
55 view() const
56 {
57 return value;
58 }
59
60 [[nodiscard]] KOKKOS_INLINE_FUNCTION bool
62 {
64 }
65
66 // Optional
67 KOKKOS_INLINE_FUNCTION
68 void
69 init(value_type& val) const
70 {
71 val.dead_total = 0;
73 // val.division=0;
74 }
75
76 // KOKKOS_INLINE_FUNCTION
77 // void final(value_type& val) const
78 // {
79 // // NOP
80 // }
81
82 // Part of Build-In reducers for Kokkos
83 KOKKOS_INLINE_FUNCTION
84 explicit CycleReducer(value_type& value_)
85 : value(&value_), references_scalar_v(true)
86 {
87 }
88
89 KOKKOS_INLINE_FUNCTION
90 explicit CycleReducer(const result_view_type& value_)
91 : value(value_), references_scalar_v(false)
92 {
93 }
94
95 private:
98 };
99}
100
101#endif
Kokkos::View< value_type, Space > result_view_type
Definition cycle_reducer.hpp:36
KOKKOS_INLINE_FUNCTION CycleReducer(const result_view_type &value_)
Definition cycle_reducer.hpp:90
KOKKOS_INLINE_FUNCTION bool references_scalar() const
Definition cycle_reducer.hpp:61
CycleReducerType value_type
Definition cycle_reducer.hpp:35
KOKKOS_INLINE_FUNCTION void init(value_type &val) const
Definition cycle_reducer.hpp:69
KOKKOS_INLINE_FUNCTION result_view_type view() const
Definition cycle_reducer.hpp:55
KOKKOS_INLINE_FUNCTION void join(value_type &dest, const value_type &src) const
Definition cycle_reducer.hpp:40
KOKKOS_INLINE_FUNCTION CycleReducer(value_type &value_)
Definition cycle_reducer.hpp:84
KOKKOS_INLINE_FUNCTION value_type & reference() const
Definition cycle_reducer.hpp:48
bool references_scalar_v
Definition cycle_reducer.hpp:97
CycleReducer reducer
Definition cycle_reducer.hpp:34
result_view_type value
Definition cycle_reducer.hpp:96
Definition cycle_reducer.hpp:13
Definition cycle_reducer.hpp:15
KOKKOS_INLINE_FUNCTION CycleReducerType & operator+=(const CycleReducerType &a)
Definition cycle_reducer.hpp:21
std::size_t dead_total
Definition cycle_reducer.hpp:17
std::size_t waiting_allocation_particle
Definition cycle_reducer.hpp:16