12#ifndef ARCANE_NONBLOCKINGPARTICLEEXCHANGER_H
13#define ARCANE_NONBLOCKINGPARTICLEEXCHANGER_H
17#include "arcane/utils/List.h"
18#include "arcane/utils/ScopedPtr.h"
20#include "arcane/mesh/MeshGlobal.h"
22#include "arcane/IParticleExchanger.h"
23#include "arcane/BasicService.h"
24#include "arcane/VariableCollection.h"
32class SerializeMessage;
51 static const Integer MESSAGE_EXCHANGE = 1;
52 static const Integer MESSAGE_NB_FINISH_EXCHANGE = 2;
53 static const Integer MESSAGE_FINISH_EXCHANGE_STATUS = 3;
54 static const Integer MESSAGE_CHANGE_BLOCKING = 4;
105 Real m_total_time_functor;
106 Real m_total_time_waiting;
119 Int64 m_nb_total_particle_finish_exchange;
120 Int64 m_nb_total_particle;
122 Integer m_nb_original_blocking_size;
126 bool m_exchange_finished;
128 bool m_need_general_receive;
129 bool m_end_message_sended;
130 bool m_can_process_messages;
131 bool m_can_process_non_blocking;
133 bool m_want_process_non_blocking;
134 bool m_want_fast_send_particles;
136 Integer m_nb_receive_message;
138 Int64 m_nb_particle_finished_exchange;
142 Integer m_verbose_level;
147 void _clearMessages();
157 void _processFinishTrackingMessage();
159 void _sendFinishExchangeParticle();
164 void _sendPendingMessages();
165 void _checkNeedReceiveMessage();
173 void _checkInitialized();
Tableau d'items de types quelconques.
Classe de base de service lié à un sous-domaine.
Interface d'un échangeur de particules asynchrone.
Interface d'une famille d'entités.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'un échangeur de particules.
Groupe d'entités de maillage.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Structure contenant les informations pour créer un service.
void initialize(IItemFamily *item_family) override
Initialize l'échangeur pour la familly item_family.
UniqueArray< ISerializeMessage * > m_pending_messages
Liste des message en attente d'envoie.
bool exchangeItems(Integer nb_particle_finish_exchange, Int32ConstArrayView local_ids, Int32ConstArrayView sub_domains_to_send, ItemGroup item_group, IFunctor *functor) override
Échange des particules entre sous-domaines.
IAsyncParticleExchanger * asyncParticleExchanger() override
Gestion de l'asynchronisme (retourne nullptr si fonctionnalité non disponible)
UniqueArray< ISerializeMessage * > m_waiting_messages
Liste des message envoyés mais en cours de traitement.
VariableList m_variables_to_exchange
Liste des variables à échanger.
void beginNewExchange(Integer nb_particule) override
Commence un nouvel échange de particules.
void sendItems(Integer nb_particle_finish_exchange, Int32ConstArrayView local_ids, Int32ConstArrayView sub_domains_to_send) override
bool waitMessages(Integer nb_pending_particle, Int32Array *new_particle_local_ids, IFunctor *functor) override
void build() override
Construction de niveau build du service.
void addNewParticles(Integer nb_particle) override
Ajoute nb_particle dans l'échange actuel.
Integer verboseLevel() const override
Niveau de verbosité
Integer m_nb_blocking_size
Nombre de particules restantes avant de passer en mode bloquant.
IItemFamily * itemFamily() override
Famille associée.
void setVerboseLevel(Integer level) override
Positionne le niveau de verbosité (0 pour aucune message)
Vue constante d'un tableau de type T.
Interface d'un message de sérialisation entre IMessagePassingMng.
Exception lorsqu'une fonction n'est pas implémentée.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-