15#include "arcane/core/internal/GatherGroup.h"
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/Array2.h"
20#include "arcane/core/IParallelMng.h"
21#include "arcane/core/internal/IParallelMngInternal.h"
49~GatherGroup() =
default;
79 const Int32 writer = m_gather_group_info->m_writer;
88 const Int32 nb_sender = m_gather_group_info->m_nb_sender_to_writer;
95 for (
Int32 i = 0; i < nb_sender - 1; ++i) {
96 const Int32 rank = i + writer + 1;
97 const Int64 sizeof_recved = nb_elem_recved[i] * sizeof_elem;
100 requests[i] = pm->
recv(recv_elem, rank,
false);
102 old_size += sizeof_recved;
115 m_gather_group_info = gather_group_info;
126: m_parallel_mng(parallel_mng)
127, m_use_collective_io(use_collective_io)
134~GatherGroupInfo() =
default;
144 m_is_computed =
true;
146 if (m_use_collective_io) {
147 m_writer = m_parallel_mng->_internalApi()->masterParallelIORank();
148 m_nb_sender_to_writer = m_parallel_mng->_internalApi()->nbSendersToMasterParallelIO();
151 m_writer = m_parallel_mng->masterIORank();
152 m_nb_sender_to_writer = m_parallel_mng->commSize();
156 if ((m_parallel_mng->commSize() == 1) || (!m_parallel_mng->isThreadImplementation() && m_use_collective_io)) {
157 m_nb_elem_output = nb_elem_in;
158 m_nb_writer_global = m_parallel_mng->commSize();
162 if (m_writer != m_parallel_mng->commRank()) {
163 m_parallel_mng->send({ 1, &nb_elem_in }, m_writer);
164 m_nb_elem_output = 0;
167 m_nb_elem_recv.resizeNoInit(m_nb_sender_to_writer - 1);
171 for (
Int32 i = 0; i < m_nb_sender_to_writer - 1; ++i) {
172 const Int32 rank = i + m_writer + 1;
173 requests[i] = m_parallel_mng->recv({ 1, &m_nb_elem_recv[i] }, rank,
false);
175 m_parallel_mng->waitAllRequests(requests);
178 m_nb_elem_output = nb_elem_in;
179 for (
const Int32 size : m_nb_elem_recv) {
180 m_nb_elem_output += size;
193 return m_nb_elem_recv.smallSpan();
#define ARCANE_FATAL_IF(const,...)
Macro envoyant une exception FatalErrorException si cond est vrai.
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Vue modifiable d'un tableau d'un type T.
Classe permettant de calculer et de conserver les informations de regroupements.
void computeSize(Int32 nb_elem_in) override
Méthode permettant de calculer les informations de regroupements.
GatherGroupInfo(IParallelMng *parallel_mng, bool use_collective_io)
Constructeur.
SmallSpan< Int32 > nbElemRecvGatherToMasterIO() override
Méthode permettant de connaitre le nombre d'éléments que vont nous envoyer chaque sous-domaine tier.
bool isComputed() override
Méthode permettant de savoir si la méthode computeSize() a déjà été appelée.
GatherGroup()
Constructeur. Pour que l'objet soit utilisable, il est nécessaire d'appeler setGatherGroupInfo().
bool isNeedGather() override
Méthode permettant de savoir si l'on doit effectuer le regroupement ou si l'on peut directement écrir...
void gatherToMasterIO(Int64 sizeof_elem, Span< const Byte > in, Span< Byte > out) override
Méthode permettant de regrouper les données de plusieurs sous-domaines sur un ou plusieurs sous-domai...
void setGatherGroupInfo(GatherGroupInfo *gather_group_info)
Méthode permettant de définir les informations de regroupement.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual bool isThreadImplementation() const =0
Indique si l'implémentation utilise les threads.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
virtual void recv(ArrayView< char > values, Int32 rank)=0
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
virtual void waitAllRequests(ArrayView< Request > rvalues)=0
Bloque en attendant que les requêtes rvalues soient terminées.
Vue d'un tableau d'éléments de type T.
__host__ __device__ void copy(const U ©_array)
Recopie le tableau copy_array dans l'instance.
constexpr ConstArrayView< value_type > constSmallView() const
Vue constante sur cette vue.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Vue d'un tableau d'éléments de type T.
constexpr __host__ __device__ Span< T, DynExtent > subSpan(Int64 abegin, Int64 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
Vecteur 1D de données avec sémantique par valeur (style STL).
@ ReduceSum
Somme des valeurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.