00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
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