Arcane  v3.14.10.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
34class SerializeMessage;
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")]]
53 ~ParallelExchanger() override;
54
55 private:
56
58
59 public:
60
61 bool initializeCommunicationsMessages() override;
62 void initializeCommunicationsMessages(Int32ConstArrayView recv_ranks) override;
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(); }
74 Int32ConstArrayView receiverRanks() override { return m_recv_ranks; }
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
106 SerializeMessage* m_own_send_message = nullptr;
107
109 SerializeMessage* m_own_recv_message = nullptr;
110
112 eExchangeMode m_exchange_mode = EM_Independant;
113
115 Int32 m_verbosity_level = 0;
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.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Options pour IParallelMng::processExchange().
Echange d'informations entre processeurs.
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.
UniqueArray< SerializeMessage * > m_recv_serialize_infos
Liste des message à recevoir.
eExchangeMode exchangeMode() const override
Mode d'échange spécifié
Int32ConstArrayView senderRanks() const override
Liste des rangs des processeurs auquel on envoie.
void addSender(Int32 rank) override
Ajoute un processeur à envoyer.
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.
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.
Message utilisant un SerializeBuffer.
Gestion d'un timer.
Definition Timer.h:62
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-