This repository was archived by the owner on Apr 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Kokkos::subview
Christian Trott edited this page Sep 14, 2020
·
3 revisions
Header File: Kokkos_Core.hpp
Usage:
auto s = subview(view,std::pair<int,int>(5,191),Kokkos::ALL,1);Creates a Kokkos::View viewing a subset of another Kokkos::View.
template <class ViewType, class... Args>
IMPL_DETAIL subview(const ViewType& v, Args ... args);-
template <class ViewType, class... Args> IMPL_DETAIL subview(const ViewType& v, Args ... args);
Returns a new
Kokkos::Viewsviewing 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::ALLas 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. 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)
- For every integer argument in
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));Home:
- Introduction
- Machine Model
- Programming Model
- Compiling
- Initialization
- View
- Parallel Dispatch
- Hierarchical Parallelism
- Custom Reductions
- Atomic Operations
- Subviews
- Interoperability
- Kokkos and Virtual Functions
- Initialization and Finalization
- View
- Data Parallelism
- Execution Policies
- Spaces
- Task Parallelism
- Utilities
- STL Compatibility
- Numerics
- Detection Idiom