12#ifndef ARCANE_MATERIALS_COMPONENTSIMD_H
13#define ARCANE_MATERIALS_COMPONENTSIMD_H
26#include "arcane/materials/MatItem.h"
27#include "arcane/materials/MatItemEnumerator.h"
28#include "arcane/materials/ComponentPartItemVectorView.h"
33#ifdef __INTEL_COMPILER
34# define A_ALIGNED_64 __attribute__((align_value(64)))
53 typedef SimdEnumeratorBase::SimdIndexType SimdIndexType;
56 SimdMatVarIndex(
Int32 array_index,SimdIndexType value_index)
57 : m_value_index(value_index), m_array_index(array_index)
65 Int32 arrayIndex()
const {
return m_array_index; }
68 const SimdIndexType& valueIndex()
const {
return m_value_index; }
72 SimdIndexType m_value_index;
83:
public SimdEnumeratorBase
88 : SimdEnumeratorBase(item_indexes), m_component_part_index(component_part_index), m_component(component)
98 SimdMatVarIndex _varIndex()
const {
return SimdMatVarIndex(m_component_part_index,*_currentSimdIndex()); }
100 operator SimdMatVarIndex()
const
106 Integer m_component_part_index;
113 return ComponentPartSimdCellEnumerator::create(v);
119#define ENUMERATE_SIMD_COMPONENTCELL(iname,env) \
120 A_ENUMERATE_COMPONENTCELL(ComponentPartSimdCell,iname,env)
125template<
typename Lambda>
void
128 const Lambda& lambda)
133 ENUMERATE_SIMD_COMPONENTCELL(mvi,impure_items){
144 typedef const SimdMatVarIndex& IterType;
148 : m_pure_items(pure_items), m_impure_items(impure_items){}
150 static LoopFunctorEnvPartSimdCell create(
const EnvCellVector& env);
153 template<
typename Lambda>
154 void operator<<(Lambda&& lambda)
156 simple_simd_env_loop(m_pure_items,m_impure_items,lambda);
185#define ENUMERATE_COMPONENTITEM_LAMBDA(iter_type,iter,container)\
186 Arcane::Materials:: LoopFunctor ## iter_type :: create ( (container) ) << [=]( Arcane::Materials:: LoopFunctor ## iter_type :: IterType iter)
193class MatVariableViewBase
210template<
typename ItemType,
typename DataType>
211class MatItemVariableScalarInViewT
212:
public MatVariableViewBase
217 typedef A_ALIGNED_64 DataType* DataTypeAlignedPtr;
222 : MatVariableViewBase(var), m_value(v), m_value0(v[0].unguardedBasePointer()){}
225 typename SimdTypeTraits<DataType>::SimdType
228 typedef typename SimdTypeTraits<DataType>::SimdType
SimdType;
229 return SimdType(m_value[mvi.arrayIndex()].data(),mvi.valueIndex());
247 return this->m_value0[pmvi.valueIndex()];
251 DataType
value(ItemIndexType mvi)
const
258 return this->m_value0[idx.valueIndex()];
275 DataTypeAlignedPtr m_value0;
283template<
typename ItemType,
typename DataType>
284class MatItemVariableScalarOutViewT
285:
public MatVariableViewBase
290 typedef A_ALIGNED_64 DataType* DataTypeAlignedPtr;
295 : MatVariableViewBase(var), m_value(v), m_value0(v[0].unguardedBasePointer()){}
317 return this->m_value0[pmvi.valueIndex()];
321 DataType&
value(ItemIndexType mvi)
const
328 return this->m_value0[idx.valueIndex()];
345 DataTypeAlignedPtr m_value0;
353template<
typename DataType>
365template<
typename DataType>
#define ARCANE_ALIGNAS(value)
Macro pour garantir l'alignement d'une classe sur value octets.
Déclarations des types généraux de Arcane.
Vue en lecture sur une variable scalaire du maillage.
Vue en écriture sur une variable scalaire du maillage.
Vue modifiable d'un tableau d'un type T.
Enumérateur sur les constituants d'une maille.
Variable scalaire sur les mailles d'un matériau du maillage.
Vue sur une partie pure ou partielles des entités d'un composant.
IMeshComponent * component() const
Composant associé
Int32ConstArrayView valueIndexes() const
Liste des valueIndex() de la partie.
Enumérateur SIMD sur une sous-partie (pure ou partielle) d'un sous-ensemble des mailles d'un composan...
constexpr __host__ __device__ MatVarIndex localId() const
Index générique pour accéder aux valeurs d'une variable.
Enumérateur sur les mailles d'un milieu.
Vecteur sur les entités d'un milieu.
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface d'un milieu d'un maillage.
Interface d'une variable matériau d'un maillage.
Vue en lecture sur une variable scalaire du maillage.
SimdTypeTraits< DataType >::SimdType operator[](const SimdMatVarIndex &mvi) const
Opérateur d'accès vectoriel avec indirection.
DataType operator[](PureMatVarIndex pmvi) const
Opérateur d'accès pour l'entité item.
DataType operator[](ItemIndexType mvi) const
Opérateur d'accès pour l'entité item.
DataType operator[](CellComponentCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
DataType operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
DataType operator[](EnvCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
DataType value(ItemIndexType mvi) const
Opérateur d'accès pour l'entité item.
Vue en lecture sur une variable scalaire du maillage.
SimdSetter< DataType > operator[](const SimdMatVarIndex &mvi) const
Opérateur d'accès vectoriel avec indirection.
DataType & value(ItemIndexType mvi) const
Opérateur d'accès pour l'entité item.
DataType & operator[](ItemIndexType mvi) const
Opérateur d'accès pour l'entité item.
DataType & operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
DataType & operator[](CellComponentCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
DataType & operator[](EnvCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
Représente un index sur les variables matériaux et milieux.
constexpr __host__ __device__ Int32 arrayIndex() const
Retourne l'indice du tableau de valeur dans la liste des variables.
constexpr __host__ __device__ Int32 valueIndex() const
Retourne l'indice dans le tableau de valeur.
IMeshMaterialVariable * materialVariable() const
Variable matériau associée.
Index d'un Item matériaux pure dans une variable.
Objet permettant de positionner les valeurs d'un vecteur SIMD.
Active toujours les traces dans les parties Arcane concernant les matériaux.
MatItemVariableScalarOutViewT< Cell, DataType > viewOut(CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture.
MatItemVariableScalarInViewT< Cell, DataType > viewIn(const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture.
ConstituentItemIndexedSelectionEnumerator< ComponentCellVectorView > arcaneImplCreateConstituentEnumerator(ComponentCell, ConstituentItemIndexedSelectionView< ComponentCellVectorView > container)
Enumérateur sur une sélection d'un constituant.
class ARCANE_MATERIALS_EXPORT(64) SimdMatVarIndex
Indexeur SIMD sur un composant.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
std::int32_t Int32
Type entier signé sur 32 bits.