Skip to content
This repository has been archived by the owner on Apr 15, 2024. It is now read-only.

Kokkos::subview

Christian Trott edited this page Sep 14, 2020 · 3 revisions

Kokkos::subview

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.

Synopsis

template <class ViewType, class... Args>
IMPL_DETAIL subview(const ViewType& v, Args ... args);

Description

  • template <class ViewType, class... Args>
    IMPL_DETAIL subview(const ViewType& v, Args ... args);

    Returns a new Kokkos::View s viewing a subset of v specified by args.... The return type of subview is an implementation detail and is determined by the types in Args....

    Subset selection:

    • For every integer argument in args... the rank of the returned view is one smaller than the rank of v and the values referenced by s correspond to the values associated with using the integer argument in the corresponding position during indexing into v.
    • Passing Kokkos::ALL as the rth argument is equivalent to passing pair<ptrdiff_t,ptrdiff_t>(0,v.extent(r)) as the rth argument.
    • If the rth argument arg_r is the dth range (std::pair, Kokkos::pair or Kokkos::ALL) in the argument list than s.extent(d) = arg_r.second-arg_r.first, and dimension d of s references the range [arg_r.first,arg_r.second) of dimension r of v.

    Restrictions:

    • sizeof...(args) is equal to ViewType::rank.
    • Valid arguments are of type:
      • std::pair<iType,iType> with std::is_integral<iType>::value being true.
      • Kokkos::pair<iType,iType> with std::is_integral<iType>::value being true.
      • iType with std::is_integral<iType>::value being true.
      • decltype(Kokkos::ALL)
    • If the rth argument arg_r is of type std::pair<iType,iType> or Kokkos::pair<iType,iType> it must meet:
      • arg_r.first >= 0
      • arg_r.second <= v.extent(r)
      • arg_r.first <= arg_r.second
    • If the rth argument arg_r is an integral it must meet:
      • arg_r >= 0
      • arg_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));
Clone this wiki locally