1 #ifndef VIENNACL_LINALG_INNER_PROD_HPP_
2 #define VIENNACL_LINALG_INNER_PROD_HPP_
41 #ifdef VIENNACL_WITH_EIGEN
45 template<
typename VectorT1,
typename VectorT2 >
47 typename VectorT1::RealScalar>::type
48 inner_prod(VectorT1
const& v1, VectorT2
const& v2)
55 #ifdef VIENNACL_WITH_MTL4
59 template<
typename VectorT1,
typename VectorT2 >
61 typename VectorT1::value_type>::type
62 inner_prod(VectorT1
const& v1, VectorT2
const& v2)
65 return mtl::dot(v1, v2);
69 #ifdef VIENNACL_WITH_UBLAS
73 template<
typename VectorT1,
typename VectorT2 >
75 typename VectorT1::value_type>::type
76 inner_prod(VectorT1
const& v1, VectorT2
const& v2)
86 template<
typename VectorT1,
typename VectorT2 >
88 typename VectorT1::value_type>::type
91 assert(v1.size() == v2.size() && bool(
"Vector sizes mismatch"));
93 typename VectorT1::value_type result = 0;
94 for (
typename VectorT1::size_type i=0; i<v1.size(); ++i)
95 result += v1[i] * v2[i];
103 template<
typename NumericT>
106 vector_base<NumericT>
const & vector2)
110 const vector_base<NumericT>,
116 template<
typename LHS,
typename RHS,
typename OP,
typename NumericT>
118 const vector_base<NumericT>,
121 vector_base<NumericT>
const & vector2)
125 const vector_base<NumericT>,
130 template <
typename NumericT,
typename LHS,
typename RHS,
typename OP>
135 viennacl::vector_expression<LHS, RHS, OP>
const & vector2)
139 const viennacl::vector_expression<LHS, RHS, OP>,
144 template <
typename LHS1,
typename RHS1,
typename OP1,
145 typename LHS2,
typename RHS2,
typename OP2>
150 viennacl::vector_expression<LHS2, RHS2, OP2>
const & vector2)
153 return viennacl::scalar_expression< const viennacl::vector_expression<LHS1, RHS1, OP1>,
154 const viennacl::vector_expression<LHS2, RHS2, OP2>,
160 template<
typename NumericT>
163 vector_tuple<NumericT>
const & y_tuple)
166 const vector_tuple<NumericT>,
Simple enable-if variant that uses the SFINAE pattern.
Definition: enable_if.hpp:29
Dispatch facility for distinguishing between ublas, STL and ViennaCL types.
Common base class for dense vectors, vector ranges, and vector slices.
Definition: forwards.h:205
This file provides the forward declarations for the main types used within ViennaCL.
viennacl::enable_if< viennacl::is_stl< typename viennacl::traits::tag_of< VectorT1 >::type >::value, typename VectorT1::value_type >::type inner_prod(VectorT1 const &v1, VectorT2 const &v2)
Definition: inner_prod.hpp:89
viennacl::vector_expression< const vector_base< NumericT >, const vector_tuple< NumericT >, viennacl::op_inner_prod > inner_prod(vector_base< NumericT > const &x, vector_tuple< NumericT > const &y_tuple)
Definition: inner_prod.hpp:162
Tuple class holding pointers to multiple vectors. Mainly used as a temporary object returned from vie...
Definition: forwards.h:211
Main namespace in ViennaCL. Holds all the basic types such as vector, matrix, etc. and defines operations upon them.
Definition: cpu_ram.hpp:29
An expression template class that represents a binary operation that yields a vector.
Definition: forwards.h:181
A proxy for scalar expressions (e.g. from inner vector products)
Definition: forwards.h:175
A tag class representing inner products of two vectors.
Definition: forwards.h:150
A collection of compile time type deductions.
Simple enable-if variant that uses the SFINAE pattern.