ViennaCL - The Vienna Computing Library  1.2.0
matrix_prod_kernel_class_deducer.hpp
Go to the documentation of this file.
1 #ifndef VIENNACL_TOOLS_MATRIX_PROD_KERNEL_CLASS_DEDUCER_HPP_
2 #define VIENNACL_TOOLS_MATRIX_PROD_KERNEL_CLASS_DEDUCER_HPP_
3 
4 /* =========================================================================
5  Copyright (c) 2010-2011, Institute for Microelectronics,
6  Institute for Analysis and Scientific Computing,
7  TU Wien.
8 
9  -----------------
10  ViennaCL - The Vienna Computing Library
11  -----------------
12 
13  Project Head: Karl Rupp rupp@iue.tuwien.ac.at
14 
15  (A list of authors and contributors can be found in the PDF manual)
16 
17  License: MIT (X11), see file LICENSE in the base directory
18 ============================================================================= */
19 
24 #include <string>
25 #include <fstream>
26 #include <sstream>
27 #include "viennacl/forwards.h"
36 
37 #include <vector>
38 #include <map>
39 
40 namespace viennacl
41 {
42  namespace tools
43  {
45  template <typename MatrixType1, typename MatrixType2, typename MatrixType3>
47  {};
48 
49  template <typename SCALARTYPE, unsigned int ALIGNMENT>
50  struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>,
51  viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>,
52  viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT> >
53  {
54  typedef viennacl::linalg::kernels::matrix_prod_row_row_row<SCALARTYPE, ALIGNMENT> ResultType;
55  };
56 
57  template <typename SCALARTYPE, unsigned int ALIGNMENT>
58  struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>,
59  viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>,
60  viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT> >
61  {
62  typedef viennacl::linalg::kernels::matrix_prod_row_row_col<SCALARTYPE, ALIGNMENT> ResultType;
63  };
64 
65  template <typename SCALARTYPE, unsigned int ALIGNMENT>
66  struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>,
67  viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>,
68  viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT> >
69  {
70  typedef viennacl::linalg::kernels::matrix_prod_row_col_row<SCALARTYPE, ALIGNMENT> ResultType;
71  };
72 
73  template <typename SCALARTYPE, unsigned int ALIGNMENT>
74  struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>,
75  viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>,
76  viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT> >
77  {
78  typedef viennacl::linalg::kernels::matrix_prod_row_col_col<SCALARTYPE, ALIGNMENT> ResultType;
79  };
80 
81 
82  template <typename SCALARTYPE, unsigned int ALIGNMENT>
83  struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>,
84  viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>,
85  viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT> >
86  {
87  typedef viennacl::linalg::kernels::matrix_prod_col_row_row<SCALARTYPE, ALIGNMENT> ResultType;
88  };
89 
90  template <typename SCALARTYPE, unsigned int ALIGNMENT>
91  struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>,
92  viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT>,
93  viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT> >
94  {
95  typedef viennacl::linalg::kernels::matrix_prod_col_row_col<SCALARTYPE, ALIGNMENT> ResultType;
96  };
97 
98  template <typename SCALARTYPE, unsigned int ALIGNMENT>
99  struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>,
100  viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>,
101  viennacl::matrix<SCALARTYPE, viennacl::row_major, ALIGNMENT> >
102  {
103  typedef viennacl::linalg::kernels::matrix_prod_col_col_row<SCALARTYPE, ALIGNMENT> ResultType;
104  };
105 
106  template <typename SCALARTYPE, unsigned int ALIGNMENT>
107  struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>,
108  viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT>,
109  viennacl::matrix<SCALARTYPE, viennacl::column_major, ALIGNMENT> >
110  {
111  typedef viennacl::linalg::kernels::matrix_prod_col_col_col<SCALARTYPE, ALIGNMENT> ResultType;
112  };
113 
114  }
115 
116 }
117 
118 #endif