dotc.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_BLAS_DOTC_H_
36 #define _BLAZE_MATH_BLAS_DOTC_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <blaze/math/Aliases.h>
48 #include <blaze/system/BLAS.h>
49 #include <blaze/system/Inline.h>
50 #include <blaze/util/Assert.h>
51 #include <blaze/util/Complex.h>
52 #include <blaze/util/NumericCast.h>
54 
55 
56 namespace blaze {
57 
58 //=================================================================================================
59 //
60 // BLAS WRAPPER FUNCTIONS (DOTC)
61 //
62 //=================================================================================================
63 
64 //*************************************************************************************************
67 #if BLAZE_BLAS_MODE
68 
69 BLAZE_ALWAYS_INLINE float dotc( int n, const float* x, int incX, const float* y, int incY );
70 
71 BLAZE_ALWAYS_INLINE double dotc( int n, const double* x, int incX, const double* y, int incY );
72 
73 BLAZE_ALWAYS_INLINE complex<float> dotc( int n, const complex<float>* x, int incX,
74  const complex<float>* y, int incY );
75 
76 BLAZE_ALWAYS_INLINE complex<double> dotc( int n, const complex<double>* x, int incX,
77  const complex<double>* y, int incY );
78 
79 template< typename VT1, bool TF1, typename VT2, bool TF2 >
80 BLAZE_ALWAYS_INLINE ElementType_<VT1> dotc( const DenseVector<VT1,TF1>& x, const DenseVector<VT2,TF2>& y );
81 
82 #endif
83 
84 //*************************************************************************************************
85 
86 
87 //*************************************************************************************************
88 #if BLAZE_BLAS_MODE
89 
103 BLAZE_ALWAYS_INLINE float dotc( int n, const float* x, int incX, const float* y, int incY )
104 {
105  return cblas_sdot( n, x, incX, y, incY );
106 }
107 #endif
108 //*************************************************************************************************
109 
110 
111 //*************************************************************************************************
112 #if BLAZE_BLAS_MODE
113 
127 BLAZE_ALWAYS_INLINE double dotc( int n, const double* x, int incX, const double* y, int incY )
128 {
129  return cblas_ddot( n, x, incX, y, incY );
130 }
131 #endif
132 //*************************************************************************************************
133 
134 
135 //*************************************************************************************************
136 #if BLAZE_BLAS_MODE
137 
152 BLAZE_ALWAYS_INLINE complex<float> dotc( int n, const complex<float>* x, int incX,
153  const complex<float>* y, int incY )
154 {
155  BLAZE_STATIC_ASSERT( sizeof( complex<float> ) == 2UL*sizeof( float ) );
156 
157  complex<float> tmp;
158 
159 #ifdef OPENBLAS_VERSION
160  cblas_cdotc_sub( n, reinterpret_cast<const float*>( x ), incX,
161  reinterpret_cast<const float*>( y ), incY,
162  reinterpret_cast<openblas_complex_float*>( &tmp ) );
163 #else
164  cblas_cdotc_sub( n, reinterpret_cast<const float*>( x ), incX,
165  reinterpret_cast<const float*>( y ), incY, &tmp );
166 #endif
167 
168  return tmp;
169 }
170 #endif
171 //*************************************************************************************************
172 
173 
174 //*************************************************************************************************
175 #if BLAZE_BLAS_MODE
176 
191 BLAZE_ALWAYS_INLINE complex<double> dotc( int n, const complex<double>* x, int incX,
192  const complex<double>* y, int incY )
193 {
194  BLAZE_STATIC_ASSERT( sizeof( complex<double> ) == 2UL*sizeof( double ) );
195 
196  complex<double> tmp;
197 
198 #ifdef OPENBLAS_VERSION
199  cblas_zdotc_sub( n, reinterpret_cast<const double*>( x ), incX,
200  reinterpret_cast<const double*>( y ), incY,
201  reinterpret_cast<openblas_complex_double*>( &tmp ) );
202 #else
203  cblas_zdotc_sub( n, reinterpret_cast<const double*>( x ), incX,
204  reinterpret_cast<const double*>( y ), incY, &tmp );
205 #endif
206 
207  return tmp;
208 }
209 #endif
210 //*************************************************************************************************
211 
212 
213 //*************************************************************************************************
214 #if BLAZE_BLAS_MODE
215 
227 template< typename VT1, bool TF1, typename VT2, bool TF2 >
228 ElementType_<VT1> dotc( const DenseVector<VT1,TF1>& x, const DenseVector<VT2,TF2>& y )
229 {
232 
235 
238 
239  const int n( numeric_cast<int>( (~x).size() ) );
240 
241  return dotc( n, (~x).data(), 1, (~y).data(), 1 );
242 }
243 #endif
244 //*************************************************************************************************
245 
246 } // namespace blaze
247 
248 #endif
Constraint on the data type.
Header file for auxiliary alias declarations.
#define BLAZE_CONSTRAINT_MUST_HAVE_CONST_DATA_ACCESS(T)
Constraint on the data type.In case the given data type T does not provide low-level data access to c...
Definition: ConstDataAccess.h:61
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:265
#define BLAZE_CONSTRAINT_MUST_NOT_BE_COMPUTATION_TYPE(T)
Constraint on the data type.In case the given data type T is a computational expression (i...
Definition: Computation.h:81
Header file for the DenseVector base class.
Cast operators for numeric types.
Constraint on the data type.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
Compile time assertion.
System settings for the BLAS mode.
Header file for run time assertion macros.
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.In case the given data type T is not a BLAS compatible data type (i...
Definition: BLASCompatible.h:61
Header file for the complex data type.
#define BLAZE_STATIC_ASSERT(expr)
Compile time assertion macro.In case of an invalid compile time expression, a compilation error is cr...
Definition: StaticAssert.h:112
System settings for the inline keywords.