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

Specialization of the _tv_evaluator class for false template arguments. More...

#include <tvevaluate.h>

Inheritance diagram for blitz::_tv_evaluator< true, N_length >:
Inheritance graph
Collaboration diagram for blitz::_tv_evaluator< true, 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 false version of select_evaluation is picked for expressions that contain operands other than TinyVectors.
 
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.
 
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.
 
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.
 
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<int N_length>
struct blitz::_tv_evaluator< true, N_length >

Specialization of the _tv_evaluator class for false template arguments.

Member Function Documentation

◆ evaluate_aligned() [1/2]

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.

◆ evaluate_aligned() [2/2]

template<int N_length>
template<typename T_numtype, typename T_expr, typename T_update>
static _bz_forceinline void blitz::_tv_evaluator< true, 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.

◆ evaluate_unaligned() [1/2]

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.

◆ evaluate_unaligned() [2/2]

template<int N_length>
template<typename T_numtype, typename T_expr, typename T_update>
static _bz_forceinline void blitz::_tv_evaluator< true, 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() [1/2]

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.

◆ select_evaluation() [2/2]

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

The false version of select_evaluation is picked for expressions that contain operands other than TinyVectors.

It just redirects to the general evaluation function.


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