46 #include <viennacl/linalg/matrix_operations.hpp>
47 #include <viennacl/linalg/vector_operations.hpp>
48 #endif // HAVE_VIENNACL
56 namespace implementation
62 template <enum Backend,
class Matrix>
66 typedef typename Matrix::Scalar
T;
76 static void compute(Matrix A, Matrix B, Matrix C,
T alpha,
T beta);
82 template <
class Matrix>
83 struct add<Backend::NATIVE, Matrix>
86 typedef typename Matrix::Scalar
T;
100 "Matrices should have same number of rows!\n");
102 "Matrices should have same number of columns!\n");
132 for (int32_t i=0; i<len; i++)
133 C[i]=alpha*A[i]+beta*B[i];
142 template <
class Matrix>
143 struct add<Backend::EIGEN3, Matrix>
146 typedef typename Matrix::Scalar
T;
169 C_eig=alpha*A_eig+beta*B_eig;
187 C_eig=alpha*A_eig+beta*B_eig;
190 #endif // HAVE_EIGEN3
197 template <
class Matrix>
198 struct add<Backend::VIENNACL, Matrix>
201 typedef typename Matrix::Scalar
T;
211 static void compute(CGPUMatrix<T> A, CGPUMatrix<T> B, CGPUMatrix<T> C,
214 C.vcl_matrix()=alpha*A.vcl_matrix()+beta*B.vcl_matrix();
225 static void compute(CGPUVector<T> A, CGPUVector<T> B, CGPUVector<T> C,
228 C.vcl_vector()=alpha*A.vcl_vector()+beta*B.vcl_vector();
232 #endif // HAVE_VIENNACL
239 #endif // ADD_IMPL_H_
static void compute(SGVector< T > A, SGVector< T > B, SGVector< T > C, T alpha=1, T beta=1)
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > MatrixXt
void add(Matrix A, Matrix B, Matrix C, typename Matrix::Scalar alpha=1.0, typename Matrix::Scalar beta=1.0)
Generic class which is specialized for different backends to perform addition.
Eigen::Matrix< T, Eigen::Dynamic, 1 > VectorXt
static void compute(Matrix A, Matrix B, Matrix C, T alpha, T beta)
static void compute(SGVector< T > A, SGVector< T > B, SGVector< T > C, T alpha, T beta)
static void compute(SGMatrix< T > A, SGMatrix< T > B, SGMatrix< T > C, T alpha, T beta)
static void compute(SGMatrix< T > A, SGMatrix< T > B, SGMatrix< T > C, T alpha=1, T beta=1)
static void compute(T *A, T *B, T *C, T alpha, T beta, index_t len)