Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
Simd.h File Reference
#include "arcane/utils/SimdCommon.h"
#include "arcane/utils/Real3.h"
#include "arcane/utils/Real2.h"
#include "arcane/utils/Real3x3.h"
#include "arcane/utils/Real2x2.h"
#include "arcane/utils/ArrayView.h"
#include "arcane/utils/SimdEMUL.h"
Include dependency graph for Simd.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  Arcane::SimdReal3
 Represents a vectorized Real3. More...
class  Arcane::SimdReal2
 Represents a vectorized Real2. More...
class  Arcane::SimdReal3x3
 Represents a vectorized Real3x3. More...
class  Arcane::SimdReal2x2
 Represents a vectorized Real2x2. More...
class  Arcane::SimdTypeTraits< DataType >
 Characteristics of vector types. More...
class  Arcane::SimdTypeTraits< Real >
class  Arcane::SimdTypeTraits< Real2 >
class  Arcane::SimdTypeTraits< Real2x2 >
class  Arcane::SimdTypeTraits< Real3 >
class  Arcane::SimdTypeTraits< Real3x3 >
class  Arcane::SimdEnumeratorBase
 Base class for vector enumerators with indirection. More...

Namespaces

namespace  Arcane
 -- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --

Macros

#define ENUMERATE_SIMD_REAL(_iter)
 Macro to iterate over the indices of a SIMD real or derived vector (Real2, Real3, ...).

Typedefs

typedef EMULSimdInfo Arcane::SimdInfo
typedef SimdInfo::SimdReal Arcane::SimdReal
 SIMD vector of real numbers.

Variables

const int Arcane::SimdSize = SimdReal::Length

Detailed Description

This file contains the declarations of types used to manage vectorization. Since several possible mechanisms exist, a choice must be made based on the machine architecture and compilation options. Each mechanism uses vectors of different sizes. In our case, since vectorization is primarily used for calculations on doubles, the size of a vector will be equal to the number of doubles that can fit into a vector.

Currently, we support the following modes in order of priority. If a mode is supported, the others are not used.

  • AVX512 for Intel Knight Landing (KNL) or Xeon Skylake type architectures. The vector size in this mode is 8.
  • AVX. For this mode, Arcane must be compiled with the option '–with-avx'. There are two modes: classic AVX and AVX2. For now, only the former is used, due to a lack of machines to test the latter. The vector size in this mode is 4.
  • SSE. This mode is available by default because it exists on all x64 platforms. There are also several versions, and we limit ourselves to version 2. The vector size in this mode is 2.
  • no mode. In this case, there is no specific vectorization. Nevertheless, to test the code, we allow emulation with vectors of size 2.

Definition in file Simd.h.