minmax_element
#
Header: <Kokkos_StdAlgorithms.hpp>
Description#
Finds the smallest and largest elements in a range or in a rank-1 View
using either operator<
to compare two elements or a user-provided comparison operator.
Interface#
Warning
This is currently inside the Kokkos::Experimental
namespace.
Overload set accepting execution space#
template <class ExecutionSpace, class IteratorType>
auto minmax_element(const ExecutionSpace& exespace, (1)
IteratorType first, IteratorType last);
template <class ExecutionSpace, class IteratorType>
auto minmax_element(const std::string& label, (2)
const ExecutionSpace& exespace,
IteratorType first, IteratorType last);
template <class ExecutionSpace, class IteratorType, class ComparatorType>
auto minmax_element(const ExecutionSpace& exespace, (3)
IteratorType first, IteratorType last,
ComparatorType comp);
template <class ExecutionSpace, class IteratorType, class ComparatorType>
auto minmax_element(const std::string& label, (4)
const ExecutionSpace& exespace,
IteratorType first, IteratorType last,
ComparatorType comp);
template <class ExecutionSpace, class DataType, class... Properties>
auto minmax_element(const ExecutionSpace& exespace, (5)
const ::Kokkos::View<DataType, Properties...>& view);
template <class ExecutionSpace, class DataType, class... Properties>
auto minmax_element(const std::string& label, (6)
const ExecutionSpace& exespace,
const ::Kokkos::View<DataType, Properties...>& view);
template <class ExecutionSpace, class DataType, class ComparatorType, class... Properties>
auto minmax_element(const ExecutionSpace& exespace, (7)
const ::Kokkos::View<DataType, Properties...>& view,
ComparatorType comp);
template <class ExecutionSpace, class DataType, class ComparatorType, class... Properties>
auto minmax_element(const std::string& label, (8)
const ExecutionSpace& exespace,
const ::Kokkos::View<DataType, Properties...>& view,
ComparatorType comp);
Overload set accepting a team handle#
New in version 4.2.
template <class TeamHandleType, class IteratorType>
KOKKOS_FUNCTION
auto minmax_element(const TeamHandleType& teamHandle, (9)
IteratorType first, IteratorType last);
template <class TeamHandleType, class IteratorType, class ComparatorType>
KOKKOS_FUNCTION
auto minmax_element(const TeamHandleType& teamHandle, (10)
IteratorType first, IteratorType last,
ComparatorType comp);
template <class TeamHandleType, class DataType, class... Properties>
KOKKOS_FUNCTION
auto minmax_element(const TeamHandleType& teamHandle, (11)
const ::Kokkos::View<DataType, Properties...>& view);
template <class TeamHandleType, class DataType, class ComparatorType,
class... Properties>
KOKKOS_FUNCTION
auto minmax_element(const TeamHandleType& teamHandle, (12)
const ::Kokkos::View<DataType, Properties...>& view,
ComparatorType comp);
Parameters and Requirements#
exespace
,first
,last
,view
,comp
: same as inmin_element
teamHandle
: team handle instance given inside a parallel region when using a TeamPolicylabel
: string forwarded to internal parallel kernels for debugging purposes1 and 3: The default string is “Kokkos::minmax_element_iterator_api_default”.
5 and 7: The default string is “Kokkos::minmax_element_view_api_default”.
NOTE: overloads accepting a team handle do not use a label internally
Return Value#
A Kokkos pair of iterators to the smallest and largest elements in that order.
The following special cases apply:
if the range
[first, last)
is empty it returnsKokkos::pair(first, first)
.if
view
is empty, it returnsKokkos::pair(Kokkos::Experimental::begin(view), Kokkos::Experimental::begin(view))
.if several elements are equivalent to the smallest element, the iterator to the first such element is returned.
if several elements are equivalent to the largest element, the iterator to the last such element is returned.
Example#
namespace KE = Kokkos::Experimental;
Kokkos::View<double*> a("a", 11);
auto itPair = KE::minmax_element(Kokkos::DefaultExecutionSpace(), KE::begin(a), KE::end(a));
// passing the view directly
auto itPair = KE::minmax_element(Kokkos::DefaultExecutionSpace(), a);
// using a custom comparator
template <class ValueType1, class ValueType2 = ValueType1>
struct CustomLessThanComparator {
KOKKOS_INLINE_FUNCTION
bool operator()(const ValueType1& a,
const ValueType2& b) const {
// here we use < but one can put any custom logic to return true if a is less than b
return a < b;
}
KOKKOS_INLINE_FUNCTION
CustomLessThanComparator() {}
};
// passing the view directly
auto res = KE::minmax_element(Kokkos::DefaultExecutionSpace(), a, CustomLessThanComparator<double>());