|
ViennaCL - The Vienna Computing Library
1.1.2
|
00001 #ifndef _VIENNACL_MATRIX_COL_KERNELS_HPP_ 00002 #define _VIENNACL_MATRIX_COL_KERNELS_HPP_ 00003 #include "viennacl/tools/tools.hpp" 00004 #include "viennacl/ocl/kernel.hpp" 00005 #include "viennacl/ocl/platform.hpp" 00006 #include "viennacl/ocl/utils.hpp" 00007 #include "viennacl/linalg/kernels/matrix_col_source.h" 00008 00009 //Automatically generated file from aux-directory, do not edit manually! 00010 namespace viennacl 00011 { 00012 namespace linalg 00013 { 00014 namespace kernels 00015 { 00016 template<class TYPE, unsigned int alignment> 00017 struct matrix_col; 00018 00019 00021 template <> 00022 struct matrix_col<float, 1> 00023 { 00024 static std::string program_name() 00025 { 00026 return "f_matrix_col_1"; 00027 } 00028 static void init() 00029 { 00030 viennacl::ocl::DOUBLE_PRECISION_CHECKER<float>::apply(); 00031 static std::map<cl_context, bool> init_done; 00032 viennacl::ocl::context & context_ = viennacl::ocl::current_context(); 00033 if (!init_done[context_.handle()]) 00034 { 00035 std::string source; 00036 source.append(matrix_col_align1_inplace_divide); 00037 source.append(matrix_col_align1_trans_lower_triangular_substitute_inplace); 00038 source.append(matrix_col_align1_trans_unit_upper_triangular_substitute_inplace); 00039 source.append(matrix_col_align1_sub); 00040 source.append(matrix_col_align1_scaled_rank1_update); 00041 source.append(matrix_col_align1_inplace_sub); 00042 source.append(matrix_col_align1_lower_triangular_substitute_inplace); 00043 source.append(matrix_col_align1_vec_mul); 00044 source.append(matrix_col_align1_lu_factorize); 00045 source.append(matrix_col_align1_rank1_update); 00046 source.append(matrix_col_align1_trans_upper_triangular_substitute_inplace); 00047 source.append(matrix_col_align1_unit_lower_triangular_substitute_inplace); 00048 source.append(matrix_col_align1_upper_triangular_substitute_inplace); 00049 source.append(matrix_col_align1_inplace_add); 00050 source.append(matrix_col_align1_trans_vec_mul); 00051 source.append(matrix_col_align1_trans_unit_lower_triangular_substitute_inplace); 00052 source.append(matrix_col_align1_cpu_inplace_mult); 00053 source.append(matrix_col_align1_clear); 00054 source.append(matrix_col_align1_inplace_mult); 00055 source.append(matrix_col_align1_unit_upper_triangular_substitute_inplace); 00056 source.append(matrix_col_align1_add); 00057 std::string prog_name = program_name(); 00058 #ifdef VIENNACL_BUILD_INFO 00059 std::cout << "Creating program " << prog_name << std::endl; 00060 #endif 00061 context_.add_program(source, prog_name); 00062 viennacl::ocl::program & prog_ = context_.get_program(prog_name); 00063 prog_.add_kernel("inplace_divide"); 00064 prog_.add_kernel("trans_lower_triangular_substitute_inplace"); 00065 prog_.add_kernel("trans_unit_upper_triangular_substitute_inplace"); 00066 prog_.add_kernel("sub"); 00067 prog_.add_kernel("scaled_rank1_update"); 00068 prog_.add_kernel("inplace_sub"); 00069 prog_.add_kernel("lower_triangular_substitute_inplace"); 00070 prog_.add_kernel("vec_mul"); 00071 prog_.add_kernel("lu_factorize"); 00072 prog_.add_kernel("rank1_update"); 00073 prog_.add_kernel("trans_upper_triangular_substitute_inplace"); 00074 prog_.add_kernel("unit_lower_triangular_substitute_inplace"); 00075 prog_.add_kernel("upper_triangular_substitute_inplace"); 00076 prog_.add_kernel("inplace_add"); 00077 prog_.add_kernel("trans_vec_mul"); 00078 prog_.add_kernel("trans_unit_lower_triangular_substitute_inplace"); 00079 prog_.add_kernel("cpu_inplace_mult"); 00080 prog_.add_kernel("clear"); 00081 prog_.add_kernel("inplace_mult"); 00082 prog_.add_kernel("unit_upper_triangular_substitute_inplace"); 00083 prog_.add_kernel("add"); 00084 init_done[context_.handle()] = true; 00085 } //if 00086 } //init 00087 }; // struct 00088 00089 template <> 00090 struct matrix_col<float, 16> 00091 { 00092 static std::string program_name() 00093 { 00094 return "f_matrix_col_16"; 00095 } 00096 static void init() 00097 { 00098 viennacl::ocl::DOUBLE_PRECISION_CHECKER<float>::apply(); 00099 static std::map<cl_context, bool> init_done; 00100 viennacl::ocl::context & context_ = viennacl::ocl::current_context(); 00101 if (!init_done[context_.handle()]) 00102 { 00103 std::string source; 00104 source.append(matrix_col_align1_inplace_divide); 00105 source.append(matrix_col_align1_trans_lower_triangular_substitute_inplace); 00106 source.append(matrix_col_align1_trans_unit_upper_triangular_substitute_inplace); 00107 source.append(matrix_col_align1_sub); 00108 source.append(matrix_col_align1_scaled_rank1_update); 00109 source.append(matrix_col_align1_inplace_sub); 00110 source.append(matrix_col_align1_lower_triangular_substitute_inplace); 00111 source.append(matrix_col_align1_vec_mul); 00112 source.append(matrix_col_align1_lu_factorize); 00113 source.append(matrix_col_align1_rank1_update); 00114 source.append(matrix_col_align1_trans_upper_triangular_substitute_inplace); 00115 source.append(matrix_col_align1_unit_lower_triangular_substitute_inplace); 00116 source.append(matrix_col_align1_upper_triangular_substitute_inplace); 00117 source.append(matrix_col_align1_inplace_add); 00118 source.append(matrix_col_align1_trans_vec_mul); 00119 source.append(matrix_col_align1_trans_unit_lower_triangular_substitute_inplace); 00120 source.append(matrix_col_align1_cpu_inplace_mult); 00121 source.append(matrix_col_align1_clear); 00122 source.append(matrix_col_align1_inplace_mult); 00123 source.append(matrix_col_align1_unit_upper_triangular_substitute_inplace); 00124 source.append(matrix_col_align1_add); 00125 std::string prog_name = program_name(); 00126 #ifdef VIENNACL_BUILD_INFO 00127 std::cout << "Creating program " << prog_name << std::endl; 00128 #endif 00129 context_.add_program(source, prog_name); 00130 viennacl::ocl::program & prog_ = context_.get_program(prog_name); 00131 prog_.add_kernel("inplace_divide"); 00132 prog_.add_kernel("trans_lower_triangular_substitute_inplace"); 00133 prog_.add_kernel("trans_unit_upper_triangular_substitute_inplace"); 00134 prog_.add_kernel("sub"); 00135 prog_.add_kernel("scaled_rank1_update"); 00136 prog_.add_kernel("inplace_sub"); 00137 prog_.add_kernel("lower_triangular_substitute_inplace"); 00138 prog_.add_kernel("vec_mul"); 00139 prog_.add_kernel("lu_factorize"); 00140 prog_.add_kernel("rank1_update"); 00141 prog_.add_kernel("trans_upper_triangular_substitute_inplace"); 00142 prog_.add_kernel("unit_lower_triangular_substitute_inplace"); 00143 prog_.add_kernel("upper_triangular_substitute_inplace"); 00144 prog_.add_kernel("inplace_add"); 00145 prog_.add_kernel("trans_vec_mul"); 00146 prog_.add_kernel("trans_unit_lower_triangular_substitute_inplace"); 00147 prog_.add_kernel("cpu_inplace_mult"); 00148 prog_.add_kernel("clear"); 00149 prog_.add_kernel("inplace_mult"); 00150 prog_.add_kernel("unit_upper_triangular_substitute_inplace"); 00151 prog_.add_kernel("add"); 00152 init_done[context_.handle()] = true; 00153 } //if 00154 } //init 00155 }; // struct 00156 00157 00158 00160 template <> 00161 struct matrix_col<double, 1> 00162 { 00163 static std::string program_name() 00164 { 00165 return "d_matrix_col_1"; 00166 } 00167 static void init() 00168 { 00169 viennacl::ocl::DOUBLE_PRECISION_CHECKER<double>::apply(); 00170 static std::map<cl_context, bool> init_done; 00171 viennacl::ocl::context & context_ = viennacl::ocl::current_context(); 00172 if (!init_done[context_.handle()]) 00173 { 00174 std::string source; 00175 std::string fp64_ext = viennacl::ocl::current_device().double_support_extension(); 00176 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_inplace_divide, fp64_ext)); 00177 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_lower_triangular_substitute_inplace, fp64_ext)); 00178 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_unit_upper_triangular_substitute_inplace, fp64_ext)); 00179 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_sub, fp64_ext)); 00180 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_scaled_rank1_update, fp64_ext)); 00181 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_inplace_sub, fp64_ext)); 00182 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_lower_triangular_substitute_inplace, fp64_ext)); 00183 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_vec_mul, fp64_ext)); 00184 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_lu_factorize, fp64_ext)); 00185 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_rank1_update, fp64_ext)); 00186 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_upper_triangular_substitute_inplace, fp64_ext)); 00187 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_unit_lower_triangular_substitute_inplace, fp64_ext)); 00188 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_upper_triangular_substitute_inplace, fp64_ext)); 00189 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_inplace_add, fp64_ext)); 00190 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_vec_mul, fp64_ext)); 00191 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_unit_lower_triangular_substitute_inplace, fp64_ext)); 00192 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_cpu_inplace_mult, fp64_ext)); 00193 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_clear, fp64_ext)); 00194 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_inplace_mult, fp64_ext)); 00195 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_unit_upper_triangular_substitute_inplace, fp64_ext)); 00196 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_add, fp64_ext)); 00197 std::string prog_name = program_name(); 00198 #ifdef VIENNACL_BUILD_INFO 00199 std::cout << "Creating program " << prog_name << std::endl; 00200 #endif 00201 context_.add_program(source, prog_name); 00202 viennacl::ocl::program & prog_ = context_.get_program(prog_name); 00203 prog_.add_kernel("inplace_divide"); 00204 prog_.add_kernel("trans_lower_triangular_substitute_inplace"); 00205 prog_.add_kernel("trans_unit_upper_triangular_substitute_inplace"); 00206 prog_.add_kernel("sub"); 00207 prog_.add_kernel("scaled_rank1_update"); 00208 prog_.add_kernel("inplace_sub"); 00209 prog_.add_kernel("lower_triangular_substitute_inplace"); 00210 prog_.add_kernel("vec_mul"); 00211 prog_.add_kernel("lu_factorize"); 00212 prog_.add_kernel("rank1_update"); 00213 prog_.add_kernel("trans_upper_triangular_substitute_inplace"); 00214 prog_.add_kernel("unit_lower_triangular_substitute_inplace"); 00215 prog_.add_kernel("upper_triangular_substitute_inplace"); 00216 prog_.add_kernel("inplace_add"); 00217 prog_.add_kernel("trans_vec_mul"); 00218 prog_.add_kernel("trans_unit_lower_triangular_substitute_inplace"); 00219 prog_.add_kernel("cpu_inplace_mult"); 00220 prog_.add_kernel("clear"); 00221 prog_.add_kernel("inplace_mult"); 00222 prog_.add_kernel("unit_upper_triangular_substitute_inplace"); 00223 prog_.add_kernel("add"); 00224 init_done[context_.handle()] = true; 00225 } //if 00226 } //init 00227 }; // struct 00228 00229 template <> 00230 struct matrix_col<double, 16> 00231 { 00232 static std::string program_name() 00233 { 00234 return "d_matrix_col_16"; 00235 } 00236 static void init() 00237 { 00238 viennacl::ocl::DOUBLE_PRECISION_CHECKER<double>::apply(); 00239 static std::map<cl_context, bool> init_done; 00240 viennacl::ocl::context & context_ = viennacl::ocl::current_context(); 00241 if (!init_done[context_.handle()]) 00242 { 00243 std::string source; 00244 std::string fp64_ext = viennacl::ocl::current_device().double_support_extension(); 00245 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_inplace_divide, fp64_ext)); 00246 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_lower_triangular_substitute_inplace, fp64_ext)); 00247 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_unit_upper_triangular_substitute_inplace, fp64_ext)); 00248 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_sub, fp64_ext)); 00249 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_scaled_rank1_update, fp64_ext)); 00250 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_inplace_sub, fp64_ext)); 00251 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_lower_triangular_substitute_inplace, fp64_ext)); 00252 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_vec_mul, fp64_ext)); 00253 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_lu_factorize, fp64_ext)); 00254 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_rank1_update, fp64_ext)); 00255 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_upper_triangular_substitute_inplace, fp64_ext)); 00256 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_unit_lower_triangular_substitute_inplace, fp64_ext)); 00257 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_upper_triangular_substitute_inplace, fp64_ext)); 00258 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_inplace_add, fp64_ext)); 00259 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_vec_mul, fp64_ext)); 00260 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_trans_unit_lower_triangular_substitute_inplace, fp64_ext)); 00261 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_cpu_inplace_mult, fp64_ext)); 00262 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_clear, fp64_ext)); 00263 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_inplace_mult, fp64_ext)); 00264 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_unit_upper_triangular_substitute_inplace, fp64_ext)); 00265 source.append(viennacl::tools::make_double_kernel(matrix_col_align1_add, fp64_ext)); 00266 std::string prog_name = program_name(); 00267 #ifdef VIENNACL_BUILD_INFO 00268 std::cout << "Creating program " << prog_name << std::endl; 00269 #endif 00270 context_.add_program(source, prog_name); 00271 viennacl::ocl::program & prog_ = context_.get_program(prog_name); 00272 prog_.add_kernel("inplace_divide"); 00273 prog_.add_kernel("trans_lower_triangular_substitute_inplace"); 00274 prog_.add_kernel("trans_unit_upper_triangular_substitute_inplace"); 00275 prog_.add_kernel("sub"); 00276 prog_.add_kernel("scaled_rank1_update"); 00277 prog_.add_kernel("inplace_sub"); 00278 prog_.add_kernel("lower_triangular_substitute_inplace"); 00279 prog_.add_kernel("vec_mul"); 00280 prog_.add_kernel("lu_factorize"); 00281 prog_.add_kernel("rank1_update"); 00282 prog_.add_kernel("trans_upper_triangular_substitute_inplace"); 00283 prog_.add_kernel("unit_lower_triangular_substitute_inplace"); 00284 prog_.add_kernel("upper_triangular_substitute_inplace"); 00285 prog_.add_kernel("inplace_add"); 00286 prog_.add_kernel("trans_vec_mul"); 00287 prog_.add_kernel("trans_unit_lower_triangular_substitute_inplace"); 00288 prog_.add_kernel("cpu_inplace_mult"); 00289 prog_.add_kernel("clear"); 00290 prog_.add_kernel("inplace_mult"); 00291 prog_.add_kernel("unit_upper_triangular_substitute_inplace"); 00292 prog_.add_kernel("add"); 00293 init_done[context_.handle()] = true; 00294 } //if 00295 } //init 00296 }; // struct 00297 00298 00299 } //namespace kernels 00300 } //namespace linalg 00301 } //namespace viennacl 00302 #endif
1.7.6.1