blitz Version 1.0.2
Loading...
Searching...
No Matches
blitz::_tv_evaluator< unroll, N_length > Struct Template Reference

The _tv_evaluator class has a bool template argument that is used to select code paths at compile time. More...

#include <tvevaluate.h>

Collaboration diagram for blitz::_tv_evaluator< unroll, N_length >:
Collaboration graph

Static Public Member Functions

template<typename T , typename T_expr , typename T_update >
static _bz_forceinline void select_evaluation (TinyVector< T, N_length > &dest, const T_expr &expr, T_update)
 The select_evaluation function redirects expressions that do not contains solely TinyVector operands to the general evaluation function.
 
template<typename T_numtype , typename T_expr , typename T_update >
static _bz_forceinline void evaluate_aligned (T_numtype *data, const T_expr &expr, T_update)
 This version of the evaluation function assumes that the TinyVectors have appropriate alignment (as will always be the case if they are actual TinyVector objects and not created using reinterpret_cast in the chunked_updater.
 
template<typename T_numtype , typename T_expr , typename T_update >
static _bz_forceinline void evaluate_unaligned (T_numtype *data, const T_expr &expr, T_update)
 This version of the evaluation function is used when vectorizing expressions that we know can't be aligned.
 

Detailed Description

template<bool unroll, int N_length>
struct blitz::_tv_evaluator< unroll, N_length >

The _tv_evaluator class has a bool template argument that is used to select code paths at compile time.


Member Function Documentation

◆ evaluate_aligned()

template<bool unroll, int N_length>
template<typename T_numtype , typename T_expr , typename T_update >
static _bz_forceinline void blitz::_tv_evaluator< unroll, N_length >::evaluate_aligned ( T_numtype *  data,
const T_expr &  expr,
T_update   
)
inlinestatic

This version of the evaluation function assumes that the TinyVectors have appropriate alignment (as will always be the case if they are actual TinyVector objects and not created using reinterpret_cast in the chunked_updater.

If no SIMD width is set, however, we can not guarantee alignment and must remove the pragmas.

Referenced by blitz::_tv_evaluator< unroll, N_length >::select_evaluation().

◆ evaluate_unaligned()

template<bool unroll, int N_length>
template<typename T_numtype , typename T_expr , typename T_update >
static _bz_forceinline void blitz::_tv_evaluator< unroll, N_length >::evaluate_unaligned ( T_numtype *  data,
const T_expr &  expr,
T_update   
)
inlinestatic

This version of the evaluation function is used when vectorizing expressions that we know can't be aligned.

The only difference with evaluate_aligned is the compiler pragma that tells the compiler it is unaligned.

◆ select_evaluation()

template<bool unroll, int N_length>
template<typename T , typename T_expr , typename T_update >
static _bz_forceinline void blitz::_tv_evaluator< unroll, N_length >::select_evaluation ( TinyVector< T, N_length > &  dest,
const T_expr &  expr,
T_update   
)
inlinestatic

The select_evaluation function redirects expressions that do not contains solely TinyVector operands to the general evaluation function.

The generic template (for unroll=false, note that "unroll" us the wrong name for this function, the template parameter in this context really means "use_full_eval") uses the TinyVector-only evaluation. Since TinyVectors can't have funny storage, ordering, stride, or anything, it's now just a matter of evaluating it like in the old vecassign.

References BZ_TV_EVALUATE_UNROLL_LENGTH, blitz::TinyVector< P_numtype, N_length >::data(), blitz::_tv_evaluator< unroll, N_length >::evaluate_aligned(), and blitz::TinyVector< P_numtype, N_length >::shape().

Referenced by blitz::TinyVector< P_numtype, N_length >::_tv_evaluate().


The documentation for this struct was generated from the following file: