37class ALIEN_EXPORT SYCLInternalLinearAlgebra
44 typedef std::tuple<VectorDistribution const*,Integer> ResourceType;
46 class NullValueException
51 NullValueException(std::string
const& type)
52 : BaseType(type, __LINE__)
63 SYCLInternalLinearAlgebra();
64 virtual ~SYCLInternalLinearAlgebra();
66 void setDotAlgo(
int dot_algo);
70 Real norm0(
const Vector& x)
const;
71 Real norm1(
const Vector& x)
const;
72 Real norm2(
const Vector& x)
const;
73 Real normInf(
const Vector& x)
const;
83 void computeInvDiag(
const Matrix& a,
Vector& inv_diag)
const;
89 void axpy(Real alpha,
const Vector& x, Integer stride_x,
Vector& r, Integer stride_r)
const;
90 void aypx(Real alpha,
Vector& y, Integer stride_y,
const Vector& x, Integer stride_x)
const;
91 void copy(
const Vector& x, Integer stride_x,
Vector& r, Integer stride_r)
const;
96 void scal(Real alpha,
Vector& x)
const;
99 void reciprocal(
Vector& x)
const;
102 void assign(
Vector& x, Real alpha)
const;
104 template <
typename LambdaT>
105 void assign(
Vector& x, LambdaT
const& lambda)
const
111 template <
typename PrecondT>
112 void exec(PrecondT& precond,
Vector const& x,
Vector& y)
114 return precond.solve(*
this, x, y);
117 Integer computeCxr(
const Matrix& a, Matrix& cxr_a)
const ;
118 Integer computeCxr(
const Matrix& a, Vector
const& diag_scal, Matrix& cxr_a)
const ;
120 static ResourceType resource(Matrix
const& A);
122 void allocate(ResourceType resource, Vector& v);
124 template <
typename T0,
typename... T>
125 void allocate(ResourceType resource, T0& v0, T&... args)
127 allocate(resource, v0);
128 allocate(resource, args...);
131 void free(Vector& v);
133 template <
typename T0,
typename... T>
134 void free(T0& v0, T&... args)
141 std::unique_ptr<SYCLInternal::KernelInternal> m_internal;
142#ifdef ALIEN_USE_PERF_TIMER
143 mutable TimerType m_timer;
147class SYCLInternalLinearAlgebraExpr
151 SYCLInternalLinearAlgebraExpr();
152 virtual ~SYCLInternalLinearAlgebraExpr();
156 Real norm0(
const Vector& x)
const;
157 Real norm1(
const Vector& x)
const;
158 Real norm2(
const Vector& x)
const;
159 Real normInf(
const Vector& x)
const;
161 void axpy(Real alpha,
const Vector& x,
Vector& r)
const;
162 void aypx(Real alpha,
Vector& y,
const Vector& x)
const;
165 void scal(Real alpha,
Vector& x)
const;
167 void reciprocal(
Vector& x)
const;
170 Real norm2(
const Matrix& x)
const;
173 void scal(Real alpha,
Matrix& a)
const;
177 void mult(
const Matrix& a,
const UniqueArray<Real>& x, UniqueArray<Real>& r)
const;
178 void axpy(Real alpha, UniqueArray<Real>
const& x, UniqueArray<Real>& r)
const;
179 void aypx(Real alpha, UniqueArray<Real>& y, UniqueArray<Real>
const& x)
const;
180 void copy(
const UniqueArray<Real>& x, UniqueArray<Real>& r)
const;
181 Real dot(Integer local_size,
const UniqueArray<Real>& x,
const UniqueArray<Real>& y)
const;
183 void scal(Real alpha, UniqueArray<Real>& x)
const;
187 std::unique_ptr<SYCLInternal::KernelInternal> m_internal;