#include <datatype.h>
A SimdBlock represents a block of memory which is organized as an array of struct of arrays (AOSOA). For example a normal Block<Vector> is layouted internally as xyzxyzxyzxyz (an array of structures, AOS). If you want to make use of SIMD, it is important to build groups of the x-, y- and z-components. Often this is done by making a structure of arrays (SOA), which for the example means having a structure of an x-array holding all x-components, a y-array and a z-array. But you can combine both to an array of struct of arrays (AOSOA): Only as many components are grouped to a fixed-size array as fit into one SIMD value, and then these small arrays are combined to a struct. This yields (in the case of four components per SIMD value) a memory layout xxxxyyyyzzzzxxxxyyyyzzzz which provides better cache locality than a simple structure of arrays.
Public Types | |
| using | StrideType = typename std::conditional< GENERIC, Char, T >::type | 
Public Member Functions | |
| T & | operator[] (Int index) const | 
| const StridedBlock< T > & | ToBlock () const | 
| StridedBlock< T > & | ToBlock () | 
| T * | GetFirst () const | 
| Int | GetCount () const | 
| Int | GetStride () const | 
| Int | GetComponentStride () const | 
| Int | GetMultiplicityMask () const | 
| Int | GetAlignmentMask () const | 
| Int | GetExtraStride () const | 
| void | ResetSimdIndexing () | 
| void | SetSimdIndexing (const SimdInfo::Compact &simd, Int logComponentSize) | 
| const SimdInfo::Compact & | GetInfo () const | 
| T * | GetPtr (Int index) const | 
Static Public Attributes | |
| static const Bool | SIMD | 
| static const Bool | GENERIC | 
Private Attributes | |
| T * | _ptr | 
| Int | _size | 
| Int | _stride | 
| SimdInfo::Compact | _simd | 
| Int | _logComponentSize | 
| using StrideType = typename std::conditional<GENERIC, Char, T>::type | 
| T& operator[] | ( | Int | index | ) | const | 
| const StridedBlock<T>& ToBlock | ( | ) | const | 
| StridedBlock<T>& ToBlock | ( | ) | 
| T* GetFirst | ( | ) | const | 
| Int GetCount | ( | ) | const | 
| Int GetStride | ( | ) | const | 
| Int GetComponentStride | ( | ) | const | 
| Int GetMultiplicityMask | ( | ) | const | 
| Int GetAlignmentMask | ( | ) | const | 
| Int GetExtraStride | ( | ) | const | 
| void ResetSimdIndexing | ( | ) | 
| void SetSimdIndexing | ( | const SimdInfo::Compact & | simd, | 
| Int | logComponentSize | ||
| ) | 
| const SimdInfo::Compact& GetInfo | ( | ) | const | 
| T* GetPtr | ( | Int | index | ) | const | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  private | 
Pointer to first element.
      
  | 
  private | 
Number of elements.
      
  | 
  private | 
Stride in bytes between elements. In the SIMD case, this is the size of a hypothetical non-SIMD vector (having dimension components). E.g., 24 for a double precision Vec3.
      
  | 
  private | 
      
  | 
  private |