transform_reduce
#
Header File: Kokkos_StdAlgorithms.hpp
namespace Kokkos{
namespace Experimental{
//
// overload set A
//
template <
class ExecutionSpace, class IteratorType1,
class IteratorType2, class ValueType>
ValueType transform_reduce(const ExecutionSpace& exespace, (1)
IteratorType1 first1, IteratorType1 last1,
IteratorType2 first2,
ValueType init_reduction_value);
template <
class ExecutionSpace, class IteratorType1,
class IteratorType2, class ValueType>
ValueType transform_reduce(const std::string& label, (2)
const ExecutionSpace& exespace,
IteratorType1 first1, IteratorType1 last1,
IteratorType2 first2,
ValueType init_reduction_value);
template <
class ExecutionSpace,
class DataType1, class... Properties1,
class DataType2, class... Properties2,
class ValueType>
ValueType transform_reduce(const ExecutionSpace& exespace, (3)
const ::Kokkos::View<DataType1, Properties1...>& first_view,
const ::Kokkos::View<DataType2, Properties2...>& second_view,
ValueType init_reduction_value);
template <
class ExecutionSpace,
class DataType1, class... Properties1,
class DataType2, class... Properties2,
class ValueType>
ValueType transform_reduce(const std::string& label, (4)
const ExecutionSpace& exespace,
const ::Kokkos::View<DataType1, Properties1...>& first_view,
const ::Kokkos::View<DataType2, Properties2...>& second_view,
ValueType init_reduction_value);
//
// overload set B
//
template <
class ExecutionSpace,
class IteratorType1, class IteratorType2,
class ValueType,
class BinaryJoinerType, class BinaryTransform>
ValueType transform_reduce(const ExecutionSpace& exespace, (5)
IteratorType1 first1,
IteratorType1 last1, IteratorType2 first2,
ValueType init_reduction_value,
BinaryJoinerType joiner,
BinaryTransform binary_transformer);
template <
class ExecutionSpace,
class IteratorType1, class IteratorType2,
class ValueType,
class BinaryJoinerType, class BinaryTransform>
ValueType transform_reduce(const std::string& label, (6)
const ExecutionSpace& exespace,
IteratorType1 first1, IteratorType1 last1,
IteratorType2 first2,
ValueType init_reduction_value,
BinaryJoinerType joiner,
BinaryTransform binary_transformer);
template <
class ExecutionSpace,
class DataType1, class... Properties1,
class DataType2, class... Properties2,
class ValueType,
class BinaryJoinerType, class BinaryTransform>
ValueType transform_reduce(const ExecutionSpace& exespace, (7)
const ::Kokkos::View<DataType1, Properties1...>& first_view,
const ::Kokkos::View<DataType2, Properties2...>& second_view,
ValueType init_reduction_value,
BinaryJoinerType joiner,
BinaryTransform binary_transformer);
template <
class ExecutionSpace,
class DataType1, class... Properties1,
class DataType2, class... Properties2,
class ValueType,
class BinaryJoinerType, class BinaryTransform>
ValueType transform_reduce(const std::string& label, (8)
const ExecutionSpace& exespace,
const ::Kokkos::View<DataType1, Properties1...>& first_view,
const ::Kokkos::View<DataType2, Properties2...>& second_view,
ValueType init_reduction_value,
BinaryJoinerType joiner,
BinaryTransform binary_transformer);
//
// overload set C
//
template <
class ExecutionSpace,
class IteratorType, class ValueType,
class BinaryJoinerType, class UnaryTransform>
ValueType transform_reduce(const ExecutionSpace& exespace, (9)
IteratorType first1, IteratorType last1,
ValueType init_reduction_value,
BinaryJoinerType joiner,
UnaryTransform unary_transformer);
template <
class ExecutionSpace,
class IteratorType, class ValueType,
class BinaryJoinerType, class UnaryTransform>
ValueType transform_reduce(const std::string& label,
const ExecutionSpace& exespace, (10)
IteratorType first1, IteratorType last1,
ValueType init_reduction_value,
BinaryJoinerType joiner,
UnaryTransform unary_transformer);
template <
class ExecutionSpace,
class DataType, class... Properties, class ValueType,
class BinaryJoinerType, class UnaryTransform>
ValueType transform_reduce(const ExecutionSpace& exespace, (11)
const ::Kokkos::View<DataType, Properties...>& first_view,
ValueType init_reduction_value,
BinaryJoinerType joiner,
UnaryTransform unary_transformer);
template <
class ExecutionSpace,
class DataType, class... Properties, class ValueType,
class BinaryJoinerType, class UnaryTransform>
ValueType transform_reduce(const std::string& label, (12)
const ExecutionSpace& exespace,
const ::Kokkos::View<DataType, Properties...>& first_view,
ValueType init_reduction_value,
BinaryJoinerType joiner,
UnaryTransform unary_transformer);
} //end namespace Experimental
} //end namespace Kokkos
Description#
(1,2): performs the product (via
operator*
) between each pair of elements in the range[first1, last1)
and the range starting atfirst2
, and reduces the results along with the initial valueinit_reduction_value
(3,4): performs the product (via
operator*
) between each pair of elements infirst_view
andsecond_view
, and reduces the results along with the initial valueinit_reduction_value
(5,6): applies the functor
binary_transformer
to each pair of elements in the range[first1, last1)
and the range starting atfirst2
, and reduces the results along with the initial valueinit_reduction_value
with the join operation done via the binary functorjoiner
(7,8): applies the functor
binary_transformer
to each pair of elements infirst_view
andsecond_view
, and reduces the result along with the initial valueinit_reduction_value
with the join operation done via the binary functorjoiner
(9,10): applies the functor
unary_transformer
to each element in the range[first, last)
, and reduces the results along with the initial valueinit_reduction_value
with the join operation done via the binary functorjoiner
(11,12): applies the functor
unary_transformer
to each element inview
, and reduces the results along with the initial valueinit_reduction_value
with the join operation done via the binary functorjoiner
Parameters and Requirements#
exespace
:execution space instance
label
:used to name the implementation kernels for debugging purposes
for 1,5,9 the default string is: “Kokkos::transform_reduce_iterator_api_default”
for 3,7,11 the default string is: “Kokkos::transform_reduce_view_api_default”
first1
,last1
,first2
:ranges of elements to transform and reduce
must be random access iterators
must represent a valid range, i.e.,
last1 >= first1
(checked in debug mode)must be accessible from
exespace
first_view
,second_view
:views to transform and reduce
must be rank-1, and have
LayoutLeft
,LayoutRight
, orLayoutStride
must be accessible from
exespace
init_reduction_value
:initial reduction value to use
joiner
:binary functor performing the desired operation to join two elements. Must be valid to be called from the execution space passed, and callable with two arguments
a,b
of type (possible const)ValueType
, and must not modifya,b
.Must conform to:
struct JoinFunctor { KOKKOS_FUNCTION constexpr ValueType operator()(const ValueType& a, const ValueType& b) const { return /* ... */ } };
The behavior is non-deterministic if the
joiner
operation is not associative or not commutative.
binary_transformer
:binary functor applied to each pair of elements before doing the reduction. Must be valid to be called from the execution space passed, and callable with two arguments
a,b
of type (possible const)value_type_a
andvalue_type_b
, wherevalue_type_{a,b}
are the value types offirst1
andfirst2
(for 1,2,5,6) or the value types offirst_view
andsecond_view
(for 3,4,7,8), and must not modifya,b
.Must conform to:
struct BinaryTransformer { KOKKOS_FUNCTION constexpr return_type operator()(const value_type_a & a, const value_type_b & b) const { return /* ... */ } };
the
return_type
is such that it can be accepted by thejoiner
unary_transformer
:unary functor performing the desired operation to an element. Must be valid to be called from the execution space passed, and callable with an arguments
v
of type (possible const)value_type
, wherevalue_type
is the value type offirst1
(for 9,10) or the value type offirst_view
(for 11,12), and must not modifyv
.Must conform to:
struct UnaryTransformer { KOKKOS_FUNCTION constexpr value_type operator()(const value_type & v) const { return /* ... */ } };
Return#
The reduction result.