12#ifndef ARCANE_PARALLEL_THREAD_HYBRIDMESSAGEQUEUE_H
13#define ARCANE_PARALLEL_THREAD_HYBRIDMESSAGEQUEUE_H
17#include "arcane/utils/CheckedConvert.h"
18#include "arcane/utils/TraceAccessor.h"
19#include "arcane/parallel/thread/ISharedMemoryMessageQueue.h"
20#include "arcane/ArcaneTypes.h"
21#include "arcane/Parallel.h"
22#include "arcane/parallel/mpi/ArcaneMpi.h"
49 fri.m_local_rank.setValue(
r % local_nb_rank);
50 fri.m_global_rank.setValue(
r);
51 fri.m_mpi_rank.setValue(
r / local_nb_rank);
88 : m_source(s), m_destination(d){}
93 FullRankInfo destination()
const {
return m_destination; }
94 bool isSameMpiRank()
const
136 Int32 nbLocalRank()
const {
return m_nb_rank; }
139 return FullRankInfo::compute(
user_rank,m_nb_rank);
141 SourceDestinationFullRankInfo rank(MessageRank rank1,MessageRank rank2)
const
143 auto x1 = FullRankInfo::compute(rank1,m_nb_rank);
144 auto x2 = FullRankInfo::compute(rank2,m_nb_rank);
145 return SourceDestinationFullRankInfo(x1,x2);
147 MessageTag tagForSend(MessageTag user_tag,FullRankInfo orig,FullRankInfo dest)
const
149 return _tag(user_tag,dest.localRank(),orig.localRank());
151 MessageTag tagForSend(MessageTag user_tag,SourceDestinationFullRankInfo fri)
const
153 return tagForSend(user_tag,fri.source(),fri.destination());
155 MessageTag tagForReceive(MessageTag user_tag,FullRankInfo orig,FullRankInfo dest)
const
157 return _tag(user_tag,orig.localRank(),dest.localRank());
159 MessageTag tagForReceive(MessageTag user_tag,MessageRank orig_local,MessageRank dest_local)
const
161 return _tag(user_tag,orig_local,dest_local);
163 MessageTag tagForReceive(MessageTag user_tag,SourceDestinationFullRankInfo fri)
const
165 return tagForReceive(user_tag,fri.source(),fri.destination());
171 return t % m_nb_rank;
177 if (
utag>MAX_USER_TAG)
201 Int32 local_nb_rank);
214 const RankTagBuilder& rankTagBuilder()
const {
return m_rank_tag_builder; }
221 Int32 m_local_nb_rank;
223 Int32 m_debug_level = 0;
224 bool m_is_allow_null_rank_for_any_source =
true;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Informations de correspondances entre les différents rangs d'un communicateur.
MP::MessageRank m_global_rank
Rang global dans le communicateur.
MP::MessageRank globalRank() const
Rang global dans le communicateur.
MP::MessageRank mpiRank() const
Rang MPI du.
MP::MessageRank localRank() const
Rang local dans les threads.
MP::MessageRank m_mpi_rank
Rang MPI associé
MP::MessageRank m_local_rank
Rang local dans les threads.
Interface d'une file de messages avec les threads.
Interface d'une file de messages avec les threads.
Classe pour calculer à partir d'un tag utilisateur un tag contenant les informations de l'envoyeur et...
static constexpr Int32 MAX_USER_TAG_BIT
On autorise 2^14 tags soit 16384.
Int32 getReceiveRankFromTag(MessageTag internal_tag) const
Récupère le rang à partir du tag. Il s'agit de l'opération inverse de _tag()
RankTagBuilder(Int32 nb_rank)
Construit une instance pour nb_rank locaux.
Informations des buffers de réception.
Informations des buffers d'envoie.
Encapsule les informations source/destination.
Gestionnaire du parallélisme utilisant MPI.
Int32 value() const
Valeur du rang.
Informations sur la source d'un message.
Informations pour envoyer/recevoir un message point à point.
MessageRank emiterRank() const
Rang de l'émetteur du message.
MessageRank destinationRank() const
Rang de la destination du message.
Classe d'accès aux traces.
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
Déclarations des types et méthodes utilisés par les mécanismes d'échange de messages.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-