ryujin 2.1.1 revision 71cdc42292164f8095c0bd62c4ea75ebcfac58fa
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | List of all members
ryujin::ArrayReducer< ElementReducer > Struct Template Reference

#include <source/loop.h>

Public Types

using scalar_type = typename ElementReducer::value_type
 
using value_type = scalar_type[]
 

Public Member Functions

 ArrayReducer (scalar_type *data, const unsigned int n)
 
 ArrayReducer (std::vector< scalar_type > &values)
 
KOKKOS_INLINE_FUNCTION void init (scalar_type *values) const
 
KOKKOS_INLINE_FUNCTION void join (scalar_type *destination, const scalar_type *source) const
 
template<typename Contribution >
requires std::invocable<const Contribution &, unsigned int>
KOKKOS_INLINE_FUNCTION void join (scalar_type *destination, const Contribution &contribution) const
 
scalar_type * reference () const
 

Public Attributes

const unsigned int value_count
 

Detailed Description

template<typename ElementReducer>
struct ryujin::ArrayReducer< ElementReducer >

A reducer for reducing an array of values elementwise with a Kokkos reducer (such as Kokkos::Sum, Kokkos::Min, or Kokkos::Max) that can be used with reduction_loop(). The reducer takes a result object as argument in which it folds in contributions of the loop body:

std::vector<Number> sums(n_values, Number(0.));
reduction_loop<MemorySpace>(
"name", body, ArrayReducer<Kokkos::Sum<Number>>(sums), 0, n);

The loop body itself has to return a callable object j -> Number returning the j-th partial result that will be folded back into the result.

Definition at line 259 of file loop.h.

Member Typedef Documentation

◆ scalar_type

template<typename ElementReducer >
using ryujin::ArrayReducer< ElementReducer >::scalar_type = typename ElementReducer::value_type

Definition at line 260 of file loop.h.

◆ value_type

template<typename ElementReducer >
using ryujin::ArrayReducer< ElementReducer >::value_type = scalar_type[]

Definition at line 261 of file loop.h.

Constructor & Destructor Documentation

◆ ArrayReducer() [1/2]

template<typename ElementReducer >
ryujin::ArrayReducer< ElementReducer >::ArrayReducer ( scalar_type *  data,
const unsigned int  n 
)
inline

Definition at line 265 of file loop.h.

◆ ArrayReducer() [2/2]

template<typename ElementReducer >
ryujin::ArrayReducer< ElementReducer >::ArrayReducer ( std::vector< scalar_type > &  values)
inlineexplicit

Definition at line 272 of file loop.h.

Member Function Documentation

◆ init()

template<typename ElementReducer >
KOKKOS_INLINE_FUNCTION void ryujin::ArrayReducer< ElementReducer >::init ( scalar_type *  values) const
inline

Definition at line 278 of file loop.h.

References ryujin::ArrayReducer< ElementReducer >::value_count.

◆ join() [1/2]

template<typename ElementReducer >
KOKKOS_INLINE_FUNCTION void ryujin::ArrayReducer< ElementReducer >::join ( scalar_type *  destination,
const scalar_type *  source 
) const
inline

Definition at line 285 of file loop.h.

References ryujin::ArrayReducer< ElementReducer >::value_count.

◆ join() [2/2]

template<typename ElementReducer >
template<typename Contribution >
requires std::invocable<const Contribution &, unsigned int>
KOKKOS_INLINE_FUNCTION void ryujin::ArrayReducer< ElementReducer >::join ( scalar_type *  destination,
const Contribution &  contribution 
) const
inline

Definition at line 293 of file loop.h.

References ryujin::ArrayReducer< ElementReducer >::value_count.

◆ reference()

template<typename ElementReducer >
scalar_type * ryujin::ArrayReducer< ElementReducer >::reference ( ) const
inline

Definition at line 300 of file loop.h.

Member Data Documentation

◆ value_count

template<typename ElementReducer >
const unsigned int ryujin::ArrayReducer< ElementReducer >::value_count

The documentation for this struct was generated from the following file: