14#include "arccore/message_passing/PointToPointSerializerMng.h"
16#include "arccore/message_passing/BasicSerializeMessage.h"
18#include "arccore/message_passing/ISerializeMessageList.h"
19#include "arccore/base/NotImplementedException.h"
20#include "arccore/base/FatalErrorException.h"
27using internal::BasicSerializeMessage;
36 : m_message_passing_mng(mpm), m_rank(mpm->
commRank())
43 message->setStrategy(m_strategy);
44 m_pending_messages.add(message);
46 void processPendingMessages()
48 for(
auto& x : m_pending_messages ){
49 m_message_list->addMessage(x.get());
50 m_waiting_messages.add(x);
52 m_pending_messages.clear();
56 processPendingMessages();
57 Integer n = m_message_list->waitMessages(wt);
59 for(
auto& x : m_waiting_messages ){
64 new_waiting_messages.
add(x);
66 m_waiting_messages.clear();
67 m_waiting_messages.copy(new_waiting_messages);
70 bool hasMessages()
const {
return !m_pending_messages.empty() || !m_waiting_messages.empty(); }
85PointToPointSerializerMng::
94PointToPointSerializerMng::
95~PointToPointSerializerMng()
106 return m_p->m_message_passing_mng;
115 m_p->processPendingMessages();
124 return m_p->waitMessages(wt,functor);
133 return m_p->hasMessages();
143 ARCCORE_FATAL(
"Can not call setDefaultTag() if hasMessages()==true");
144 m_p->m_tag = default_tag;
154 ARCCORE_FATAL(
"Can not call setStrategy() if hasMessages()==true");
155 m_p->m_strategy = strategy;
164 auto x = BasicSerializeMessage::create(m_p->m_rank,receiver_rank,m_p->m_tag,MsgSend);
175 auto x = BasicSerializeMessage::create(m_p->m_rank,sender_rank,m_p->m_tag,MsgReceive);
186 auto x = BasicSerializeMessage::create(m_p->m_rank,message_id);
Liste des fonctions d'échange de message.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Interface du gestionnaire des échanges de messages.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
Interface d'un message de sérialisation entre IMessagePassingMng.
eStrategy
Stratégie d'envoi/réception.
@ Default
Stratégie par défaut.
void processPendingMessages()
Envoie les messages de la liste qui ne l'ont pas encore été.
bool hasMessages() const
Indique s'il reste des messages qui ne sont pas encore terminés.
IMessagePassingMng * messagePassingMng() const
Gestionnaire de message associé
Ref< ISerializeMessage > addSendMessage(MessageRank receiver_rank)
Créé message de sérialisation en envoi.
Ref< ISerializeMessage > addReceiveMessage(MessageRank sender_rank)
Créé un message de sérialisation en réception.
void setDefaultTag(MessageTag default_tag)
Tag par défaut utilisé pour les messages.
void setStrategy(ISerializeMessage::eStrategy strategy)
Stratégie utilisée pour les messages.
Integer waitMessages(eWaitType wt, std::function< void(ISerializeMessage *)> functor)
Attend que les messages aient terminé leur exécution.
static MessageTag defaultTag()
Tag par défaut pour les messages de sérialisation.
Référence à une instance.
Vecteur 1D de données avec sémantique par valeur (style STL).
Espace de nommage contenant les types et déclarations qui gèrent le mécanisme de parallélisme par éch...
Ref< ISerializeMessageList > mpCreateSerializeMessageListRef(IMessagePassingMng *pm)
Créé une liste de messages de sérialisation.
Int32 Integer
Type représentant un entier.