adjacent_difference¶
Header File: Kokkos_StdAlgorithms.hpp
namespace Kokkos{
namespace Experimental{
template <class ExecutionSpace, class InputIteratorType, class OutputIteratorType>
OutputIteratorType adjacent_difference(const ExecutionSpace& exespace, (1)
InputIteratorType first_from,
InputIteratorType last_from,
OutputIteratorType first_dest);
template <class ExecutionSpace, class InputIteratorType, class OutputIteratorType, class BinaryOp>
OutputIteratorType adjacent_difference(const ExecutionSpace& exespace, (2)
InputIteratorType first_from,
InputIteratorType last_from,
OutputIteratorType first_dest,
BinaryOp bin_op);
template <class ExecutionSpace, class InputIteratorType, class OutputIteratorType>
OutputIteratorType adjacent_difference(const std::string& label, (3)
const ExecutionSpace& exespace,
InputIteratorType first_from,
InputIteratorType last_from,
OutputIteratorType first_dest);
template <class ExecutionSpace, class InputIteratorType, class OutputIteratorType, class BinaryOp>
OutputIteratorType adjacent_difference(const std::string& label, (4)
const ExecutionSpace& exespace,
InputIteratorType first_from,
InputIteratorType last_from,
OutputIteratorType first_dest,
BinaryOp bin_op);
template <
class ExecutionSpace,
class DataType1, class... Properties1,
class DataType2, class... Properties2>
auto adjacent_difference(const ExecutionSpace& exespace, (5)
const ::Kokkos::View<DataType1, Properties1...>& view_from,
const ::Kokkos::View<DataType2, Properties2...>& view_dest);
template <
class ExecutionSpace,
class DataType1, class... Properties1,
class DataType2, class... Properties2,
class BinaryOp>
auto adjacent_difference(const ExecutionSpace& exespace, (6)
const ::Kokkos::View<DataType1, Properties1...>& view_from,
const ::Kokkos::View<DataType2, Properties2...>& view_dest,
BinaryOp bin_op);
template <
class ExecutionSpace,
class DataType1, class... Properties1,
class DataType2, class... Properties2>
auto adjacent_difference(const std::string& label, (7)
const ExecutionSpace& exespace,
const ::Kokkos::View<DataType1, Properties1...>& view_from,
const ::Kokkos::View<DataType2, Properties2...>& view_dest);
template <
class ExecutionSpace,
class DataType1, class... Properties1,
class DataType2, class... Properties2,
class BinaryOp>
auto adjacent_difference(const std::string& label, (8)
const ExecutionSpace& exespace,
const ::Kokkos::View<DataType1, Properties1...>& view_from,
const ::Kokkos::View<DataType2, Properties2...>& view_dest,
BinaryOp bin_op);
} //end namespace Experimental
} //end namespace Kokkos
Description¶
(1,3,5,7): First, a copy of
*first_fromis written to*first_destfor (1,3), or a copy ofview_from(0)is written toview_dest(0)for (5,7). Second, it computes the difference between the second and the first of each adjacent pair of elements of the range[first_from, last_from)for (1,3) or inview_fromfor (5,7), and writes them to the range beginning atfirst_dest + 1for (1,3), orview_destfor (5,7).(2,4,6,8): First, a copy of
*first_fromis written to*first_destfor (2,4), or a copy ofview_from(0)is written toview_dest(0)for (6,8). Second, it calls the binary functor with the second and the first elements of each adjacent pair of elements of the range[first_from, last_from)for (2,4) or inview_fromfor (6,8), and writes them to the range beginning atfirst_dest + 1for (2,4), orview_destfor (6,8).
Parameters and Requirements¶
exespace:execution space instance
label:used to name the implementation kernels for debugging purposes
for 1,2 the default string is: “Kokkos::adjacent_difference_iterator_api_default”
for 5,6 the default string is: “Kokkos::adjacent_difference_view_api_default”
first_from,last_from,first_dest:range of elements to read from
*_fromand write tofirst_destmust be random access iterators
must represent a valid range, i.e.,
last_from >= first_from(checked in debug mode)must be accessible from
exespace
view_from,view_dest:views to read elements from
view_fromand write toview_destmust be rank-1, and have
LayoutLeft,LayoutRight, orLayoutStridemust be accessible from
exespace
bin_op:binary functor representing the operation to apply to each pair of elements. Must be valid to be called from the execution space passed, and callable with two arguments
a,bof type (possible const)value_type, wherevalue_typeis the value type ofInputIteratorType(for 1,2,3,4) or the value type ofview_from(for 5,6,7,8), and must not modifya,b.must conform to:
struct BinaryOp { KOKKOS_INLINE_FUNCTION return_type operator()(const value_type & a, const value_type & b) const { return /* ... */; } // or, also valid return_type operator()(value_type a, value_type b) const { return /* ... */; } };
The return type
return_typemust be such that an object of typeOutputIteratorTypefor (1,2,3,4) or an object of typevalue_typewherevalue_typeis the value type ofview_destfor (5,6,7,8) can be dereferenced and assigned a value of typereturn_type.
Return¶
Iterator to the element after the last element written.