![]() |
Vc
1.3.3
SIMD Vector Classes for C++
|
|
A helper class for fixed-size two-dimensional arrays.
| V | The vector type you want to operate on. (e.g. float_v or uint_v) |
| Size1 | Number of rows |
| Size2 | Number of columns |
#include <Vc/Memory>
Inherits AlignedBase< V::MemoryAlignment >, and MemoryBase< V, Memory< V, Size1, Size2, InitPadding >, 2, Memory< V, Size2, 0, false > >.
Public Member Functions | |
| template<typename Parent , typename RM > | |
| Memory & | operator= (const MemoryBase< V, Parent, 2, RM > &rhs) |
| Copies the data from a different object. More... | |
| Memory & | operator= (const V &v) |
| Initialize all data with the given vector. More... | |
| size_t | entriesCount () const |
| size_t | vectorsCount () const |
| MemoryVectorIterator< V, Flags > | begin (Flags flags=Flags()) |
| Return a (vectorized) iterator to the start of this memory object. | |
|
MemoryVectorIterator< const V, Flags > | begin (Flags flags=Flags()) const |
| const overload of the above | |
| MemoryVectorIterator< V, Flags > | end (Flags flags=Flags()) |
| Return a (vectorized) iterator to the end of this memory object. | |
|
MemoryVectorIterator< const V, Flags > | end (Flags flags=Flags()) const |
| const overload of the above | |
| std::enable_if <!std::is_convertible< Flags, int >::value, MemoryVector< V, Flags > >::type & | vector (size_t i, Flags=Flags()) |
| std::enable_if <!std::is_convertible< Flags, int >::value, MemoryVector < const V, Flags > >::type & | vector (size_t i, Flags=Flags()) const |
| Const overload of the above function. More... | |
| std::enable_if < std::is_convertible< ShiftT, int >::value, MemoryVector< V, decltype(std::declval< Flags > )|Unaligned)> >::type & | vector (size_t i, ShiftT shift, Flags=Flags()) |
|
std::enable_if < std::is_convertible< ShiftT, int >::value, MemoryVector < const V, decltype(std::declval < Flags >)|Unaligned)> >::type & | vector (size_t i, ShiftT shift, Flags=Flags()) const |
| Const overload of the above function. | |
| MemoryVector< V, Flags > & | vectorAt (size_t i, Flags flags=Flags()) |
| MemoryVector< const V, Flags > & | vectorAt (size_t i, Flags flags=Flags()) const |
| Const overload of the above function. More... | |
| MemoryVector< V, Flags > & | firstVector (Flags=Flags()) |
| MemoryVector< const V, Flags > & | firstVector (Flags=Flags()) const |
| Const overload of the above function. | |
| MemoryVector< V, Flags > & | lastVector (Flags=Flags()) |
| MemoryVector< const V, Flags > & | lastVector (Flags=Flags()) const |
| Const overload of the above function. | |
| void | setZero () |
| Zero the whole memory area. | |
|
Memory< V, Size1, Size2, InitPadding > & | operator+= (const MemoryBase< V, P2, Dimension, RM > &rhs) |
| (Inefficient) shorthand to add up two arrays. | |
|
Memory< V, Size1, Size2, InitPadding > & | operator+= (EntryType rhs) |
| (Inefficient) shorthand to add a value to an array. | |
|
Memory< V, Size1, Size2, InitPadding > & | operator-= (const MemoryBase< V, P2, Dimension, RM > &rhs) |
| (Inefficient) shorthand to subtract two arrays. | |
|
Memory< V, Size1, Size2, InitPadding > & | operator-= (EntryType rhs) |
| (Inefficient) shorthand to subtract a value from an array. | |
|
Memory< V, Size1, Size2, InitPadding > & | operator*= (const MemoryBase< V, P2, Dimension, RM > &rhs) |
| (Inefficient) shorthand to multiply two arrays. | |
|
Memory< V, Size1, Size2, InitPadding > & | operator*= (EntryType rhs) |
| (Inefficient) shorthand to multiply a value to an array. | |
|
Memory< V, Size1, Size2, InitPadding > & | operator/= (const MemoryBase< V, P2, Dimension, RM > &rhs) |
| (Inefficient) shorthand to divide two arrays. | |
|
Memory< V, Size1, Size2, InitPadding > & | operator/= (EntryType rhs) |
| (Inefficient) shorthand to divide an array with a value. | |
| bool | operator== (const MemoryBase< V, P2, Dimension, RM > &rhs) const |
| (Inefficient) shorthand compare equality of two arrays. | |
| bool | operator!= (const MemoryBase< V, P2, Dimension, RM > &rhs) const |
| (Inefficient) shorthand compare two arrays. | |
| bool | operator< (const MemoryBase< V, P2, Dimension, RM > &rhs) const |
| (Inefficient) shorthand compare two arrays. | |
| bool | operator<= (const MemoryBase< V, P2, Dimension, RM > &rhs) const |
| (Inefficient) shorthand compare two arrays. | |
| bool | operator> (const MemoryBase< V, P2, Dimension, RM > &rhs) const |
| (Inefficient) shorthand compare two arrays. | |
| bool | operator>= (const MemoryBase< V, P2, Dimension, RM > &rhs) const |
| (Inefficient) shorthand compare two arrays. | |
new/delete overloads for correct alignment | |
| void * | operator new (size_t size) |
| Allocates correctly aligned memory. | |
| void * | operator new (size_t, void *p) |
Returns p. | |
| void * | operator new[] (size_t size) |
| Allocates correctly aligned memory. | |
| void * | operator new[] (size_t, void *p) |
Returns p. | |
| void | operator delete (void *ptr, size_t) |
| Frees aligned memory. | |
| void | operator delete (void *, void *) |
| Does nothing. | |
| void | operator delete[] (void *ptr, size_t) |
| Frees aligned memory. | |
| void | operator delete[] (void *, void *) |
| Does nothing. | |
Static Public Member Functions | |
| static constexpr size_t | rowsCount () |
| static constexpr size_t | entriesCount () |
| static constexpr size_t | vectorsCount () |
|
inlinestatic |
|
inlinestatic |
Size2 is not divisible by V::Size.
|
inlinestatic |
|
inline |
Copies the data from a different object.
| rhs | The object to copy the data from. |
|
inline |
|
inlineinherited |
Definition at line 380 of file memorybase.h.
|
inlineinherited |
Definition at line 385 of file memorybase.h.
|
inlineinherited |
| i | Selects the offset, where the vector should be read. |
i-th vector in the memory.The return value can be used as any other vector object. I.e. you can substitute something like
with
This function ensures that only aligned loads and stores are used. Thus it only allows to access memory at fixed strides. If access to known offsets from the aligned vectors is needed the vector(size_t, int) function can be used.
Definition at line 429 of file memorybase.h.
|
inlineinherited |
Const overload of the above function.
| i | Selects the offset, where the vector should be read. |
i-th vector in the memory. Definition at line 439 of file memorybase.h.
|
inlineinherited |
i-th vector + shift in the memory.This function ensures that only unaligned loads and stores are used. It allows to access memory at any location aligned to the entry type.
| i | Selects the memory location of the i-th vector. Thus if V::Size == 4 and i is set to 3 the base address for the load/store will be the 12th entry (same as &mem[12]). |
| shift | Shifts the base address determined by parameter i by shift many entries. Thus vector(3, 1) for V::Size == 4 will load/store the 13th - 16th entries (same as &mem[13]). |
V::Size will not result in aligned loads. You have to use the above vector(size_t) function for aligned loads instead.i to 0 and use shift as the parameter to select the memory address: Definition at line 513 of file memorybase.h.
|
inlineinherited |
i-th scalar entry in the memory.Example:
| i | Specifies the scalar entry from where the vector will be loaded/stored. I.e. the values scalar(i), scalar(i + 1), ..., scalar(i + V::Size - 1) will be read/overwritten. |
| flags | You must take care to determine whether an unaligned load/store is required. Per default an unaligned load/store is used. If i is a multiple of V::Size you may want to pass Vc::Aligned here. |
Definition at line 463 of file memorybase.h.
|
inlineinherited |
Const overload of the above function.
i-th scalar entry in the memory.| i | Specifies the scalar entry from where the vector will be loaded/stored. I.e. the values scalar(i), scalar(i + 1), ..., scalar(i + V::Size - 1) will be read/overwritten. |
| flags | You must take care to determine whether an unaligned load/store is required. Per default an unaligned load/store is used. If i is a multiple of V::Size you may want to pass Vc::Aligned here. |
Definition at line 478 of file memorybase.h.
|
inlineinherited |
This function is simply a shorthand for vector(0).
Definition at line 535 of file memorybase.h.
|
inlineinherited |
This function is simply a shorthand for vector(vectorsCount() - 1).
Definition at line 550 of file memorybase.h.