14#include "arcane/parallel/VariableParallelOperationBase.h"
16#include "arcane/utils/FatalErrorException.h"
17#include "arcane/utils/ScopedPtr.h"
19#include "arcane/IParallelMng.h"
20#include "arcane/ISerializer.h"
21#include "arcane/ISerializeMessage.h"
22#include "arcane/IParallelExchanger.h"
23#include "arcane/ISubDomain.h"
24#include "arcane/IVariable.h"
25#include "arcane/IItemFamily.h"
26#include "arcane/ItemInternal.h"
27#include "arcane/ItemGroup.h"
28#include "arcane/ParallelMngUtils.h"
38 const Int64 SERIALIZE_MAGIC_NUMBER = 0x4cf92789;
44VariableParallelOperationBase::
45VariableParallelOperationBase(IParallelMng* pm)
46: TraceAccessor(pm->traceMng())
48, m_item_family(nullptr)
55void VariableParallelOperationBase::
60 m_item_family = family;
75void VariableParallelOperationBase::
80 if (variable->
itemGroup().itemFamily()!=m_item_family)
81 ARCANE_FATAL(
"variable->itemFamily() and itemFamily() differ");
82 m_variables.add(variable);
88void VariableParallelOperationBase::
91 if (m_variables.empty())
101 m_items_to_send.clear();
102 m_items_to_send.resize(nb_rank);
108 auto exchanger {ParallelMngUtils::createExchangerRef(pm)};
110 for( Integer i=0; i<nb_rank; ++i )
111 if (!m_items_to_send[i].empty())
112 exchanger->addSender(i);
114 bool no_exchange = exchanger->initializeCommunicationsMessages();
120 for( Integer i=0, is=exchanger->nbSender(); i<is; ++i ){
130 for( Integer z=0; z<
nb_item; ++z ){
138 sbuf->setMode(ISerializer::ModeReserve);
150 debug(
Trace::High) <<
"Serialize variable (reserve)" <<
var->name();
154 sbuf->allocateBuffer();
157 sbuf->setMode(ISerializer::ModePut);
172 exchanger->processExchange();
175 debug() <<
"VariableParallelOperationBase::readVariables()";
181 for( Integer i=0, n=exchanger->nbReceiver(); i<n; ++i ){
190 ARCANE_FATAL(
"Bad magic number actual={0} expected={1}. This is probably due to incoherent messaging",
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Interface d'une opération sur une donnée.
Interface d'une famille d'entités.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
Interface d'une variable.
virtual ItemGroup itemGroup() const =0
Groupe du maillage associé.
Vue sur une liste pour obtenir des informations sur les entités.
Classe de base d'un élément de maillage.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Interface d'un sérialiseur.
Interface d'un message de sérialisation entre IMessagePassingMng.
Implémentation de la concurrence.
@ DT_Int64
Donnée de type entier 64 bits.
@ Highest
Niveau le plus élevé