Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ParallelExchanger.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* ParallelExchanger.h (C) 2000-2022 */
9/* */
10/* Echange d'informations entre processeurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_PARALLELEXCHANGER_H
13#define ARCANE_PARALLELEXCHANGER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/Array.h"
19#include "arcane/utils/String.h"
20#include "arcane/utils/Ref.h"
21
22#include "arcane/IParallelExchanger.h"
23#include "arcane/Timer.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
43class ARCANE_IMPL_EXPORT ParallelExchanger
44: public TraceAccessor
45, public IParallelExchanger
46{
47 friend ARCANE_IMPL_EXPORT Ref<IParallelExchanger> createParallelExchangerImpl(Ref<IParallelMng> pm);
48
49 public:
50
51 [[deprecated("Y2022: Use Arcane::createParallelExchangerImpl() instead")]]
52 ParallelExchanger(IParallelMng* pm);
53 ~ParallelExchanger() override;
54
55 private:
56
57 ParallelExchanger(Ref<IParallelMng> pm);
58
59 public:
60
63 void processExchange() override;
64 void processExchange(const ParallelExchangerOptions& options) override;
65
66 public:
67
68 IParallelMng* parallelMng() const override;
69 Integer nbSender() const override { return m_send_ranks.size(); }
70 Int32ConstArrayView senderRanks() const override { return m_send_ranks; }
71 void addSender(Int32 rank) override { m_send_ranks.add(rank); }
72 ISerializeMessage* messageToSend(Integer i) override;
73 Integer nbReceiver() const override { return m_recv_ranks.size(); }
75 ISerializeMessage* messageToReceive(Integer i) override;
76
77 void setExchangeMode(eExchangeMode mode) override { m_exchange_mode = mode; }
78 eExchangeMode exchangeMode() const override { return m_exchange_mode; }
79
80 void setVerbosityLevel(Int32 v) override;
81 Int32 verbosityLevel() const override { return m_verbosity_level; }
82
83 void setName(const String& name) override;
84 String name() const override { return m_name; }
85
86 private:
87
88 Ref<IParallelMng> m_parallel_mng;
89
92
95
98
101
104
107
110
113
116
119
122
123 private:
124
125 void _initializeCommunicationsMessages();
126 void _processExchangeCollective();
127 void _processExchangeWithControl(Int32 max_pending_message);
128 void _processExchange(const ParallelExchangerOptions& options);
129};
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
133
134extern "C++" ARCANE_IMPL_EXPORT Ref<IParallelExchanger>
135createParallelExchangerImpl(Ref<IParallelMng> pm);
136
137/*---------------------------------------------------------------------------*/
138/*---------------------------------------------------------------------------*/
139
140} // End namespace Arcane
141
142/*---------------------------------------------------------------------------*/
143/*---------------------------------------------------------------------------*/
144
145#endif
Echange d'informations entre processeurs.
@ EM_Independant
Utilise les échanges point à point (send/recv)
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'un message de sérialisation entre IMessagePassingMng.
Options pour IParallelMng::processExchange().
Int32UniqueArray m_send_ranks
Liste des sous-domaines à envoyer.
String m_name
Nom de l'instance utilisé pour l'affichage.
void setExchangeMode(eExchangeMode mode) override
Positionne le mode d'échange.
Integer nbSender() const override
Nombre de processeurs auquel on envoie.
bool initializeCommunicationsMessages() override
Calcule les communications.
UniqueArray< SerializeMessage * > m_recv_serialize_infos
Liste des message à recevoir.
eExchangeMode exchangeMode() const override
Mode d'échange spécifié
void processExchange() override
Effectue l'échange avec les options par défaut de ParallelExchangerOptions.
Int32ConstArrayView senderRanks() const override
Liste des rangs des processeurs auquel on envoie.
void _processExchangeWithControl(Int32 max_pending_message)
Echange avec contrôle du nombre maximum de messages en vol.
Int32 m_verbosity_level
Niveau de verbosité
void addSender(Int32 rank) override
Ajoute un processeur à envoyer.
SerializeMessage * m_own_send_message
Message envoyé à soi-même.
Timer m_timer
Timer pour mesurer le temps passé dans les échanges.
String name() const override
Nom de l'instance.
Int32 verbosityLevel() const override
Niveau de verbosité
Integer nbReceiver() const override
Nombre de processeurs dont on va réceptionner les messages.
UniqueArray< SerializeMessage * > m_send_serialize_infos
Liste des message à recevoir.
Int32UniqueArray m_recv_ranks
Liste des sous-domaines à recevoir.
SerializeMessage * m_own_recv_message
Message reçu par soi-même.
eExchangeMode m_exchange_mode
Mode d'échange.
Int32ConstArrayView receiverRanks() override
Liste des rangs des processeurs dont on va réceptionner les messages.
UniqueArray< ISerializeMessage * > m_comms_buf
Liste des message à envoyer et recevoir.
Référence à une instance.
Message utilisant un SerializeBuffer.
Chaîne de caractères unicode.
Gestion d'un timer.
Definition Timer.h:62
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:428
std::int32_t Int32
Type entier signé sur 32 bits.