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.
Main namespace in ViennaCL. Holds all the basic types such as vector, matrix, etc. and defines operations upon them.
Definition: cpu_ram.hpp:29
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.