Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Référence du fichier Simd.h
#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"
+ Graphe des dépendances par inclusion de Simd.h:
+ Ce graphe montre quels fichiers incluent directement ou indirectement ce fichier :

Aller au code source de ce fichier.

Classes

class  Arcane::SimdReal3
 Représente un Real3 vectoriel. Plus de détails...
 
class  Arcane::SimdReal2
 Représente un Real2 vectoriel. Plus de détails...
 
class  Arcane::SimdReal3x3
 Représente un Real3x3 vectoriel. Plus de détails...
 
class  Arcane::SimdReal2x2
 Représente un Real2x2 vectoriel. Plus de détails...
 
class  Arcane::SimdTypeTraits< DataType >
 Charactéristiques des types vectoriels. Plus de détails...
 
class  Arcane::SimdTypeTraits< Real >
 
class  Arcane::SimdTypeTraits< Real2 >
 
class  Arcane::SimdTypeTraits< Real2x2 >
 
class  Arcane::SimdTypeTraits< Real3 >
 
class  Arcane::SimdTypeTraits< Real3x3 >
 
class  Arcane::SimdEnumeratorBase
 Classe de base des énumérateurs vectoriels avec indirection. Plus de détails...
 

Espaces de nommage

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

Macros

#define ENUMERATE_SIMD_REAL(_iter)    for( ::Arcane::Integer _iter(0); _iter < SimdReal ::BLOCK_SIZE; ++ _iter )
 Macro pour itérer sur les index d'un vecteur Simd de réel ou dérivé (Real2, Real3, ...).
 

Définitions de type

typedef EMULSimdInfo Arcane::SimdInfo
 
typedef SimdInfo::SimdReal Arcane::SimdReal
 Vecteur SIMD de réel.
 

Variables

const int Arcane::SimdSize = SimdReal::Length
 

Description détaillée

Ce fichier contient les déclarations des types utilisés pour gérer la vectorisation. Comme il existe plusieurs mécanismes possibles, il faut faire un choix en fonction de l'architecture machine et des options de compilation. Chaque mécanisme utilise des vecteurs de taille différente. Dans notre cas comme la vectorisation est utilisée principalement pour les calculs sur des doubles, la taille d'un vecteur sera égale au nombre de double qu'on peut mettre dans un vecteur.

Actuellement, on supporte les modes suivants par ordre de priorité. Si un mode est supporté, les autres ne sont pas utilisés.

  • AVX512 pour les architectures de type Intel Knight Landing (KNL) ou Xeon Skylake. La taille des vecteurs est de 8 dans ce mode.
  • AVX. Pour ce mode, il faut compiler Arcane avec l'option '–with-avx'. Il existe deux modes, l'AVX classique et l'AVX2. Pour l'instant, seul le premier est utilisé, faute de machines pour tester le second. La taille des vecteurs est de 4 dans ce mode.
  • SSE. Ce mode est disponible par défaut car il existe sur toutes les plateformes x64. La aussi il existe plusieurs versions et on se limite à la version 2. La taille des vecteurs est de 2 dans ce mode
  • aucun mode. Dans ce cas il n'y a pas de vectorisation spécifique. Néanmoins pour tester le code, on permet une émulation avec des vecteurs de taille de 2.

Définition dans le fichier Simd.h.