![]() |
View on a specific subvector of a dense vector.The DenseSubvector template represents a view on a specific subvector of a dense vector primitive. The type of the dense vector is specified via the first template parameter: More...
#include <DenseSubvector.h>
Inherits blaze::DenseVector< DenseSubvector< VT, AF, TF >, TF >, and blaze::Subvector.
Classes | |
class | SubvectorIterator |
Iterator over the elements of the sparse subvector. More... | |
Public Types | |
enum | { vectorizable = VT::vectorizable } |
Compilation switch for the expression template evaluation strategy. | |
enum | { smpAssignable = VT::smpAssignable } |
Compilation switch for the expression template assignment strategy. | |
typedef DenseSubvector< VT, AF, TF > | This |
Type of this DenseSubvector instance. | |
typedef SubvectorTrait< VT >::Type | ResultType |
Result type for expression template evaluations. | |
typedef ResultType::TransposeType | TransposeType |
Transpose type for expression template evaluations. | |
typedef VT::ElementType | ElementType |
Type of the subvector elements. | |
typedef IT::Type | IntrinsicType |
Intrinsic type of the subvector elements. | |
typedef VT::ReturnType | ReturnType |
Return type for expression template evaluations. | |
typedef const DenseSubvector & | CompositeType |
Data type for composite expression templates. | |
typedef VT::ConstReference | ConstReference |
Reference to a constant subvector value. | |
typedef IfTrue< useConst, ConstReference, typename VT::Reference >::Type | Reference |
Reference to a non-constant subvector value. | |
typedef const ElementType * | ConstPointer |
Pointer to a constant subvector value. | |
typedef IfTrue< useConst, ConstPointer, ElementType * >::Type | Pointer |
Pointer to a non-constant subvector value. | |
typedef SubvectorIterator< typename VT::ConstIterator > | ConstIterator |
Iterator over constant elements. | |
typedef IfTrue< useConst, ConstIterator, SubvectorIterator< typename VT::Iterator > >::Type | Iterator |
Iterator over non-constant elements. | |
typedef VT | VectorType |
Type of the vector. | |
Public Member Functions | |
template<typename VT2 > | |
DenseSubvector< VT, AF, TF > & | operator= (const Vector< VT2, TF > &rhs) |
Assignment operator for different vectors. More... | |
template<typename VT2 > | |
DenseSubvector< VT, AF, TF > & | operator+= (const Vector< VT2, TF > &rhs) |
Addition assignment operator for the addition of a vector ( ![]() | |
template<typename VT2 > | |
DenseSubvector< VT, AF, TF > & | operator-= (const Vector< VT2, TF > &rhs) |
Subtraction assignment operator for the subtraction of a vector ( ![]() | |
template<typename VT2 > | |
DenseSubvector< VT, AF, TF > & | operator*= (const Vector< VT2, TF > &rhs) |
Multiplication assignment operator for the multiplication of a vector ( ![]() | |
template<typename Other > | |
EnableIf< IsNumeric< Other >, DenseSubvector< VT, AF, TF > >::Type & | operator*= (Other rhs) |
Multiplication assignment operator for the multiplication between a subvector and a scalar value ( ![]() | |
template<typename Other > | |
EnableIf< IsNumeric< Other >, DenseSubvector< VT, AF, TF > >::Type & | operator/= (Other rhs) |
Division assignment operator for the division of a subvector by a scalar value ( ![]() | |
template<typename Other > | |
DenseSubvector< VT, AF, TF > & | scale (const Other &scalar) |
Scaling of the dense subvector by the scalar value scalar ( ![]() | |
template<typename VT2 > | |
DisableIf< typename DenseSubvector< VT, AF, TF >::BLAZE_TEMPLATE VectorizedAssign< VT2 > >::Type | assign (const DenseVector< VT2, TF > &rhs) |
Default implementation of the assignment of a dense vector. More... | |
template<typename VT2 > | |
EnableIf< typename DenseSubvector< VT, AF, TF >::BLAZE_TEMPLATE VectorizedAssign< VT2 > >::Type | assign (const DenseVector< VT2, TF > &rhs) |
Intrinsic optimized implementation of the assignment of a dense vector. More... | |
template<typename VT2 > | |
DisableIf< typename DenseSubvector< VT, AF, TF >::BLAZE_TEMPLATE VectorizedAddAssign< VT2 > >::Type | addAssign (const DenseVector< VT2, TF > &rhs) |
Default implementation of the addition assignment of a dense vector. More... | |
template<typename VT2 > | |
EnableIf< typename DenseSubvector< VT, AF, TF >::BLAZE_TEMPLATE VectorizedAddAssign< VT2 > >::Type | addAssign (const DenseVector< VT2, TF > &rhs) |
Intrinsic optimized implementation of the addition assignment of a dense vector. More... | |
template<typename VT2 > | |
DisableIf< typename DenseSubvector< VT, AF, TF >::BLAZE_TEMPLATE VectorizedSubAssign< VT2 > >::Type | subAssign (const DenseVector< VT2, TF > &rhs) |
Default implementation of the subtraction assignment of a dense vector. More... | |
template<typename VT2 > | |
EnableIf< typename DenseSubvector< VT, AF, TF >::BLAZE_TEMPLATE VectorizedSubAssign< VT2 > >::Type | subAssign (const DenseVector< VT2, TF > &rhs) |
Intrinsic optimized implementation of the subtraction assignment of a dense vector. More... | |
template<typename VT2 > | |
DisableIf< typename DenseSubvector< VT, AF, TF >::BLAZE_TEMPLATE VectorizedMultAssign< VT2 > >::Type | multAssign (const DenseVector< VT2, TF > &rhs) |
Default implementation of the multiplication assignment of a dense vector. More... | |
template<typename VT2 > | |
EnableIf< typename DenseSubvector< VT, AF, TF >::BLAZE_TEMPLATE VectorizedMultAssign< VT2 > >::Type | multAssign (const DenseVector< VT2, TF > &rhs) |
Intrinsic optimized implementation of the multiplication assignment of a dense vector. More... | |
BLAZE_ALWAYS_INLINE VectorType & | operator~ () |
Conversion operator for non-constant vectors. More... | |
BLAZE_ALWAYS_INLINE const VectorType & | operator~ () const |
Conversion operator for constant vectors. More... | |
Constructors | |
DenseSubvector (Operand vector, size_t index, size_t n) | |
The constructor for DenseSubvector. More... | |
Data access functions | |
Reference | operator[] (size_t index) |
Subscript operator for the direct access to the subvector elements. More... | |
ConstReference | operator[] (size_t index) const |
Subscript operator for the direct access to the subvector elements. More... | |
Pointer | data () |
Low-level data access to the subvector elements. More... | |
ConstPointer | data () const |
Low-level data access to the subvector elements. More... | |
Iterator | begin () |
Returns an iterator to the first element of the subvector. More... | |
ConstIterator | begin () const |
Returns an iterator to the first element of the subvector. More... | |
ConstIterator | cbegin () const |
Returns an iterator to the first element of the subvector. More... | |
Iterator | end () |
Returns an iterator just past the last element of the subvector. More... | |
ConstIterator | end () const |
Returns an iterator just past the last element of the subvector. More... | |
ConstIterator | cend () const |
Returns an iterator just past the last element of the subvector. More... | |
Assignment operators | |
DenseSubvector & | operator= (const ElementType &rhs) |
Homogenous assignment to all subvector elements. More... | |
DenseSubvector & | operator= (const DenseSubvector &rhs) |
Copy assignment operator for DenseSubvector. More... | |
template<typename VT2 > | |
DenseSubvector & | operator= (const Vector< VT2, TF > &rhs) |
template<typename VT2 > | |
DenseSubvector & | operator+= (const Vector< VT2, TF > &rhs) |
template<typename VT2 > | |
DenseSubvector & | operator-= (const Vector< VT2, TF > &rhs) |
template<typename VT2 > | |
DenseSubvector & | operator*= (const Vector< VT2, TF > &rhs) |
template<typename Other > | |
EnableIf< IsNumeric< Other >, DenseSubvector >::Type & | operator*= (Other rhs) |
template<typename Other > | |
EnableIf< IsNumeric< Other >, DenseSubvector >::Type & | operator/= (Other rhs) |
Utility functions | |
size_t | size () const |
Returns the current size/dimension of the dense subvector. More... | |
size_t | capacity () const |
Returns the maximum capacity of the dense subvector. More... | |
size_t | nonZeros () const |
Returns the number of non-zero elements in the subvector. More... | |
void | reset () |
Reset to the default initial values. More... | |
template<typename Other > | |
DenseSubvector & | scale (const Other &scalar) |
Expression template evaluation functions | |
template<typename Other > | |
bool | canAlias (const Other *alias) const |
Returns whether the dense subvector can alias with the given address alias. More... | |
template<typename VT2 , bool AF2, bool TF2> | |
bool | canAlias (const DenseSubvector< VT2, AF2, TF2 > *alias) const |
Returns whether the dense subvector can alias with the given dense subvector alias. More... | |
template<typename Other > | |
bool | isAliased (const Other *alias) const |
Returns whether the dense subvector is aliased with the given address alias. More... | |
template<typename VT2 , bool AF2, bool TF2> | |
bool | isAliased (const DenseSubvector< VT2, AF2, TF2 > *alias) const |
Returns whether the dense subvector is aliased with the given dense subvector alias. More... | |
bool | isAligned () const |
Returns whether the subvector is properly aligned in memory. More... | |
bool | canSMPAssign () const |
Returns whether the subvector can be used in SMP assignments. More... | |
IntrinsicType | load (size_t index) const |
Aligned load of an intrinsic element of the dense subvector. More... | |
IntrinsicType | loadu (size_t index) const |
Unaligned load of an intrinsic element of the dense subvector. More... | |
void | store (size_t index, const IntrinsicType &value) |
Aligned store of an intrinsic element of the subvector. More... | |
void | storeu (size_t index, const IntrinsicType &value) |
Unaligned store of an intrinsic element of the subvector. More... | |
void | stream (size_t index, const IntrinsicType &value) |
Aligned, non-temporal store of an intrinsic element of the subvector. More... | |
template<typename VT2 > | |
DisableIf< VectorizedAssign< VT2 > >::Type | assign (const DenseVector< VT2, TF > &rhs) |
template<typename VT2 > | |
EnableIf< VectorizedAssign< VT2 > >::Type | assign (const DenseVector< VT2, TF > &rhs) |
template<typename VT2 > | |
void | assign (const SparseVector< VT2, TF > &rhs) |
Default implementation of the assignment of a sparse vector. More... | |
template<typename VT2 > | |
DisableIf< VectorizedAddAssign< VT2 > >::Type | addAssign (const DenseVector< VT2, TF > &rhs) |
template<typename VT2 > | |
EnableIf< VectorizedAddAssign< VT2 > >::Type | addAssign (const DenseVector< VT2, TF > &rhs) |
template<typename VT2 > | |
void | addAssign (const SparseVector< VT2, TF > &rhs) |
Default implementation of the addition assignment of a sparse vector. More... | |
template<typename VT2 > | |
DisableIf< VectorizedSubAssign< VT2 > >::Type | subAssign (const DenseVector< VT2, TF > &rhs) |
template<typename VT2 > | |
EnableIf< VectorizedSubAssign< VT2 > >::Type | subAssign (const DenseVector< VT2, TF > &rhs) |
template<typename VT2 > | |
void | subAssign (const SparseVector< VT2, TF > &rhs) |
Default implementation of the subtraction assignment of a sparse vector. More... | |
template<typename VT2 > | |
DisableIf< VectorizedMultAssign< VT2 > >::Type | multAssign (const DenseVector< VT2, TF > &rhs) |
template<typename VT2 > | |
EnableIf< VectorizedMultAssign< VT2 > >::Type | multAssign (const DenseVector< VT2, TF > &rhs) |
template<typename VT2 > | |
void | multAssign (const SparseVector< VT2, TF > &rhs) |
Default implementation of the multiplication assignment of a sparse vector. More... | |
Private Types | |
enum | { useConst = IsConst<VT>::value } |
Compilation switch for the non-const reference and iterator types. More... | |
typedef If< IsExpression< VT >, VT, VT & >::Type | Operand |
Composite data type of the dense vector expression. | |
typedef IntrinsicTrait< typename VT::ElementType > | IT |
Intrinsic trait for the vector element type. | |
Private Attributes | |
Member variables | |
Operand | vector_ |
The dense vector containing the subvector. | |
const size_t | offset_ |
The offset of the subvector within the dense vector. | |
const size_t | size_ |
The size of the subvector. | |
const size_t | rest_ |
The number of remaining elements in an unaligned intrinsic operation. | |
const size_t | final_ |
The final index for unaligned intrinsic operations. More... | |
const bool | isAligned_ |
Memory alignment flag. More... | |
View on a specific subvector of a dense vector.
The DenseSubvector template represents a view on a specific subvector of a dense vector primitive. The type of the dense vector is specified via the first template parameter:
A view on a dense subvector can be created very conveniently via the subvector()
function:
This view can be treated as any other dense vector, i.e. it can be assigned to, it can be copied from, and it can be used in arithmetic operations. The view can also be used on both sides of an assignment: The subvector can either be used as an alias to grant write access to a specific subvector of a dense vector primitive on the left-hand side of an assignment or to grant read-access to a specific subvector of a dense vector primitive or expression on the right-hand side of an assignment. The following example demonstrates this in detail:
A dense subvector can be used like any other dense vector. For instance, the elements of the dense subvector can be directly accessed with the subscript operator.
The numbering of the subvector elements is
where N is the specified size of the subvector. Alternatively, the elements of a subvector can be traversed via iterators. Just as with vectors, in case of non-const subvectors, begin()
and end()
return an Iterator, which allows a manipulation of the non-zero values, in case of constant subvectors a ConstIterator is returned:
The current number of subvector elements can be obtained via the size()
function, the current capacity via the capacity()
function, and the number of non-zero elements via the nonZeros()
function. However, since subvector are views on a specific subvector of a vector, several operations are not possible on views, such as resizing and swapping:
The following example gives an impression of the use of DenseSubvector within arithmetic operations. All operations (addition, subtraction, multiplication, scaling, ...) can be performed on all possible combinations of dense and sparse vectors with fitting element types:
Usually subvectors can be defined anywhere within a vector. They may start at any position and may have an arbitrary size (only restricted by the size of the underlying vector). However, in contrast to vectors themselves, which are always properly aligned in memory and therefore can provide maximum performance, this means that subvectors in general have to be considered to be unaligned. This can be made explicit by the blaze::unaligned flag:
All of these calls to the subvector()
function are identical. Whether the alignment flag is explicitly specified or not, it always returns an unaligned subvector. Whereas this may provide full flexibility in the creation of subvectors, this might result in performance restrictions (even in case the specified subvector could be aligned). However, it is also possible to create aligned subvectors. Aligned subvectors are identical to unaligned subvectors in all aspects, except that they may pose additional alignment restrictions and therefore have less flexibility during creation, but don't suffer from performance penalties and provide the same performance as the underlying vector. Aligned subvectors are created by explicitly specifying the blaze::aligned flag:
The alignment restrictions refer to system dependent address restrictions for the used element type and the available vectorization mode (SSE, AVX, ...). The following source code gives some examples for a double precision dense vector, assuming that AVX is available, which packs 4 double
values into an intrinsic vector:
It is also possible to create a subvector view on another subvector. In this context it is important to remember that the type returned by the subvector()
function is the same type as the type of the given subvector, since the view on a subvector is just another view on the underlying dense vector:
|
inlineexplicit |
The constructor for DenseSubvector.
vector | The dense vector containing the subvector. |
index | The first index of the subvector in the given vector. |
n | The size of the subvector. |
std::invalid_argument | Invalid subvector specification. |
In case the subvector is not properly specified (i.e. if the specified first index is larger than the size of the given vector or the subvector is specified beyond the size of the vector) a std::invalid_argument exception is thrown.
|
inline |
Default implementation of the addition assignment of a sparse vector.
rhs | The right-hand side sparse vector to be added. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the addition assignment of a dense vector.
rhs | The right-hand side dense vector to be added. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Intrinsic optimized implementation of the addition assignment of a dense vector.
rhs | The right-hand side dense vector to be added. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the assignment of a sparse vector.
rhs | The right-hand side sparse vector to be assigned. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the assignment of a dense vector.
rhs | The right-hand side dense vector to be assigned. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Intrinsic optimized implementation of the assignment of a dense vector.
rhs | The right-hand side dense vector to be assigned. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Returns an iterator to the first element of the subvector.
This function returns an iterator to the first element of the subvector.
|
inline |
Returns an iterator to the first element of the subvector.
This function returns an iterator to the first element of the subvector.
|
inline |
Returns whether the dense subvector can alias with the given address alias.
alias | The alias to be checked. |
This function returns whether the given address can alias with the dense subvector. In contrast to the isAliased() function this function is allowed to use compile time expressions to optimize the evaluation.
|
inline |
Returns whether the dense subvector can alias with the given dense subvector alias.
alias | The alias to be checked. |
This function returns whether the given address can alias with the dense subvector. In contrast to the isAliased() function this function is allowed to use compile time expressions to optimize the evaluation.
|
inline |
Returns whether the subvector can be used in SMP assignments.
This function returns whether the subvector can be used in SMP assignments. In contrast to the smpAssignable member enumeration, which is based solely on compile time information, this function additionally provides runtime information (as for instance the current size of the subvector).
|
inline |
Returns the maximum capacity of the dense subvector.
|
inline |
Returns an iterator to the first element of the subvector.
This function returns an iterator to the first element of the subvector.
|
inline |
Returns an iterator just past the last element of the subvector.
This function returns an iterator just past the last element of the subvector.
|
inline |
Low-level data access to the subvector elements.
This function returns a pointer to the internal storage of the dense subvector.
|
inline |
Low-level data access to the subvector elements.
This function returns a pointer to the internal storage of the dense subvector.
|
inline |
Returns an iterator just past the last element of the subvector.
This function returns an iterator just past the last element of the subvector.
|
inline |
Returns an iterator just past the last element of the subvector.
This function returns an iterator just past the last element of the subvector.
|
inline |
Returns whether the dense subvector is aliased with the given address alias.
alias | The alias to be checked. |
This function returns whether the given address is aliased with the dense subvector. In contrast to the canAlias() function this function is not allowed to use compile time expressions to optimize the evaluation.
|
inline |
Returns whether the dense subvector is aliased with the given dense subvector alias.
alias | The alias to be checked. |
This function returns whether the given address is aliased with the dense subvector. In contrast to the canAlias() function this function is not allowed to use compile time expressions to optimize the evaluation.
|
inline |
Returns whether the subvector is properly aligned in memory.
This function returns whether the subvector is guaranteed to be properly aligned in memory, i.e. whether the beginning and the end of the subvector are guaranteed to conform to the alignment restrictions of the underlying element type.
|
inline |
Aligned load of an intrinsic element of the dense subvector.
index | Access index. The index must be smaller than the number of subvector elements. |
This function performs an aligned load of a specific intrinsic element of the dense subvector. The index must be smaller than the number of subvector elements and it must be a multiple of the number of values inside the intrinsic element. This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors.
|
inline |
Unaligned load of an intrinsic element of the dense subvector.
index | Access index. The index must be smaller than the number of subvector elements. |
This function performs an unaligned load of a specific intrinsic element of the dense subvector. The index must be smaller than the number of subvector elements and it must be a multiple of the number of values inside the intrinsic element. This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors.
|
inline |
Default implementation of the multiplication assignment of a sparse vector.
rhs | The right-hand side sparse vector to be multiplied. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the multiplication assignment of a dense vector.
rhs | The right-hand side dense vector to be multiplied. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Intrinsic optimized implementation of the multiplication assignment of a dense vector.
rhs | The right-hand side dense vector to be multiplied. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Returns the number of non-zero elements in the subvector.
Note that the number of non-zero elements is always less than or equal to the current size of the subvector.
|
inline |
Multiplication assignment operator for the multiplication of a vector ( ).
rhs | The right-hand side vector to be multiplied with the dense subvector. |
std::invalid_argument | Vector sizes do not match. |
In case the current sizes of the two vectors don't match, a std::invalid_argument exception is thrown.
|
inline |
Multiplication assignment operator for the multiplication between a subvector and a scalar value ( ).
rhs | The right-hand side scalar value for the multiplication. |
|
inline |
Addition assignment operator for the addition of a vector ( ).
rhs | The right-hand side vector to be added to the dense subvector. |
std::invalid_argument | Vector sizes do not match. |
In case the current sizes of the two vectors don't match, a std::invalid_argument exception is thrown.
|
inline |
Subtraction assignment operator for the subtraction of a vector ( ).
rhs | The right-hand side vector to be subtracted from the dense subvector. |
std::invalid_argument | Vector sizes do not match. |
In case the current sizes of the two vectors don't match, a std::invalid_argument exception is thrown.
|
inline |
Division assignment operator for the division of a subvector by a scalar value ( ).
rhs | The right-hand side scalar value for the division. |
Note: A division by zero is only checked by an user assert.
|
inline |
Homogenous assignment to all subvector elements.
rhs | Scalar value to be assigned to all subvector elements. |
|
inline |
Copy assignment operator for DenseSubvector.
rhs | Dense subvector to be copied. |
std::invalid_argument | Subvector sizes do not match. |
In case the current sizes of the two subvectors don't match, a std::invalid_argument exception is thrown.
|
inline |
|
inline |
Subscript operator for the direct access to the subvector elements.
index | Access index. The index must be smaller than the number of subvector elements. |
|
inline |
Subscript operator for the direct access to the subvector elements.
index | Access index. The index must be smaller than the number of subvector columns. |
|
inlineinherited |
Conversion operator for non-constant vectors.
|
inlineinherited |
Conversion operator for constant vectors.
|
inline |
Reset to the default initial values.
|
inline |
Scaling of the dense subvector by the scalar value scalar ( ).
scalar | The scalar value for the subvector scaling. |
|
inline |
Returns the current size/dimension of the dense subvector.
|
inline |
Aligned store of an intrinsic element of the subvector.
index | Access index. The index must be smaller than the number of subvector elements. |
value | The intrinsic element to be stored. |
This function performs an aligned store a specific intrinsic element of the dense subvector. The index must be smaller than the number of subvector elements and it must be a multiple of the number of values inside the intrinsic element. This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors.
|
inline |
Unaligned store of an intrinsic element of the subvector.
index | Access index. The index must be smaller than the number of subvector elements. |
value | The intrinsic element to be stored. |
This function performs an unaligned store a specific intrinsic element of the dense subvector. The index must be smaller than the number of subvector elements and it must be a multiple of the number of values inside the intrinsic element. This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors.
|
inline |
Aligned, non-temporal store of an intrinsic element of the subvector.
index | Access index. The index must be smaller than the number of subvector elements. |
value | The intrinsic element to be stored. |
This function performs an aligned, non-temporal store a specific intrinsic element of the dense subvector. The index must be smaller than the number of subvector elements and it must be a multiple of the number of values inside the intrinsic element. This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors.
|
inline |
Default implementation of the subtraction assignment of a sparse vector.
rhs | The right-hand side sparse vector to be subtracted. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the subtraction assignment of a dense vector.
rhs | The right-hand side dense vector to be subtracted. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Intrinsic optimized implementation of the subtraction assignment of a dense vector.
rhs | The right-hand side dense vector to be subtracted. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
private |
The final index for unaligned intrinsic operations.
In case the subvector is not fully aligned and the subvector is involved in a vectorized operation, the final index indicates at which index a special treatment for the remaining elements is required.
|
private |
Memory alignment flag.
The alignment flag indicates whether the subvector is fully aligned. In case the subvector is fully aligned, no special handling has to be used for the last elements of the subvector in a vectorized operation. In order to be aligned, the following conditions must hold for the subvector: