38 template<
int N_LEFT,
typename T,
int NDIM,
int USD,
typename INDEX_TYPE >
39 std::enable_if_t< N_LEFT == 0, ArraySlice< T, NDIM, USD, INDEX_TYPE > >
54 template<
int N_LEFT,
typename T,
int NDIM,
int USD,
typename INDEX_TYPE >
55 std::enable_if_t< N_LEFT != 0,
ArraySlice< T, NDIM - N_LEFT, USD - N_LEFT, INDEX_TYPE > >
57 {
return slice< N_LEFT - 1 >( curSlice[ remainingIndices[ 0 ] ], remainingIndices + 1 ); }
73 template<
typename T,
int NDIM,
int USD,
typename DST_INDEX_TYPE,
typename SRC_INDEX_TYPE >
79 for(
int i = 0; i < NDIM; ++i )
86 std::size_t numBytes = dst.
size() *
sizeof( T );
107 template<
typename T,
int NDIM,
int USD,
typename DST_INDEX_TYPE,
typename SRC_INDEX_TYPE >
108 camp::resources::Event
memcpy( camp::resources::Resource & resource,
114 for(
int i = 0; i < NDIM; ++i )
121 std::size_t numBytes = dst.
size() *
sizeof( T );
152 template< std::size_t N_DST_INDICES, std::size_t N_SRC_INDICES,
typename T,
int DST_NDIM,
int DST_USD,
153 typename DST_INDEX_TYPE,
template<
typename >
class DST_BUFFER,
int SRC_NDIM,
int SRC_USD,
154 typename SRC_INDEX_TYPE,
template<
typename >
class SRC_BUFFER >
156 std::array< DST_INDEX_TYPE, N_DST_INDICES >
const & dstIndices,
158 std::array< SRC_INDEX_TYPE, N_SRC_INDICES >
const & srcIndices )
160 #if !defined( LVARRAY_USE_UMPIRE ) 168 ArraySlice< T, DST_NDIM - N_DST_INDICES, DST_USD - N_DST_INDICES, DST_INDEX_TYPE >
const dstSlice =
169 internal::slice< N_DST_INDICES >( dst.
toSlice(), dstIndices.data() );
171 ArraySlice< T
const, SRC_NDIM - N_SRC_INDICES, SRC_USD - N_SRC_INDICES, SRC_INDEX_TYPE >
const srcSlice =
172 internal::slice< N_SRC_INDICES >( src.
toSlice(), srcIndices.data() );
174 memcpy( dstSlice, srcSlice );
199 template< std::size_t N_DST_INDICES, std::size_t N_SRC_INDICES,
typename T,
int DST_NDIM,
int DST_USD,
200 typename DST_INDEX_TYPE,
template<
typename >
class DST_BUFFER,
int SRC_NDIM,
int SRC_USD,
201 typename SRC_INDEX_TYPE,
template<
typename >
class SRC_BUFFER >
202 camp::resources::Event
memcpy( camp::resources::Resource & resource,
204 std::array< DST_INDEX_TYPE, N_DST_INDICES >
const & dstIndices,
206 std::array< SRC_INDEX_TYPE, N_SRC_INDICES >
const & srcIndices )
211 ArraySlice< T, DST_NDIM - N_DST_INDICES, DST_USD - N_DST_INDICES, DST_INDEX_TYPE >
const dstSlice =
212 internal::slice< N_DST_INDICES >( dst.
toSlice(), dstIndices.data() );
214 ArraySlice< T
const, SRC_NDIM - N_SRC_INDICES, SRC_USD - N_SRC_INDICES, SRC_INDEX_TYPE >
const srcSlice =
215 internal::slice< N_SRC_INDICES >( src.
toSlice(), srcIndices.data() );
217 return memcpy( resource, dstSlice, srcSlice );
LVARRAY_HOST_DEVICE T * dataIfContiguous() const
Definition: ArraySlice.hpp:318
This class serves to provide a sliced multidimensional interface to the family of LvArray classes...
Definition: ArraySlice.hpp:89
std::enable_if_t< N_LEFT==0, ArraySlice< T, NDIM, USD, INDEX_TYPE > > slice(ArraySlice< T, NDIM, USD, INDEX_TYPE > const curSlice, INDEX_TYPE const *)
Specialization for when all the indices have been consumed.
Definition: memcpy.hpp:40
LVARRAY_HOST_DEVICE constexpr ArraySlice< T, NDIM, USD, INDEX_TYPE > toSlice() const &noexcept
Definition: ArrayView.hpp:308
#define LVARRAY_ERROR_IF_NE_MSG(lhs, rhs, msg)
Raise a hard error if two values are not equal.
Definition: Macros.hpp:344
LVARRAY_HOST_DEVICE constexpr INDEX_TYPE size() const noexcept
Definition: ArraySlice.hpp:170
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK void copy(DST_VECTOR &&LVARRAY_RESTRICT_REF dstVector, SRC_VECTOR const &LVARRAY_RESTRICT_REF srcVector)
Copy srcVector into dstVector.
Definition: genericTensorOps.hpp:360
Contains the LvArray umpire interface. This is only used to keep umpire/ResourceManager.hpp out of the includes for most headers.
This class serves to provide a "view" of a multidimensional array.
Definition: ArrayView.hpp:68
void memcpy(ArraySlice< T, NDIM, USD, DST_INDEX_TYPE > const dst, ArraySlice< T const, NDIM, USD, SRC_INDEX_TYPE > const src)
Use memcpy to copy src in to dst.
Definition: memcpy.hpp:74
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK INDEX_TYPE stride(int const dim) const noexcept
Definition: ArraySlice.hpp:203
void move(MemorySpace const space, bool const touch=true) const
Move the Array to the given execution space, optionally touching it.
Definition: ArrayView.hpp:690
The top level namespace.
Definition: Array.hpp:24
MemorySpace getPreviousSpace() const
Definition: ArrayView.hpp:674
#define LVARRAY_ERROR_IF_NE(lhs, rhs)
Raise a hard error if two values are not equal.
Definition: Macros.hpp:360
Contains the implementation of LvArray::ArrayView.