31 #ifndef SET_ROWS_CONST_IMPL_H_
32 #define SET_ROWS_CONST_IMPL_H_
46 #endif // HAVE_VIENNACL
54 namespace implementation
60 template <enum Backend,
class Matrix,
class Vector>
64 typedef typename Matrix::Scalar
T;
69 static void compute(Matrix A, Vector v);
75 template <
class Matrix,
class Vector>
79 typedef typename Matrix::Scalar
T;
95 A_eig.colwise() = v_eig;
103 template <
class Matrix,
class Vector>
104 struct set_rows_const<Backend::VIENNACL, Matrix, Vector>
107 typedef typename Matrix::Scalar
T;
111 static viennacl::ocl::kernel& generate_kernel()
113 std::string kernel_name =
"set_rows_const_" + ocl::get_type_string<T>();
115 if (ocl::kernel_exists(kernel_name))
116 return ocl::get_kernel(kernel_name);
118 std::string source = ocl::generate_kernel_preamble<T>(kernel_name);
122 __kernel void KERNEL_NAME(
123 __global DATATYPE* mat, int nrows, int ncols, int offset,
124 __global DATATYPE* vec, int vec_offset)
126 int i = get_global_id(0);
127 int j = get_global_id(1);
129 if (i>=nrows || j>=ncols)
132 mat[offset + i+j*nrows] = vec[i+offset];
137 viennacl::ocl::kernel& kernel = ocl::compile_kernel(kernel_name, source);
139 kernel.local_work_size(0, OCL_WORK_GROUP_SIZE_2D);
140 kernel.local_work_size(1, OCL_WORK_GROUP_SIZE_2D);
148 static void compute(CGPUMatrix<T> A, CGPUVector<T> v)
150 viennacl::ocl::kernel& kernel = generate_kernel<T>();
151 kernel.global_work_size(0, ocl::align_to_multiple_2d(A.num_rows));
152 kernel.global_work_size(1, ocl::align_to_multiple_2d(A.num_cols));
154 viennacl::ocl::enqueue(kernel(A.vcl_matrix(),
155 cl_int(A.num_rows), cl_int(A.num_cols), cl_int(A.offset),
156 v.vcl_vector(), cl_int(v.offset)));
160 #endif // HAVE_VIENNACL
167 #endif // SET_ROWS_CONST_IMPL_H_
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > MatrixXt
all of classes and functions are contained in the shogun namespace
Eigen::Matrix< T, Eigen::Dynamic, 1 > VectorXt
static void compute(Matrix A, Vector v)
static void compute(SGMatrix< T > A, SGVector< T > v)