Documentation 6b54b78464
Loading...
Searching...
No Matches
VecExpr Namespace Reference

Classes

class  abs_
 
class  add_
 
struct  add_lref_if
 Mechanism to conditionally (based on "StoreAsRef") add lvalue reference to a type. More...
 
struct  add_lref_if< T, true >
 
class  Bcast
 Expression class to broadcast a scalar value. Allows implementing "vector-scalar" operations re-using "vector-vector" expressions. More...
 
class  CVecExpr
 Base vector expression class. More...
 
class  CVectorView
 How a CSysVector is captured inside an expression: a bare pointer to whichever storage the expression is going to be evaluated from. More...
 
class  div_
 
class  eq_
 
class  exp_
 
class  ge_
 
class  gt_
 
class  le_
 
class  lt_
 
class  max_
 
class  min_
 
class  minus_
 
class  mul_
 
class  ne_
 
class  pow_
 
class  sign_
 
class  sqrt_
 
struct  store_type
 
struct  store_type< const CSysVector< Scalar > >
 
struct  store_type< CSysVector< Scalar > >
 
class  sub_
 

Typedefs

template<class T >
using decay_t = typename std::decay< T >::type
 std::decay_t from C++14, used to allow implicit conversions between scalar types, e.g. "CVecExpr<U,double>" + "int/double/etc.".
 
template<class T >
using remove_reference_t = typename std::remove_reference< T >::type
 std::remove_reference_t from C++14, removes references from some type.
 
template<class T >
using store_t = typename store_type< T >::type
 

Enumerations

enum class  DeviceAssignOp {
  Assign , Add , Subtract , Multiply ,
  Divide
}
 

Functions

bool UseDeviceExpressions ()
 Whether vector expressions are currently evaluated on the device.
 
void SetUseDeviceExpressions (bool)
 
template<DeviceAssignOp Op, class Scalar , class T >
void AssignDeviceExpression (Scalar *data, unsigned long size, const CVecExpr< T, Scalar > &expr)
 
template<class U , class S >
auto operator- (const CVecExpr< U, S > &u) -> decltype(minus_< U, S >(u.derived()))
 
template<class U , class S >
auto abs (const CVecExpr< U, S > &u) -> decltype(abs_< U, S >(u.derived()))
 
template<class U , class S >
auto exp (const CVecExpr< U, S > &u) -> decltype(exp_< U, S >(u.derived()))
 
template<class U , class S >
auto sqrt (const CVecExpr< U, S > &u) -> decltype(sqrt_< U, S >(u.derived()))
 
template<class U , class S >
auto sign (const CVecExpr< U, S > &u) -> decltype(sign_< U, S >(u.derived()))
 
int32_t fmax (int32_t a, int32_t b)
 
int32_t fmin (int32_t a, int32_t b)
 
int64_t fmax (int64_t a, int64_t b)
 
int64_t fmin (int64_t a, int64_t b)
 
uint32_t fmax (uint32_t a, uint32_t b)
 
uint32_t fmin (uint32_t a, uint32_t b)
 
uint64_t fmax (uint64_t a, uint64_t b)
 
uint64_t fmin (uint64_t a, uint64_t b)
 
template<class U , class V , class S >
auto fmax (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(max_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto fmax (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(max_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto fmax (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(max_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto fmin (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(min_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto fmin (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(min_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto fmin (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(min_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto pow (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(pow_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto pow (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(pow_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto pow (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(pow_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator+ (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(add_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator+ (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(add_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator+ (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(add_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator- (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(sub_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator- (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(sub_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator- (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(sub_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator* (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(mul_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator* (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(mul_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator* (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(mul_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator/ (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(div_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator/ (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(div_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator/ (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(div_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator<= (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(le_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator<= (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(le_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator<= (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(le_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator>= (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(ge_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator>= (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(ge_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator>= (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(ge_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator== (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(eq_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator== (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(eq_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator== (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(eq_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator!= (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(ne_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator!= (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(ne_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator!= (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(ne_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator< (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(lt_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator< (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(lt_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator< (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(lt_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto operator> (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(gt_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto operator> (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(gt_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto operator> (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(gt_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 

Enumeration Type Documentation

◆ DeviceAssignOp

enum class VecExpr::DeviceAssignOp
strong
Enumerator
Assign 
Add 
Subtract 
Multiply 
Divide 

Function Documentation

◆ AssignDeviceExpression()

template<DeviceAssignOp Op, class Scalar , class T >
void VecExpr::AssignDeviceExpression ( Scalar *  data,
unsigned long  size,
const CVecExpr< T, Scalar > &  expr 
)

◆ SetUseDeviceExpressions()

void VecExpr::SetUseDeviceExpressions ( bool  use)
inline

◆ UseDeviceExpressions()

bool VecExpr::UseDeviceExpressions ( )
inline

Whether vector expressions are currently evaluated on the device.

Note
Defined in CSysVectorGPU.cu. This is a plain global, not per thread: every thread of a team has to agree on it or they would split over the worksharing constructs below. It is switched by CSysSolve at the same boundary that uploads and downloads the vectors (HandleTemporariesIn/Out), and nowhere else, so it does not change while a solve runs.