1#ifndef included_AMP_VectorOperationsKokkos
2#define included_AMP_VectorOperationsKokkos
4#include "AMP/AMP_TPLs.h"
5#include "AMP/vectors/data/VectorData.h"
6#include "AMP/vectors/operations/default/VectorOperationsDefault.h"
10 #include "Kokkos_Core.hpp"
20template<
typename TYPE =
double>
21class VectorOperationsKokkos :
public VectorOperations
25 using ExecSpaceHost = Kokkos::DefaultHostExecutionSpace;
26 using ViewSpaceHost =
typename ExecSpaceHost::memory_space;
28 using ExecSpaceDevice = Kokkos::DefaultExecutionSpace;
29 using ViewSpaceDevice =
typename ExecSpaceDevice::memory_space;
30 using ViewSpaceManaged = Kokkos::SharedSpace;
34 VectorOperationsKokkos() : d_default_ops(
std::make_shared<VectorOperationsDefault<TYPE>>() ) {}
37 virtual ~VectorOperationsKokkos() =
default;
40 virtual std::shared_ptr<VectorOperations> cloneOperations()
const override;
44 std::string VectorOpName()
const override {
return "VectorOperationsKokkos"; }
45 void zero( VectorData &z )
override;
46 void setToScalar(
const Scalar &alpha, VectorData &z )
override;
47 void setRandomValues( VectorData &x )
override;
48 void copy(
const VectorData &x, VectorData &z )
override;
49 void copyCast(
const VectorData &x, VectorData &z )
override;
50 void scale(
const Scalar &alpha,
const VectorData &x, VectorData &y )
override;
51 void scale(
const Scalar &alpha, VectorData &x )
override;
52 void add(
const VectorData &x,
const VectorData &y, VectorData &z )
override;
53 void subtract(
const VectorData &x,
const VectorData &y, VectorData &z )
override;
54 void multiply(
const VectorData &x,
const VectorData &y, VectorData &z )
override;
55 void divide(
const VectorData &x,
const VectorData &y, VectorData &z )
override;
56 void reciprocal(
const VectorData &x, VectorData &y )
override;
57 void linearSum(
const Scalar &alpha,
61 VectorData &z )
override;
63 axpy(
const Scalar &alpha,
const VectorData &x,
const VectorData &y, VectorData &z )
override;
65 axpby(
const Scalar &alpha,
const Scalar &beta,
const VectorData &x, VectorData &y )
override;
66 void abs(
const VectorData &x, VectorData &z )
override;
67 void addScalar(
const VectorData &x,
const Scalar &alpha_in, VectorData &y )
override;
69 void setMax(
const Scalar &val, VectorData &x )
override;
70 void setMin(
const Scalar &val, VectorData &x )
override;
72 Scalar localMin(
const VectorData &x )
const override;
73 Scalar localMax(
const VectorData &x )
const override;
74 Scalar localSum(
const VectorData &x )
const override;
78 Scalar localDot(
const VectorData &x,
const VectorData &y )
const override;
79 Scalar localMinQuotient(
const VectorData &x,
const VectorData &y )
const override;
80 Scalar localWrmsNorm(
const VectorData &x,
const VectorData &y )
const override;
81 Scalar localWrmsNormMask(
const VectorData &x,
82 const VectorData &mask,
83 const VectorData &y )
const override;
84 bool localEquals(
const VectorData &x,
86 const Scalar &tol = 1e-6 )
const override;
89 ExecSpaceHost d_exec_host;
91 ExecSpaceDevice d_exec_device;
93 std::shared_ptr<VectorOperationsDefault<TYPE>> d_default_ops;
std::vector< Scalar > localL2Norm(std::shared_ptr< const Vector > vec, const std::vector< std::string > &names)
Perform multiple local L2 norms on vector subsets.
std::vector< Scalar > localL1Norm(std::shared_ptr< const Vector > vec, const std::vector< std::string > &names)
Perform multiple local L1 norms on vector subsets.
std::vector< Scalar > localMaxNorm(std::shared_ptr< const Vector > vec, const std::vector< std::string > &names)
Perform multiple local max norms on vector subsets.
constexpr TYPE abs(const AMP::Mesh::MeshPoint< TYPE > &x)
void copy(size_t N, const T1 *src, T2 *dst)
Perform copy with conversion if necessary.
void copyCast(const size_t len, const T1 *vec_in, T2 *vec_out)
void zero(void *dest, std::size_t count)
Perform memory zero (pointer may be in any memory space)