|
ViennaCL - The Vienna Computing Library
1.1.2
|
00001 /* ======================================================================= 00002 Copyright (c) 2010, Institute for Microelectronics, TU Vienna. 00003 http://www.iue.tuwien.ac.at 00004 ----------------- 00005 ViennaCL - The Vienna Computing Library 00006 ----------------- 00007 00008 authors: Karl Rupp rupp@iue.tuwien.ac.at 00009 Florian Rudolf flo.rudy+viennacl@gmail.com 00010 Josef Weinbub weinbub@iue.tuwien.ac.at 00011 00012 license: MIT (X11), see file LICENSE in the ViennaCL base directory 00013 ======================================================================= */ 00014 00015 #ifndef _VIENNACL_TOOLS_MATRIX_PROD_KERNEL_CLASS_DEDUCER_HPP_ 00016 #define _VIENNACL_TOOLS_MATRIX_PROD_KERNEL_CLASS_DEDUCER_HPP_ 00017 00022 #include <string> 00023 #include <fstream> 00024 #include <sstream> 00025 #include "viennacl/forwards.h" 00026 #include "viennacl/linalg/kernels/matrix_prod_col_col_col_kernels.h" 00027 #include "viennacl/linalg/kernels/matrix_prod_col_col_row_kernels.h" 00028 #include "viennacl/linalg/kernels/matrix_prod_col_row_col_kernels.h" 00029 #include "viennacl/linalg/kernels/matrix_prod_col_row_row_kernels.h" 00030 #include "viennacl/linalg/kernels/matrix_prod_row_col_col_kernels.h" 00031 #include "viennacl/linalg/kernels/matrix_prod_row_col_row_kernels.h" 00032 #include "viennacl/linalg/kernels/matrix_prod_row_row_col_kernels.h" 00033 #include "viennacl/linalg/kernels/matrix_prod_row_row_row_kernels.h" 00034 00035 #include <vector> 00036 #include <map> 00037 00038 namespace viennacl 00039 { 00040 namespace tools 00041 { 00043 template <typename MatrixType1, typename MatrixType2, typename MatrixType3> 00044 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER 00045 {}; 00046 00047 template <typename SCALARTYPE, unsigned int ALIGNMENT> 00048 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>, 00049 viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>, 00050 viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT> > 00051 { 00052 typedef viennacl::linalg::kernels::matrix_prod_row_row_row<SCALARTYPE, ALIGNMENT> ResultType; 00053 }; 00054 00055 template <typename SCALARTYPE, unsigned int ALIGNMENT> 00056 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>, 00057 viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>, 00058 viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT> > 00059 { 00060 typedef viennacl::linalg::kernels::matrix_prod_row_row_col<SCALARTYPE, ALIGNMENT> ResultType; 00061 }; 00062 00063 template <typename SCALARTYPE, unsigned int ALIGNMENT> 00064 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>, 00065 viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>, 00066 viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT> > 00067 { 00068 typedef viennacl::linalg::kernels::matrix_prod_row_col_row<SCALARTYPE, ALIGNMENT> ResultType; 00069 }; 00070 00071 template <typename SCALARTYPE, unsigned int ALIGNMENT> 00072 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>, 00073 viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>, 00074 viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT> > 00075 { 00076 typedef viennacl::linalg::kernels::matrix_prod_row_col_col<SCALARTYPE, ALIGNMENT> ResultType; 00077 }; 00078 00079 00080 template <typename SCALARTYPE, unsigned int ALIGNMENT> 00081 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>, 00082 viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>, 00083 viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT> > 00084 { 00085 typedef viennacl::linalg::kernels::matrix_prod_col_row_row<SCALARTYPE, ALIGNMENT> ResultType; 00086 }; 00087 00088 template <typename SCALARTYPE, unsigned int ALIGNMENT> 00089 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>, 00090 viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>, 00091 viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT> > 00092 { 00093 typedef viennacl::linalg::kernels::matrix_prod_col_row_col<SCALARTYPE, ALIGNMENT> ResultType; 00094 }; 00095 00096 template <typename SCALARTYPE, unsigned int ALIGNMENT> 00097 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>, 00098 viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>, 00099 viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT> > 00100 { 00101 typedef viennacl::linalg::kernels::matrix_prod_col_col_row<SCALARTYPE, ALIGNMENT> ResultType; 00102 }; 00103 00104 template <typename SCALARTYPE, unsigned int ALIGNMENT> 00105 struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>, 00106 viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>, 00107 viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT> > 00108 { 00109 typedef viennacl::linalg::kernels::matrix_prod_col_col_col<SCALARTYPE, ALIGNMENT> ResultType; 00110 }; 00111 00112 } 00113 00114 } 00115 00116 #endif
1.7.6.1