12#ifndef ARCANE_SIMDITEM_H
13#define ARCANE_SIMDITEM_H
23#ifndef ARCANE_SIMD_BENCH
24#include "arcane/ItemEnumerator.h"
41template<
typename ItemType>
42class SimdItemEnumeratorT;
82 ARCANE_DEPRECATED_REASON(
"Y2022: Use another constructor")
89 : m_simd_local_ids(*ids), m_shared_info(shared_info) { }
94 ARCANE_DEPRECATED_REASON(
"Y2022: Use method SimdItem::item() instead")
95 ItemInternal* item(Integer si)
const {
return m_shared_info->m_items_internal[localId(si)]; }
97 ARCANE_DEPRECATED_REASON(
"Y2022: Use method SimdItem::operator[]() instead")
98 ItemInternal* operator[](Integer si)
const {
return m_shared_info->m_items_internal[localId(si)]; }
104 const Int32* ARCANE_RESTRICT
localIds()
const {
return (
const Int32*)&m_simd_local_ids; }
107 Int32
localId(Int32 index)
const {
return m_simd_local_ids[index]; }
111 SimdIndexType m_simd_local_ids;
126 ARCANE_DEPRECATED_REASON(
"Y2022: Use another constructor")
128 : m_base_local_id(base_local_id), m_nb_valid(nb_valid),
129 m_shared_info(ItemInternalCompatibility::_getSharedInfo(items,nb_valid)) { }
134 : m_base_local_id(base_local_id), m_nb_valid(nb_valid), m_shared_info(shared_info) {}
138 : m_base_local_id(base_local_id), m_nb_valid(nb_valid),
139 m_shared_info(ItemInternalCompatibility::_getSharedInfo(items,nb_valid)) { }
144 inline Integer
nbValid()
const {
return m_nb_valid; }
151 Int32 m_base_local_id;
164template<
typename ItemType>
171 : m_local_ids(local_ids){}
173 : m_local_ids(*local_ids){}
178 const SimdIndexType& ARCANE_RESTRICT m_local_ids;
186template<
typename ItemType>
191 : m_base_local_id(base_local_id){}
193 inline Int32 baseLocalId()
const {
return m_base_local_id; }
195 Int32 m_base_local_id;
209 ARCANE_DEPRECATED_REASON(
"Y2022: Use another constructor")
211 :
SimdItemBase(ItemInternalCompatibility::_getSharedInfo(items,1),ids) { }
233template<
typename ItemType>
246 ARCANE_DEPRECATED_REASON(
"Y2022: Use another constructor")
259 ItemType
item(Integer si)
const
261 return ItemType(
localId(si),m_shared_info);
267 return ItemType(
localId(si),m_shared_info);
282template<
typename ItemType>
294 ARCANE_DEPRECATED_REASON(
"Y2022: Use another constructor")
318template<
typename DataType>
321 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
325 : idx(_indexes), m_data(_data)
329 void operator=(
const SimdType& vr)
333 void operator=(
const DataType& v)
340 DataType* ARCANE_RESTRICT m_data;
349template<
typename DataType>
352 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
357 void operator=(
const SimdType& vr)
362 DataType* ARCANE_RESTRICT m_data;
404 :
SimdEnumeratorBase(local_ids,n), m_shared_info(ItemInternalCompatibility::_getSharedInfo(items,n)) { }
407 :
SimdEnumeratorBase(local_ids), m_shared_info(ItemInternalCompatibility::_getSharedInfo(items.data(),local_ids.size())) { }
426template<
typename ItemType>
456 SimdItemType operator*()
const
458 return SimdItemType(m_shared_info,_currentSimdIndex());
471#ifndef ARCANE_SIMD_BENCH
484#ifndef ARCANE_SIMD_BENCH
521template <
typename ItemType>
528 return g._simdEnumerator();
534 return g.enumerator();
540 template <
typename T>
543 return g.enumerator();
550#define ENUMERATE_SIMD_(type, iname, view) \
551 for (A_TRACE_ITEM_ENUMERATOR(SimdItemEnumeratorT<type>) iname(::Arcane::SimdItemEnumeratorContainerTraits<type>::getSimdEnumerator(view) A_TRACE_ENUMERATOR_WHERE); iname.hasNext(); ++iname)
554#define ENUMERATE_SIMD_GENERIC(type, iname, view) \
555 ENUMERATE_SIMD_(type,iname,view)
561#define ENUMERATE_SIMD_NODE(name, group) ENUMERATE_SIMD_(::Arcane::Node, name, group)
567#define ENUMERATE_SIMD_EDGE(name, group) ENUMERATE_SIMD_(::Arcane::Edge, name, group)
573#define ENUMERATE_SIMD_FACE(name, group) ENUMERATE_SIMD_(::Arcane::Face, name, group)
579#define ENUMERATE_SIMD_CELL(name, group) ENUMERATE_SIMD_(::Arcane::Cell, name, group)
585#define ENUMERATE_SIMD_PARTICLE(name, group) ENUMERATE_SIMD_(::Arcane::Particle, name, group)
Vectorisation des entiers en utilisant une émulation.
Référence à un groupe d'un genre donné.
Int32ConstArrayView localIds() const
Tableau des numéros locaux des entités.
Vue sur un tableau typé d'entités.
Classe de base d'un élément de maillage.
Objet permettant de positionner les valeurs d'un vecteur SIMD.
Classe de base des énumérateurs vectoriels avec indirection.
Integer nbValid() const
Nombre de valeurs valides pour l'itérateur courant.
Classe gérant un vecteur SIMD d'entité.
const Int32 *ARCANE_RESTRICT localIds() const
Liste des numéros locaux des entités de l'instance.
const SimdIndexType &ARCANE_RESTRICT simdLocalIds() const
Liste des numéros locaux des entités de l'instance.
Int32 localId(Int32 index) const
Numéro local de l'entité d'indice index.
Int32 baseLocalId() const
Liste des numéros locaux des entités de l'instance.
Integer nbValid() const
Nombre d'entités valides de l'instance.
Index vectoriel sans indirection pour un type d'entité
Gère un vecteur d'entité ItemType.
Index vectoriel avec indirection pour un type d'entité. TODO: stocker les index dans un registre vect...
const SimdIndexType &ARCANE_RESTRICT simdLocalIds() const
Liste des numéros locaux des entités de l'instance.
Gère un vecteur d'entité ItemType.
ItemType operator[](Integer si) const
Retourne la si-ième entité de l'instance.
ItemType item(Integer si) const
Retourne la si-ième entité de l'instance.
Gère un vecteur d'entité Item.
Item item(Int32 si) const
inline si-ième entité de l'instance
Item operator[](Int32 si) const
inline si-ième entité de l'instance
Vue constante d'un tableau de type T.
SimdItemT< Edge > SimdEdge
Vecteur SIMD de Edge.
SimdItemT< Cell > SimdCell
Vecteur SIMD de Cell.
SimdItemT< Face > SimdFace
Vecteur SIMD de Face.
SimdItemT< Particle > SimdParticle
Vecteur SIMD de Particle.
SimdItemT< Node > SimdNode
Vecteur SIMD de Node.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.