subview¶
Header File: <Kokkos_Core.hpp>
Usage¶
auto s = subview(view,std::pair<int,int>(5,191),Kokkos::ALL,1);
Creates a Kokkos::View representing a subset of another Kokkos::View.
Description¶
-
template<class ViewType, class ...Args>
IMPL_DETAIL subview(const ViewType &v, Args... args)¶ Returns a new
Kokkos::Viewsrepresenting a subset ofvspecified byargs.... The return type of subview is an implementation detail and is determined by the types inArgs....Subset selection:
For every integer argument in
args...the rank of the returned view is one smaller than the rank ofvand the values referenced byscorrespond to the values associated with using the integer argument in the corresponding position during indexing intov.Passing
Kokkos::ALL()as therth argument is equivalent to passingpair<ptrdiff_t,ptrdiff_t>(0,v.extent(r))as therth argument.If the
rth argumentarg_ris thedth range (std::pair,Kokkos::pairorKokkos::ALL()) in the argument list thans.extent(d) = arg_r.second-arg_r.first, and dimensiondofsreferences the range[arg_r.first,arg_r.second)of dimensionrofv.
Restrictions:
sizeof...(args)is equal toViewType::rank.Valid arguments are of type:
std::pair<iType,iType>withstd::is_integral<iType>::valuebeing true.Kokkos::pair<iType,iType>withstd::is_integral<iType>::valuebeing true.iTypewithstd::is_integral<iType>::valuebeing true.std::remove_const_t< decltype(Kokkos::ALL())>
If the
rth argumentarg_ris of typestd::pair<iType,iType>orKokkos::pair<iType,iType>it must meet:arg_r.first >= 0arg_r.second <= v.extent(r)arg_r.first <= arg_r.second
If the
rth argumentarg_ris an integral it must meet:arg_r >= 0arg_r < v.extent(r)
Examples¶
Kokkos::View<double***[5]> a("A",N0,N1,N2);
auto s = Kokkos::subview(a,
std::pair<int,int>(3,15),
5,
Kokkos::ALL,
Kokkos::ALL);
for(int i0 = 0; i0 < s.extent(0); i0++)
for(int i1 = 0; i1 < s.extent(1); i1++)
for(int i2 = 0; i2 < s.extent(2); i2++) {
assert(s(i0,i1,i2) == a(i0+3,5,i1,i2));
}
auto s3415 = Kokkos::subview(a,3,4,1,5);
assert(s3415() == a(3,4,1,5));