Implémentation de la classe ItemGroupImpl. Plus de détails...
#include <arcane/core/internal/ItemGroupInternal.h>
Classes | |
class | CheckNeedUpdateMutex |
Mutex pour protéger les appels à ItemGroupImpl::_checkNeedUpdate(). Plus de détails... | |
Attributs publics | |
ItemGroupImplInternal | m_internal_api |
IMesh * | m_mesh = nullptr |
Gestionnaire de groupe associé | |
IItemFamily * | m_item_family = nullptr |
Famille associée. | |
ItemGroupImpl * | m_parent = nullptr |
String | m_variable_name |
Groupe parent (groupe null si aucun) | |
String | m_full_name |
Nom complet du groupe. | |
bool | m_is_null = true |
true si le groupe est nul | |
eItemKind | m_kind = IK_Unknown |
Genre des entités du groupe. | |
String | m_name |
Nom du groupe. | |
bool | m_is_own = false |
true si groupe contient uniquement les entités dont on est propriétaire. | |
Int64 | m_simd_timestamp = -1 |
Temps de la derniere modification pour le calcul des infos SIMD. | |
ItemGroupImpl * | m_own_group = nullptr |
Items owned by the subdomain. | |
ItemGroupImpl * | m_ghost_group = nullptr |
Items not owned by the subdomain. | |
ItemGroupImpl * | m_interface_group = nullptr |
Items on the boundary of two subdomains. | |
ItemGroupImpl * | m_node_group = nullptr |
Groupe des noeuds. | |
ItemGroupImpl * | m_edge_group = nullptr |
Groupe des arêtes. | |
ItemGroupImpl * | m_face_group = nullptr |
Groupe des faces. | |
ItemGroupImpl * | m_cell_group = nullptr |
Groupe des mailles. | |
ItemGroupImpl * | m_inner_face_group = nullptr |
Groupe des faces internes. | |
ItemGroupImpl * | m_outer_face_group = nullptr |
ItemGroupImpl * | m_active_cell_group = nullptr |
AMR. | |
ItemGroupImpl * | m_own_active_cell_group = nullptr |
Groupe des mailles propres actives. | |
ItemGroupImpl * | m_active_face_group = nullptr |
Groupe des faces actives. | |
ItemGroupImpl * | m_own_active_face_group = nullptr |
Groupe des faces actives propres. | |
ItemGroupImpl * | m_inner_active_face_group = nullptr |
Groupe des faces internes actives. | |
ItemGroupImpl * | m_outer_active_face_group = nullptr |
Groupe des faces externes actives. | |
std::map< Integer, ItemGroupImpl * > | m_level_cell_group |
Groupe des mailles de niveau. | |
std::map< Integer, ItemGroupImpl * > | m_own_level_cell_group |
Groupe des mailles propres de niveau. | |
UniqueArray< ItemGroupImpl * > | m_children_by_type |
Liste des fils de ce groupe par type d'entité | |
std::map< String, AutoRefT< ItemGroupImpl > > | m_sub_groups |
Ensemble de tous les sous-groupes. | |
bool | m_need_recompute = false |
Vrai si le groupe doit être recalculé | |
bool | m_need_invalidate_on_recompute = false |
Vrai si l'on doit activer les invalidate observers en cas de recalcul. | |
bool | m_transaction_mode = false |
Vrai si le groupe est en mode de transaction directe. | |
bool | m_is_local_to_sub_domain = false |
Vrai si le groupe est local au sous-domaine. | |
IFunctor * | m_compute_functor = nullptr |
Fonction de calcul du groupe. | |
bool | m_is_all_items = false |
Indique s'il s'agit du groupe de toutes les entités. | |
bool | m_is_constituent_group = false |
Indique si le groupe est associé à un constituant (IMeshComponent) | |
SharedPtrT< GroupIndexTable > | m_group_index_table |
Table de hachage du local id des items vers leur position en enumeration. | |
Ref< IVariableSynchronizer > | m_synchronizer |
Synchronizer du groupe. | |
Int32UniqueArray | m_items_index_in_all_group |
std::map< const void *, IItemGroupObserver * > | m_observers |
localids -> index (UNIQUEMENT ALLITEMS) | |
bool | m_observer_need_info = false |
Synthése de besoin de observers en informations de transition. | |
UniqueArray< UniqueArray< Int32 > > | m_children_by_type_ids |
Liste des localId() par type d'entité. | |
ItemTypeId | m_unique_children_type { IT_NullType } |
Indique le type des entités du groupe. | |
Int64 | m_children_by_type_ids_computed_timestamp = -1 |
Timestamp indiquant quand a été calculé la liste des ids des enfants. | |
bool | m_is_debug_apply_operation = false |
CheckNeedUpdateMutex | m_check_need_update_mutex |
Mutex pour protéger la mise à jour. | |
Fonctions membres privées | |
void | _notifyDirectRemoveItems (SmallSpan< const Int32 > removed_ids, Int32 nb_remaining) |
void | _init () |
Attributs privés | |
Int64 | m_timestamp = -1 |
Temps de la derniere modification. | |
UniqueArray< Int32 > | m_local_buffer { MemoryUtils::getAllocatorForMostlyReadOnlyData() } |
Array< Int32 > * | m_items_local_id = &m_local_buffer |
Liste des numéros locaux des entités de ce groupe. | |
VariableArrayInt32 * | m_variable_items_local_id = nullptr |
bool | m_is_contiguous = false |
bool | m_is_check_simd_padding = true |
Vrai si les localIds sont consécutifs. | |
bool | m_is_print_check_simd_padding = false |
bool | m_is_print_apply_simd_padding = false |
bool | m_is_print_stack_apply_simd_padding = false |
bool | m_use_v2_for_apply_operation = true |
Gestion pour applyOperation() Version 2. | |
Amis | |
class | ItemGroupImplInternal |
Implémentation de la classe ItemGroupImpl.
Le container contenant la liste des entités du groupe est soit une variable dans le cas d'une group standard, soit un tableau simple dans le cas d'un groupe ayant un parent. En effet, les groupes ayant des parents sont des groupes générés dynamiquement (par exemple le groupe des entités propres) et ne sont donc pas toujours présents sur tous les sous-domaines (une variable doit toujours exister sur tous les sous-domaines). De plus, leur valeur n'a pas besoin d'être sauvée lors d'une protection.
Définition à la ligne 52 du fichier ItemGroupInternal.h.
Arcane::ItemGroupInternal::ItemGroupInternal | ( | ) |
Définition à la ligne 40 du fichier ItemGroupInternal.cc.
Arcane::ItemGroupInternal::ItemGroupInternal | ( | IItemFamily * | family, |
const String & | name ) |
Définition à la ligne 50 du fichier ItemGroupInternal.cc.
Arcane::ItemGroupInternal::ItemGroupInternal | ( | IItemFamily * | family, |
ItemGroupImpl * | parent, | ||
const String & | name ) |
Définition à la ligne 66 du fichier ItemGroupInternal.cc.
Arcane::ItemGroupInternal::~ItemGroupInternal | ( | ) |
Définition à la ligne 83 du fichier ItemGroupInternal.cc.
|
private |
Définition à la ligne 98 du fichier ItemGroupInternal.cc.
|
private |
Définition à la ligne 527 du fichier ItemGroupInternal.cc.
Définition à la ligne 362 du fichier ItemGroupInternal.cc.
void Arcane::ItemGroupInternal::applySimdPadding | ( | ) |
Applique le padding pour la vectorisation.
Définition à la ligne 294 du fichier ItemGroupInternal.cc.
Références Arcane::platform::getStackTrace(), Arcane::ITraceMng::info(), m_item_family, et m_name.
Référencé par checkUpdateSimdPadding().
void Arcane::ItemGroupInternal::checkIsContiguous | ( | ) |
Vérifie que les localIds() sont contigüs.
Définition à la ligne 269 du fichier ItemGroupInternal.cc.
Références Arcane::ConstArrayView< T >::empty(), et Arcane::ConstArrayView< T >::size().
void Arcane::ItemGroupInternal::checkUpdateSimdPadding | ( | ) |
Remplit les derniers éléments du groupe pour avoir un vecteur SIMD complet.
Pour que la vectorisation fonctionne il faut que le nombre d'éléments du groupe soit un multiple de la taille d'un vecteur SIMD. Si ce n'est pas le cas, on remplit les dernières valeurs du tableau des localId() avec le dernier élément.
Par exemple, on supporse une taille d'un vecteur SIMD de 8 (ce qui est le maximum actuellement avec l'AVX512) et un groupe grp de 13 éléments. Il faut donc remplit le groupe comme suit:
A noter que la taille du groupe reste effectivement de 13 éléments. Le padding supplémentaire n'est que pour les itérations via ENUMERATE_SIMD. Comme le tableau des localId() est alloué avec l'allocateur d'alignement il est garanti que la mémoire allouée est suffisante pour faire le padding.
Définition à la ligne 338 du fichier ItemGroupInternal.cc.
Références applySimdPadding(), Arcane::ITraceMng::info(), m_is_check_simd_padding, m_item_family, et m_simd_timestamp.
void Arcane::ItemGroupInternal::checkValid | ( | ) |
Définition à la ligne 451 du fichier ItemGroupInternal.cc.
|
inline |
Définition à la ligne 126 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 164 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 140 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 165 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 246 du fichier ItemGroupInternal.h.
ItemInfoListView Arcane::ItemGroupInternal::itemInfoListView | ( | ) | const |
Définition à la ligne 161 du fichier ItemGroupInternal.cc.
ItemInternalList Arcane::ItemGroupInternal::items | ( | ) | const |
Définition à la ligne 141 du fichier ItemGroupInternal.cc.
|
inline |
Définition à la ligne 134 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 135 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 129 du fichier ItemGroupInternal.h.
Int32 Arcane::ItemGroupInternal::maxLocalId | ( | ) | const |
Définition à la ligne 152 du fichier ItemGroupInternal.cc.
|
inline |
Définition à la ligne 128 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 136 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 125 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 166 du fichier ItemGroupInternal.h.
void Arcane::ItemGroupInternal::notifyCompactObservers | ( | const Int32ConstArrayView * | info | ) |
Définition à la ligne 233 du fichier ItemGroupInternal.cc.
void Arcane::ItemGroupInternal::notifyExtendObservers | ( | const Int32ConstArrayView * | info | ) |
Définition à la ligne 203 du fichier ItemGroupInternal.cc.
void Arcane::ItemGroupInternal::notifyInvalidateObservers | ( | ) |
Définition à la ligne 248 du fichier ItemGroupInternal.cc.
void Arcane::ItemGroupInternal::notifyReduceObservers | ( | const Int32ConstArrayView * | info | ) |
Définition à la ligne 218 du fichier ItemGroupInternal.cc.
|
inline |
Définition à la ligne 127 du fichier ItemGroupInternal.h.
void Arcane::ItemGroupInternal::resetSubGroups | ( | ) |
Définition à la ligne 172 du fichier ItemGroupInternal.cc.
|
inline |
Définition à la ligne 149 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 139 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 143 du fichier ItemGroupInternal.h.
|
inline |
Définition à la ligne 137 du fichier ItemGroupInternal.h.
|
friend |
Définition à la ligne 54 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_active_cell_group = nullptr |
ItemGroupImpl* Arcane::ItemGroupInternal::m_active_face_group = nullptr |
Groupe des faces actives.
Définition à la ligne 212 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_cell_group = nullptr |
Groupe des mailles.
Définition à la ligne 204 du fichier ItemGroupInternal.h.
CheckNeedUpdateMutex Arcane::ItemGroupInternal::m_check_need_update_mutex |
Mutex pour protéger la mise à jour.
Définition à la ligne 291 du fichier ItemGroupInternal.h.
UniqueArray<ItemGroupImpl*> Arcane::ItemGroupInternal::m_children_by_type |
Liste des fils de ce groupe par type d'entité
Définition à la ligne 219 du fichier ItemGroupInternal.h.
UniqueArray<UniqueArray<Int32> > Arcane::ItemGroupInternal::m_children_by_type_ids |
Liste des localId() par type d'entité.
Définition à la ligne 271 du fichier ItemGroupInternal.h.
Int64 Arcane::ItemGroupInternal::m_children_by_type_ids_computed_timestamp = -1 |
Timestamp indiquant quand a été calculé la liste des ids des enfants.
Définition à la ligne 285 du fichier ItemGroupInternal.h.
IFunctor* Arcane::ItemGroupInternal::m_compute_functor = nullptr |
Fonction de calcul du groupe.
Définition à la ligne 226 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_edge_group = nullptr |
Groupe des arêtes.
Définition à la ligne 202 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_face_group = nullptr |
Groupe des faces.
Définition à la ligne 203 du fichier ItemGroupInternal.h.
String Arcane::ItemGroupInternal::m_full_name |
Nom complet du groupe.
Définition à la ligne 184 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_ghost_group = nullptr |
Items not owned by the subdomain.
Définition à la ligne 199 du fichier ItemGroupInternal.h.
SharedPtrT<GroupIndexTable> Arcane::ItemGroupInternal::m_group_index_table |
Table de hachage du local id des items vers leur position en enumeration.
Définition à la ligne 229 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_inner_active_face_group = nullptr |
Groupe des faces internes actives.
Définition à la ligne 214 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_inner_face_group = nullptr |
Groupe des faces internes.
Définition à la ligne 205 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_interface_group = nullptr |
Items on the boundary of two subdomains.
Définition à la ligne 200 du fichier ItemGroupInternal.h.
ItemGroupImplInternal Arcane::ItemGroupInternal::m_internal_api |
Définition à la ligne 179 du fichier ItemGroupInternal.h.
bool Arcane::ItemGroupInternal::m_is_all_items = false |
Indique s'il s'agit du groupe de toutes les entités.
Définition à la ligne 227 du fichier ItemGroupInternal.h.
|
private |
Vrai si les localIds sont consécutifs.
Définition à la ligne 254 du fichier ItemGroupInternal.h.
Référencé par checkUpdateSimdPadding().
bool Arcane::ItemGroupInternal::m_is_constituent_group = false |
Indique si le groupe est associé à un constituant (IMeshComponent)
Définition à la ligne 228 du fichier ItemGroupInternal.h.
|
private |
Définition à la ligne 253 du fichier ItemGroupInternal.h.
bool Arcane::ItemGroupInternal::m_is_debug_apply_operation = false |
Définition à la ligne 287 du fichier ItemGroupInternal.h.
bool Arcane::ItemGroupInternal::m_is_local_to_sub_domain = false |
Vrai si le groupe est local au sous-domaine.
Définition à la ligne 225 du fichier ItemGroupInternal.h.
bool Arcane::ItemGroupInternal::m_is_null = true |
true si le groupe est nul
Définition à la ligne 185 du fichier ItemGroupInternal.h.
bool Arcane::ItemGroupInternal::m_is_own = false |
true si groupe contient uniquement les entités dont on est propriétaire.
Définition à la ligne 188 du fichier ItemGroupInternal.h.
|
private |
Définition à la ligne 256 du fichier ItemGroupInternal.h.
|
private |
Définition à la ligne 255 du fichier ItemGroupInternal.h.
|
private |
Définition à la ligne 257 du fichier ItemGroupInternal.h.
IItemFamily* Arcane::ItemGroupInternal::m_item_family = nullptr |
Famille associée.
Définition à la ligne 181 du fichier ItemGroupInternal.h.
Référencé par applySimdPadding(), et checkUpdateSimdPadding().
Int32UniqueArray Arcane::ItemGroupInternal::m_items_index_in_all_group |
Définition à la ligne 233 du fichier ItemGroupInternal.h.
Liste des numéros locaux des entités de ce groupe.
Définition à la ligne 251 du fichier ItemGroupInternal.h.
eItemKind Arcane::ItemGroupInternal::m_kind = IK_Unknown |
Genre des entités du groupe.
Définition à la ligne 186 du fichier ItemGroupInternal.h.
std::map<Integer, ItemGroupImpl*> Arcane::ItemGroupInternal::m_level_cell_group |
Groupe des mailles de niveau.
Définition à la ligne 216 du fichier ItemGroupInternal.h.
|
private |
Définition à la ligne 250 du fichier ItemGroupInternal.h.
IMesh* Arcane::ItemGroupInternal::m_mesh = nullptr |
Gestionnaire de groupe associé
Définition à la ligne 180 du fichier ItemGroupInternal.h.
String Arcane::ItemGroupInternal::m_name |
Nom du groupe.
Définition à la ligne 187 du fichier ItemGroupInternal.h.
Référencé par applySimdPadding().
bool Arcane::ItemGroupInternal::m_need_invalidate_on_recompute = false |
Vrai si l'on doit activer les invalidate observers en cas de recalcul.
Définition à la ligne 223 du fichier ItemGroupInternal.h.
bool Arcane::ItemGroupInternal::m_need_recompute = false |
Vrai si le groupe doit être recalculé
Définition à la ligne 222 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_node_group = nullptr |
Groupe des noeuds.
Définition à la ligne 201 du fichier ItemGroupInternal.h.
bool Arcane::ItemGroupInternal::m_observer_need_info = false |
Synthése de besoin de observers en informations de transition.
Définition à la ligne 236 du fichier ItemGroupInternal.h.
std::map<const void*, IItemGroupObserver*> Arcane::ItemGroupInternal::m_observers |
localids -> index (UNIQUEMENT ALLITEMS)
Observers du groupe
Définition à la ligne 235 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_outer_active_face_group = nullptr |
Groupe des faces externes actives.
Définition à la ligne 215 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_outer_face_group = nullptr |
Groupe des faces externes
Définition à la ligne 206 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_own_active_cell_group = nullptr |
Groupe des mailles propres actives.
Définition à la ligne 211 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_own_active_face_group = nullptr |
Groupe des faces actives propres.
Définition à la ligne 213 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_own_group = nullptr |
Items owned by the subdomain.
Définition à la ligne 198 du fichier ItemGroupInternal.h.
std::map<Integer, ItemGroupImpl*> Arcane::ItemGroupInternal::m_own_level_cell_group |
Groupe des mailles propres de niveau.
Définition à la ligne 217 du fichier ItemGroupInternal.h.
ItemGroupImpl* Arcane::ItemGroupInternal::m_parent = nullptr |
Définition à la ligne 182 du fichier ItemGroupInternal.h.
Int64 Arcane::ItemGroupInternal::m_simd_timestamp = -1 |
Temps de la derniere modification pour le calcul des infos SIMD.
Définition à la ligne 196 du fichier ItemGroupInternal.h.
Référencé par checkUpdateSimdPadding().
std::map<String, AutoRefT<ItemGroupImpl> > Arcane::ItemGroupInternal::m_sub_groups |
Ensemble de tous les sous-groupes.
Définition à la ligne 221 du fichier ItemGroupInternal.h.
Ref<IVariableSynchronizer> Arcane::ItemGroupInternal::m_synchronizer |
Synchronizer du groupe.
Définition à la ligne 230 du fichier ItemGroupInternal.h.
|
private |
Temps de la derniere modification.
Définition à la ligne 192 du fichier ItemGroupInternal.h.
bool Arcane::ItemGroupInternal::m_transaction_mode = false |
Vrai si le groupe est en mode de transaction directe.
Définition à la ligne 224 du fichier ItemGroupInternal.h.
ItemTypeId Arcane::ItemGroupInternal::m_unique_children_type { IT_NullType } |
Indique le type des entités du groupe.
Si différent de IT_NullType, cela signifie que toutes les entités du groupe sont du même type et donc on il n'est pas nécessaire de calculer le localId() des entités par type. On utilise dans ce cas directement le groupe en paramètre des applyOperation().
Définition à la ligne 282 du fichier ItemGroupInternal.h.
|
private |
Gestion pour applyOperation() Version 2.
Définition à la ligne 266 du fichier ItemGroupInternal.h.
|
private |
Définition à la ligne 252 du fichier ItemGroupInternal.h.
String Arcane::ItemGroupInternal::m_variable_name |
Groupe parent (groupe null si aucun)
Nom de la variable contenant les indices des éléments du groupe
Définition à la ligne 183 du fichier ItemGroupInternal.h.