• Main Page
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

/data/development/ViennaCL/ViennaCL-1.1.2/viennacl/tools/matrix_prod_kernel_class_deducer.hpp

Go to the documentation of this file.
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

Generated on Sat May 21 2011 20:36:50 for ViennaCL - The Vienna Computing Library by  doxygen 1.7.1