14#include "arcane/materials/internal/MeshMaterialVariableSynchronizer.h"
16#include "arcane/utils/PlatformUtils.h"
17#include "arcane/utils/MemoryUtils.h"
18#include "arcane/utils/ValueConvert.h"
20#include "arcane/core/IMesh.h"
21#include "arcane/core/IVariableSynchronizer.h"
22#include "arcane/core/ItemGroup.h"
23#include "arcane/core/IParallelMng.h"
24#include "arcane/core/IItemFamily.h"
25#include "arcane/core/internal/IParallelMngInternal.h"
27#include "arcane/materials/IMeshMaterialMng.h"
28#include "arcane/materials/MatItemEnumerator.h"
29#include "arcane/materials/IMeshMaterialSynchronizeBuffer.h"
30#include "arcane/core/materials/internal/IMeshMaterialMngInternal.h"
32#include "arcane/accelerator/core/RunQueue.h"
33#include "arcane/accelerator/Scan.h"
44MeshMaterialVariableSynchronizer::
45MeshMaterialVariableSynchronizer(IMeshMaterialMng* material_mng,
46 IVariableSynchronizer* var_syncer,
48: TraceAccessor(material_mng->traceMng())
49, m_material_mng(material_mng)
50, m_variable_synchronizer(var_syncer)
54 if (
auto v = Convert::Type<Int32>::tryParseFromEnvironment(
"ARCANE_MATERIALSYNCHRONIZER_ACCELERATOR_MODE",
true))
55 m_use_accelerator_mode = v.value();
68 return m_variable_synchronizer;
75sharedItems(Int32 index)
77 return m_shared_items[index];
84ghostItems(Int32 index)
86 return m_ghost_items[index];
95void MeshMaterialVariableSynchronizer::
107 if (view.
size() == 0)
111 if (m_use_accelerator_mode == 1)
113 if (m_use_accelerator_mode == 0)
117 _fillCellsAccelerator(items, view, queue);
119 _fillCellsSequential(items, view);
128void MeshMaterialVariableSynchronizer::
131 bool has_mat = m_var_space == MatVarSpace::MaterialAndEnvironment;
155void MeshMaterialVariableSynchronizer::
158 bool has_mat = m_var_space == MatVarSpace::MaterialAndEnvironment;
169 auto getter = [=] ARCCORE_HOST_DEVICE(Int32 index) -> Int32 {
188 auto setter = [=] ARCCORE_HOST_DEVICE(Int32 index, Int32 value) {
204 auto [index] = iter();
227void MeshMaterialVariableSynchronizer::
230 Int64
ts = m_material_mng->timestamp();
231 if (m_timestamp !=
ts)
239void MeshMaterialVariableSynchronizer::
255 Integer nb_rank =
ranks.size();
257 m_common_buffer->setNbRank(nb_rank);
259 m_shared_items.resize(nb_rank);
260 m_ghost_items.resize(nb_rank);
262 RunQueue queue = m_material_mng->_internalApi()->runQueue();
269 for (Int32 i = 0; i < nb_rank; ++i) {
277 for (Integer i = 0; i < nb_rank; ++i) {
284 _fillCells(items, view, queue);
285 info(4) <<
"SIZE SHARED FOR rank=" <<
ranks[i] <<
" n=" << items.size();
293 _fillCells(items, view, queue);
294 info(4) <<
"SIZE GHOST FOR rank=" <<
ranks[i] <<
" n=" << items.size();
302void MeshMaterialVariableSynchronizer::
305 IParallelMng* pm = m_variable_synchronizer->parallelMng();
307 m_buffer_memory_ressource = eMemoryRessource::Device;
308 info() <<
"MeshMaterialVariableSynchronizer: Using device memory for buffer";
310 m_common_buffer = impl::makeOneBufferMeshMaterialSynchronizeBufferRef(m_buffer_memory_ressource);
#define RUNCOMMAND_LOOP1(iter_name, x1,...)
Boucle sur accélérateur avec arguments supplémentaires pour les réductions.
Algorithmes de scan exclusif ou inclusif sur accélérateurs.
File d'exécution pour un accélérateur.
MemoryAllocationOptions allocationOptions() const
Options d'allocation associée à cette file.
bool isAcceleratorPolicy() const
Indique si l'instance est associée à un accélérateur.
Opérateur de Scan/Reduce pour les sommes.
Interface d'une famille d'entités.
virtual ItemGroup allItems() const =0
Groupe de toutes les entités.
virtual ItemVectorView view(Int32ConstArrayView local_ids)=0
Vue sur les entités.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual IParallelMngInternal * _internalApi()=0
API interne à Arcane.
virtual bool isParallel() const =0
Retourne true si l'exécution est parallèle.
Interface d'un service de synchronisation de variable.
Groupe d'entités de maillage.
Vue sur un tableau typé d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Vue sur une liste de mailles avec infos sur les milieux.
constexpr ARCCORE_HOST_DEVICE Integer size() const
Nombre d'éléments.
Maille arcane avec info matériaux et milieux.
Maille arcane d'un milieu.
Représente un matériau d'une maille multi-matériau.
Représente un index sur les variables matériaux et milieux.
Vue constante d'un tableau de type T.
Options pour configurer les allocations.
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
Active toujours les traces dans les parties Arcane concernant les matériaux.
MatVarSpace
Espace de définition d'une variable matériau.