|
ViennaCL - The Vienna Computing Library
1.4.2
|
00001 #ifndef VIENNACL_TOOLS_MATRIX_PROD_KERNEL_CLASS_DEDUCER_HPP_ 00002 #define VIENNACL_TOOLS_MATRIX_PROD_KERNEL_CLASS_DEDUCER_HPP_ 00003 00004 /* ========================================================================= 00005 Copyright (c) 2010-2013, Institute for Microelectronics, 00006 Institute for Analysis and Scientific Computing, 00007 TU Wien. 00008 Portions of this software are copyright by UChicago Argonne, LLC. 00009 00010 ----------------- 00011 ViennaCL - The Vienna Computing Library 00012 ----------------- 00013 00014 Project Head: Karl Rupp rupp@iue.tuwien.ac.at 00015 00016 (A list of authors and contributors can be found in the PDF manual) 00017 00018 License: MIT (X11), see file LICENSE in the base directory 00019 ============================================================================= */ 00020 00025 #include <string> 00026 #include <fstream> 00027 #include <sstream> 00028 #include "viennacl/forwards.h" 00029 #include "viennacl/linalg/kernels/matrix_prod_col_col_col_kernels.h" 00030 #include "viennacl/linalg/kernels/matrix_prod_col_col_row_kernels.h" 00031 #include "viennacl/linalg/kernels/matrix_prod_col_row_col_kernels.h" 00032 #include "viennacl/linalg/kernels/matrix_prod_col_row_row_kernels.h" 00033 #include "viennacl/linalg/kernels/matrix_prod_row_col_col_kernels.h" 00034 #include "viennacl/linalg/kernels/matrix_prod_row_col_row_kernels.h" 00035 #include "viennacl/linalg/kernels/matrix_prod_row_row_col_kernels.h" 00036 #include "viennacl/linalg/kernels/matrix_prod_row_row_row_kernels.h" 00037 00038 #include <vector> 00039 #include <map> 00040 00041 namespace viennacl 00042 { 00043 namespace tools 00044 { 00045 00047 template <typename MatrixType1, typename MatrixType2, typename MatrixType3> 00048 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER 00049 { 00050 typedef typename MatrixType1::ERROR_INVALID_TEMPLATE_ARGUMENTS_PROVIDED ResultType; 00051 }; 00052 00054 template <typename SCALARTYPE> 00055 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::row_major>, 00056 viennacl::matrix_base<SCALARTYPE, viennacl::row_major>, 00057 viennacl::matrix_base<SCALARTYPE, viennacl::row_major> > 00058 { 00059 typedef viennacl::linalg::kernels::matrix_prod_row_row_row<SCALARTYPE, 1> ResultType; 00060 }; 00061 00062 template <typename SCALARTYPE> 00063 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::row_major>, 00064 viennacl::matrix_base<SCALARTYPE, viennacl::row_major>, 00065 viennacl::matrix_base<SCALARTYPE, viennacl::column_major> > 00066 { 00067 typedef viennacl::linalg::kernels::matrix_prod_row_row_col<SCALARTYPE, 1> ResultType; 00068 }; 00069 00070 template <typename SCALARTYPE> 00071 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::row_major>, 00072 viennacl::matrix_base<SCALARTYPE, viennacl::column_major>, 00073 viennacl::matrix_base<SCALARTYPE, viennacl::row_major> > 00074 { 00075 typedef viennacl::linalg::kernels::matrix_prod_row_col_row<SCALARTYPE, 1> ResultType; 00076 }; 00077 00078 template <typename SCALARTYPE> 00079 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::row_major>, 00080 viennacl::matrix_base<SCALARTYPE, viennacl::column_major>, 00081 viennacl::matrix_base<SCALARTYPE, viennacl::column_major> > 00082 { 00083 typedef viennacl::linalg::kernels::matrix_prod_row_col_col<SCALARTYPE, 1> ResultType; 00084 }; 00085 00086 00087 template <typename SCALARTYPE> 00088 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::column_major>, 00089 viennacl::matrix_base<SCALARTYPE, viennacl::row_major>, 00090 viennacl::matrix_base<SCALARTYPE, viennacl::row_major> > 00091 { 00092 typedef viennacl::linalg::kernels::matrix_prod_col_row_row<SCALARTYPE, 1> ResultType; 00093 }; 00094 00095 template <typename SCALARTYPE> 00096 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::column_major>, 00097 viennacl::matrix_base<SCALARTYPE, viennacl::row_major>, 00098 viennacl::matrix_base<SCALARTYPE, viennacl::column_major> > 00099 { 00100 typedef viennacl::linalg::kernels::matrix_prod_col_row_col<SCALARTYPE, 1> ResultType; 00101 }; 00102 00103 template <typename SCALARTYPE> 00104 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::column_major>, 00105 viennacl::matrix_base<SCALARTYPE, viennacl::column_major>, 00106 viennacl::matrix_base<SCALARTYPE, viennacl::row_major> > 00107 { 00108 typedef viennacl::linalg::kernels::matrix_prod_col_col_row<SCALARTYPE, 1> ResultType; 00109 }; 00110 00111 template <typename SCALARTYPE> 00112 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::column_major>, 00113 viennacl::matrix_base<SCALARTYPE, viennacl::column_major>, 00114 viennacl::matrix_base<SCALARTYPE, viennacl::column_major> > 00115 { 00116 typedef viennacl::linalg::kernels::matrix_prod_col_col_col<SCALARTYPE, 1> ResultType; 00117 }; 00119 } 00120 00121 } 00122 00123 #endif
1.7.6.1