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"
46class NonBlockingParticleExchanger
48,
public IParticleExchanger
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;
58 ~NonBlockingParticleExchanger()
override;
86 ARCANE_UNUSED(nb_particle);
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;
138 Int64 m_nb_particle_finished_exchange;
147 void _clearMessages();
157 void _processFinishTrackingMessage();
158 void _addFinishExchangeParticle(
Int64 nb_particle_finish_exchange);
159 void _sendFinishExchangeParticle();
164 void _sendPendingMessages();
165 void _checkNeedReceiveMessage();
173 void _checkInitialized();
Interface d'un échangeur de particules asynchrone.
Interface d'une famille d'entités.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Groupe d'entités de maillage.
Interface d'un message de sérialisation entre IMessagePassingMng.
Exception lorsqu'une fonction n'est pas implémentée.
Référence à une instance.
Message utilisant un SerializeBuffer.
Structure contenant les informations pour créer un service.
Vecteur 1D de données avec sémantique par référence.
Vecteur 1D de données avec sémantique par valeur (style STL).
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)
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Array< Int64 > Int64Array
Tableau dynamique à une dimension d'entiers 64 bits.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
double Real
Type représentant un réel.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
std::int32_t Int32
Type entier signé sur 32 bits.