|
ViennaCL - The Vienna Computing Library
1.1.2
|
00001 #ifndef _VIENNACL_MATRIX_PROD_COL_ROW_ROW_KERNELS_HPP_ 00002 #define _VIENNACL_MATRIX_PROD_COL_ROW_ROW_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_prod_col_row_row_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_prod_col_row_row; 00018 00019 00021 template <> 00022 struct matrix_prod_col_row_row<float, 1> 00023 { 00024 static std::string program_name() 00025 { 00026 return "f_matrix_prod_col_row_row_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_prod_col_row_row_align1_prod_TT); 00037 source.append(matrix_prod_col_row_row_align1_prod_TA); 00038 source.append(matrix_prod_col_row_row_align1_prod_AA); 00039 source.append(matrix_prod_col_row_row_align1_prod_AT); 00040 std::string prog_name = program_name(); 00041 #ifdef VIENNACL_BUILD_INFO 00042 std::cout << "Creating program " << prog_name << std::endl; 00043 #endif 00044 context_.add_program(source, prog_name); 00045 viennacl::ocl::program & prog_ = context_.get_program(prog_name); 00046 prog_.add_kernel("prod_TT"); 00047 prog_.add_kernel("prod_TA"); 00048 prog_.add_kernel("prod_AA"); 00049 prog_.add_kernel("prod_AT"); 00050 init_done[context_.handle()] = true; 00051 } //if 00052 } //init 00053 }; // struct 00054 00055 00056 00058 template <> 00059 struct matrix_prod_col_row_row<double, 1> 00060 { 00061 static std::string program_name() 00062 { 00063 return "d_matrix_prod_col_row_row_1"; 00064 } 00065 static void init() 00066 { 00067 viennacl::ocl::DOUBLE_PRECISION_CHECKER<double>::apply(); 00068 static std::map<cl_context, bool> init_done; 00069 viennacl::ocl::context & context_ = viennacl::ocl::current_context(); 00070 if (!init_done[context_.handle()]) 00071 { 00072 std::string source; 00073 std::string fp64_ext = viennacl::ocl::current_device().double_support_extension(); 00074 source.append(viennacl::tools::make_double_kernel(matrix_prod_col_row_row_align1_prod_TT, fp64_ext)); 00075 source.append(viennacl::tools::make_double_kernel(matrix_prod_col_row_row_align1_prod_TA, fp64_ext)); 00076 source.append(viennacl::tools::make_double_kernel(matrix_prod_col_row_row_align1_prod_AA, fp64_ext)); 00077 source.append(viennacl::tools::make_double_kernel(matrix_prod_col_row_row_align1_prod_AT, fp64_ext)); 00078 std::string prog_name = program_name(); 00079 #ifdef VIENNACL_BUILD_INFO 00080 std::cout << "Creating program " << prog_name << std::endl; 00081 #endif 00082 context_.add_program(source, prog_name); 00083 viennacl::ocl::program & prog_ = context_.get_program(prog_name); 00084 prog_.add_kernel("prod_TT"); 00085 prog_.add_kernel("prod_TA"); 00086 prog_.add_kernel("prod_AA"); 00087 prog_.add_kernel("prod_AT"); 00088 init_done[context_.handle()] = true; 00089 } //if 00090 } //init 00091 }; // struct 00092 00093 00094 } //namespace kernels 00095 } //namespace linalg 00096 } //namespace viennacl 00097 #endif
1.7.6.1