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;
79 void lowerUpperSynchronize(
const Matrix& A,
Vector& y)
const;
80 void upperLowerSynchronize(
const Matrix& A,
Vector& y)
const;
86 void computeInvDiag(
const Matrix& a,
Vector& inv_diag)
const;
92 void axpy(Real alpha,
const Vector& x, Integer stride_x,
Vector& r, Integer stride_r)
const;
93 void aypx(Real alpha,
Vector& y, Integer stride_y,
const Vector& x, Integer stride_x)
const;
94 void copy(
const Vector& x, Integer stride_x,
Vector& r, Integer stride_r)
const;
99 void scal(Real alpha,
Vector& x)
const;
102 void reciprocal(
Vector& x)
const;
105 void assign(
Vector& x, Real alpha)
const;
107 template <
typename LambdaT>
108 void assign(
Vector& x, LambdaT
const& lambda)
const
114 template <
typename PrecondT>
115 void exec(PrecondT& precond,
Vector const& x,
Vector& y)
117 return precond.solve(*
this, x, y);
120 Integer computeCxr(
const Matrix& a, Matrix& cxr_a)
const ;
121 Integer computeCxr(
const Matrix& a, Vector
const& diag_scal, Matrix& cxr_a)
const ;
123 static ResourceType resource(Matrix
const& A);
125 void allocate(ResourceType resource, Vector& v);
127 template <
typename T0,
typename... T>
128 void allocate(ResourceType resource, T0& v0, T&... args)
130 allocate(resource, v0);
131 allocate(resource, args...);
134 void free(Vector& v);
136 template <
typename T0,
typename... T>
137 void free(T0& v0, T&... args)
144 std::unique_ptr<SYCLInternal::KernelInternal> m_internal;
145#ifdef ALIEN_USE_PERF_TIMER
146 mutable TimerType m_timer;
150class SYCLInternalLinearAlgebraExpr
154 SYCLInternalLinearAlgebraExpr();
155 virtual ~SYCLInternalLinearAlgebraExpr();
159 Real norm0(
const Vector& x)
const;
160 Real norm1(
const Vector& x)
const;
161 Real norm2(
const Vector& x)
const;
162 Real normInf(
const Vector& x)
const;
164 void axpy(Real alpha,
const Vector& x,
Vector& r)
const;
165 void aypx(Real alpha,
Vector& y,
const Vector& x)
const;
168 void scal(Real alpha,
Vector& x)
const;
170 void reciprocal(
Vector& x)
const;
173 Real norm2(
const Matrix& x)
const;
176 void scal(Real alpha,
Matrix& a)
const;
180 void mult(
const Matrix& a,
const UniqueArray<Real>& x, UniqueArray<Real>& r)
const;
181 void axpy(Real alpha, UniqueArray<Real>
const& x, UniqueArray<Real>& r)
const;
182 void aypx(Real alpha, UniqueArray<Real>& y, UniqueArray<Real>
const& x)
const;
183 void copy(
const UniqueArray<Real>& x, UniqueArray<Real>& r)
const;
184 Real dot(Integer local_size,
const UniqueArray<Real>& x,
const UniqueArray<Real>& y)
const;
186 void scal(Real alpha, UniqueArray<Real>& x)
const;
190 std::unique_ptr<SYCLInternal::KernelInternal> m_internal;