1 #ifndef VIENNACL_LINALG_HOST_BASED_SCALAR_OPERATIONS_HPP_
2 #define VIENNACL_LINALG_HOST_BASED_SCALAR_OPERATIONS_HPP_
40 template <
typename S1,
41 typename S2,
typename ScalarType1>
47 S2
const & s2, ScalarType1
const & alpha,
vcl_size_t ,
bool reciprocal_alpha,
bool flip_sign_alpha)
51 value_type * data_s1 = detail::extract_raw_pointer<value_type>(s1);
52 value_type
const * data_s2 = detail::extract_raw_pointer<value_type>(s2);
54 value_type data_alpha = alpha;
56 data_alpha = -data_alpha;
58 data_alpha =
static_cast<value_type
>(1) / data_alpha;
60 *data_s1 = *data_s2 * data_alpha;
64 template <
typename S1,
65 typename S2,
typename ScalarType1,
66 typename S3,
typename ScalarType2>
74 S2
const & s2, ScalarType1
const & alpha,
vcl_size_t ,
bool reciprocal_alpha,
bool flip_sign_alpha,
75 S3
const & s3, ScalarType2
const & beta,
vcl_size_t ,
bool reciprocal_beta,
bool flip_sign_beta)
79 value_type * data_s1 = detail::extract_raw_pointer<value_type>(s1);
80 value_type
const * data_s2 = detail::extract_raw_pointer<value_type>(s2);
81 value_type
const * data_s3 = detail::extract_raw_pointer<value_type>(s3);
83 value_type data_alpha = alpha;
85 data_alpha = -data_alpha;
87 data_alpha =
static_cast<value_type
>(1) / data_alpha;
89 value_type data_beta = beta;
91 data_beta = -data_beta;
93 data_beta =
static_cast<value_type
>(1) / data_beta;
95 *data_s1 = *data_s2 * data_alpha + *data_s3 * data_beta;
99 template <
typename S1,
100 typename S2,
typename ScalarType1,
101 typename S3,
typename ScalarType2>
109 S2
const & s2, ScalarType1
const & alpha,
vcl_size_t ,
bool reciprocal_alpha,
bool flip_sign_alpha,
110 S3
const & s3, ScalarType2
const & beta,
vcl_size_t ,
bool reciprocal_beta,
bool flip_sign_beta)
114 value_type * data_s1 = detail::extract_raw_pointer<value_type>(s1);
115 value_type
const * data_s2 = detail::extract_raw_pointer<value_type>(s2);
116 value_type
const * data_s3 = detail::extract_raw_pointer<value_type>(s3);
118 value_type data_alpha = alpha;
120 data_alpha = -data_alpha;
121 if (reciprocal_alpha)
122 data_alpha =
static_cast<value_type
>(1) / data_alpha;
124 value_type data_beta = beta;
126 data_beta = -data_beta;
128 data_beta =
static_cast<value_type
>(1) / data_beta;
130 *data_s1 += *data_s2 * data_alpha + *data_s3 * data_beta;
139 template <
typename S1,
typename S2>
147 value_type * data_s1 = detail::extract_raw_pointer<value_type>(s1);
148 value_type * data_s2 = detail::extract_raw_pointer<value_type>(s2);
150 value_type temp = *data_s2;
Simple enable-if variant that uses the SFINAE pattern.
Definition: enable_if.hpp:29
std::size_t vcl_size_t
Definition: forwards.h:58
Generic size and resize functionality for different vector and matrix types.
Extracts the underlying OpenCL start index handle from a vector, a matrix, an expression etc...
This file provides the forward declarations for the main types used within ViennaCL.
Determines row and column increments for matrices and matrix proxies.
viennacl::enable_if< viennacl::is_scalar< S1 >::value &&viennacl::is_scalar< S2 >::value &&viennacl::is_scalar< S3 >::value &&viennacl::is_any_scalar< ScalarType1 >::value &&viennacl::is_any_scalar< ScalarType2 >::value >::type asbs(S1 &s1, S2 const &s2, ScalarType1 const &alpha, vcl_size_t, bool reciprocal_alpha, bool flip_sign_alpha, S3 const &s3, ScalarType2 const &beta, vcl_size_t, bool reciprocal_beta, bool flip_sign_beta)
Definition: scalar_operations.hpp:73
viennacl::enable_if< viennacl::is_scalar< S1 >::value &&viennacl::is_scalar< S2 >::value >::type swap(S1 &s1, S2 &s2)
Swaps the contents of two scalars, data is copied.
Definition: scalar_operations.hpp:143
Helper struct for checking whether the provided type represents a scalar (either host, from ViennaCL, or a flip-sign proxy)
Definition: forwards.h:384
viennacl::enable_if< viennacl::is_scalar< S1 >::value &&viennacl::is_scalar< S2 >::value &&viennacl::is_scalar< S3 >::value &&viennacl::is_any_scalar< ScalarType1 >::value &&viennacl::is_any_scalar< ScalarType2 >::value >::type asbs_s(S1 &s1, S2 const &s2, ScalarType1 const &alpha, vcl_size_t, bool reciprocal_alpha, bool flip_sign_alpha, S3 const &s3, ScalarType2 const &beta, vcl_size_t, bool reciprocal_beta, bool flip_sign_beta)
Definition: scalar_operations.hpp:108
All the predicates used within ViennaCL. Checks for expressions to be vectors, etc.
Helper struct for checking whether a type is a viennacl::scalar<>
Definition: forwards.h:370
Common routines for single-threaded or OpenMP-enabled execution on CPU.
T::ERROR_CANNOT_DEDUCE_CPU_SCALAR_TYPE_FOR_T type
Definition: result_of.hpp:276
viennacl::enable_if< viennacl::is_scalar< S1 >::value &&viennacl::is_scalar< S2 >::value &&viennacl::is_any_scalar< ScalarType1 >::value >::type as(S1 &s1, S2 const &s2, ScalarType1 const &alpha, vcl_size_t, bool reciprocal_alpha, bool flip_sign_alpha)
Definition: scalar_operations.hpp:46
Simple enable-if variant that uses the SFINAE pattern.