Skip to content

Commit 7eb3674

Browse files
Merge pull request #1999 from arcaneframework/dev/gg-add-create-serialize-message-with-ref
Add methods in `ParallelMngUtils` to create `Ref<ISerializeMessage>`
2 parents 7bd8241 + 4868446 commit 7eb3674

12 files changed

+118
-50
lines changed

arcane/src/arcane/core/Parallel.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* Parallel.cc (C) 2000-2024 */
8+
/* Parallel.cc (C) 2000-2025 */
99
/* */
1010
/* Espace de nom des types gérant le parallélisme. */
1111
/*---------------------------------------------------------------------------*/
@@ -18,6 +18,7 @@
1818
#include "arcane/utils/FatalErrorException.h"
1919
#include "arcane/utils/PlatformUtils.h"
2020
#include "arcane/utils/ITraceMng.h"
21+
#include "arcane/utils/Math.h"
2122

2223
#include "arcane/core/IParallelMng.h"
2324
#include "arcane/core/IParallelMng.h"

arcane/src/arcane/core/ParallelMngUtils.cc

+20-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* ParallelMngUtils.cc (C) 2000-2024 */
8+
/* ParallelMngUtils.cc (C) 2000-2025 */
99
/* */
1010
/* Fonctions utilitaires associées aux 'IParallelMng'. */
1111
/*---------------------------------------------------------------------------*/
@@ -14,7 +14,7 @@
1414
#include "arcane/core/ParallelMngUtils.h"
1515

1616
#include "arcane/core/IParallelMng.h"
17-
#include "arcane/core/IParallelMngUtilsFactory.h"
17+
#include "arcane/core/internal/IParallelMngUtilsFactory.h"
1818
#include "arcane/core/internal/IParallelMngInternal.h"
1919

2020
/*---------------------------------------------------------------------------*/
@@ -81,12 +81,29 @@ class ParallelMngUtilsAccessor
8181
auto f = pm->_internalUtilsFactory();
8282
return f->createTopology(pm);
8383
}
84+
8485
static Ref<IParallelMng>
8586
createSubParallelMngRef(IParallelMng* pm, Int32 color, Int32 key)
8687
{
8788
ARCANE_CHECK_POINTER(pm);
8889
return pm->_internalApi()->createSubParallelMngRef(color, key);
8990
}
91+
92+
static Ref<ISerializeMessage>
93+
createSendSerializeMessageRef(IParallelMng* pm, Int32 rank)
94+
{
95+
ARCANE_CHECK_POINTER(pm);
96+
auto f = pm->_internalUtilsFactory();
97+
return f->createSendSerializeMessage(pm, rank);
98+
}
99+
100+
static Ref<ISerializeMessage>
101+
createReceiveSerializeMessageRef(IParallelMng* pm, Int32 rank)
102+
{
103+
ARCANE_CHECK_POINTER(pm);
104+
auto f = pm->_internalUtilsFactory();
105+
return f->createReceiveSerializeMessage(pm, rank);
106+
}
90107
};
91108

92109
/*---------------------------------------------------------------------------*/

arcane/src/arcane/core/ParallelMngUtils.h

+18-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* ParallelMngUtils.h (C) 2000-2024 */
8+
/* ParallelMngUtils.h (C) 2000-2025 */
99
/* */
1010
/* Fonctions utilitaires associées aux 'IParallelMng'. */
1111
/*---------------------------------------------------------------------------*/
@@ -80,6 +80,22 @@ createTopologyRef(IParallelMng* pm);
8080
extern "C++" ARCANE_CORE_EXPORT Ref<IParallelMng>
8181
createSubParallelMngRef(IParallelMng* pm, Int32 color, Int32 key);
8282

83+
/*!
84+
* \brief Créé un message de sérialisation non bloquant en envoi au rang \a rank.
85+
*
86+
* Le message est traité uniquement lors de l'appel à IParallelMng::processMessages().
87+
*/
88+
extern "C++" ARCANE_CORE_EXPORT Ref<ISerializeMessage>
89+
createSendSerializeMessageRef(IParallelMng* pm, Int32 rank);
90+
91+
/*!
92+
* \brief Créé un message de sérialisation non bloquant en réception du rang \a rank.
93+
*
94+
* Le message est traité uniquement lors de l'appel à IParallelMng::processMessages().
95+
*/
96+
extern "C++" ARCANE_CORE_EXPORT Ref<ISerializeMessage>
97+
createReceiveSerializeMessageRef(IParallelMng* pm, Int32 rank);
98+
8399
/*---------------------------------------------------------------------------*/
84100
/*---------------------------------------------------------------------------*/
85101

arcane/src/arcane/core/IParallelMngUtilsFactory.h arcane/src/arcane/core/internal/IParallelMngUtilsFactory.h

+30-18
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,26 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* IParallelMngUtilsFactory.h (C) 2000-2021 */
8+
/* IParallelMngUtilsFactory.h (C) 2000-2025 */
99
/* */
1010
/* Interface d'une fabrique pour les fonctions utilitaires de IParallelMng. */
1111
/*---------------------------------------------------------------------------*/
12-
#ifndef ARCANE_IPARALLELMNGUTILSFACTORY_H
13-
#define ARCANE_IPARALLELMNGUTILSFACTORY_H
12+
#ifndef ARCANE_CORE_INTERNAL_IPARALLELMNGUTILSFACTORY_H
13+
#define ARCANE_CORE_INTERNAL_IPARALLELMNGUTILSFACTORY_H
1414
/*---------------------------------------------------------------------------*/
1515
/*---------------------------------------------------------------------------*/
1616

1717
#include "arcane/utils/Ref.h"
1818

19-
#include "arcane/Parallel.h"
19+
#include "arcane/core/Parallel.h"
2020

2121
/*---------------------------------------------------------------------------*/
2222
/*---------------------------------------------------------------------------*/
2323

24-
namespace Arcane
25-
{
26-
class IItemFamily;
27-
class ItemGroup;
28-
}
29-
3024
namespace Arcane
3125
{
3226
/*---------------------------------------------------------------------------*/
@@ -38,51 +32,69 @@ namespace Arcane
3832
class ARCANE_CORE_EXPORT IParallelMngUtilsFactory
3933
{
4034
public:
35+
4136
virtual ~IParallelMngUtilsFactory() = default;
37+
4238
public:
4339

4440
/*!
4541
* \brief Retourne une opération pour récupérer les valeurs d'une variable
4642
* sur les entités d'un autre sous-domaine.
4743
*/
4844
virtual Ref<IGetVariablesValuesParallelOperation>
49-
createGetVariablesValuesOperation(IParallelMng* pm) =0;
45+
createGetVariablesValuesOperation(IParallelMng* pm) = 0;
5046

5147
//! Retourne une opération pour transférer des valeurs entre rangs.
5248
virtual Ref<ITransferValuesParallelOperation>
53-
createTransferValuesOperation(IParallelMng* pm) =0;
49+
createTransferValuesOperation(IParallelMng* pm) = 0;
5450

5551
//! Retourne une interface pour transférer des messages entre rangs
5652
virtual Ref<IParallelExchanger>
57-
createExchanger(IParallelMng* pm) =0;
53+
createExchanger(IParallelMng* pm) = 0;
5854

5955
/*!
6056
* \brief Retourne une interface pour synchroniser des
6157
* variables sur le groupe de la famille \a family
6258
*/
6359
virtual Ref<IVariableSynchronizer>
64-
createSynchronizer(IParallelMng* pm,IItemFamily* family) =0;
60+
createSynchronizer(IParallelMng* pm, IItemFamily* family) = 0;
6561

6662
/*!
6763
* \brief Retourne une interface pour synchroniser des
6864
* variables sur le groupe \a group.
6965
*/
7066
virtual Ref<IVariableSynchronizer>
71-
createSynchronizer(IParallelMng* pm,const ItemGroup& group) =0;
67+
createSynchronizer(IParallelMng* pm, const ItemGroup& group) = 0;
7268

7369
/*!
7470
* \brief Créé une instance contenant les infos sur la topologie des rangs de ce gestionnnaire.
7571
*
7672
* Cette opération est collective.
7773
*/
7874
virtual Ref<IParallelTopology>
79-
createTopology(IParallelMng* pm) =0;
75+
createTopology(IParallelMng* pm) = 0;
76+
77+
/*!
78+
* \brief Créé un message de sérialisation non bloquant en envoi au rang \a rank.
79+
*
80+
* Le message est traité uniquement lors de l'appel à IParallelMng::processMessages().
81+
*/
82+
virtual Ref<ISerializeMessage>
83+
createSendSerializeMessage(IParallelMng* pm, Int32 rank) = 0;
84+
85+
/*!
86+
* \brief Créé un message de sérialisation non bloquant en réception du rang \a rank.
87+
*
88+
* Le message est traité uniquement lors de l'appel à IParallelMng::processMessages().
89+
*/
90+
virtual Ref<ISerializeMessage>
91+
createReceiveSerializeMessage(IParallelMng* pm, Int32 rank) = 0;
8092
};
8193

8294
/*---------------------------------------------------------------------------*/
8395
/*---------------------------------------------------------------------------*/
8496

85-
} // End namespace Arcane::impl
97+
} // namespace Arcane
8698

8799
/*---------------------------------------------------------------------------*/
88100
/*---------------------------------------------------------------------------*/

arcane/src/arcane/core/srcs.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ set(ARCANE_INTERNAL_SOURCES
6868
internal/IParallelMngInternal.h
6969
internal/IItemFamilyInternal.h
7070
internal/IMeshInternal.h
71+
internal/IParallelMngUtilsFactory.h
7172
internal/IVariableInternal.h
7273
internal/IMeshModifierInternal.h
7374
internal/ItemGroupImplInternal.h
@@ -243,7 +244,6 @@ set(ARCANE_ORIGINAL_SOURCES
243244
IParallelDispatch.h
244245
IParallelExchanger.h
245246
IParallelMng.h
246-
IParallelMngUtilsFactory.h
247247
IParallelNonBlockingCollective.h
248248
IParallelNonBlockingCollectiveDispatch.h
249249
IParallelReplication.h

arcane/src/arcane/impl/ParallelMngUtilsFactoryBase.cc

+28-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* ParallelMngUtilsFactoryBase.cc (C) 2000-2023 */
8+
/* ParallelMngUtilsFactoryBase.cc (C) 2000-2025 */
99
/* */
1010
/* Classe de base d'une fabrique pour les fonctions utilitaires de */
1111
/* IParallelMng. */
1212
/*---------------------------------------------------------------------------*/
1313
/*---------------------------------------------------------------------------*/
1414

15-
#include "arcane/impl/ParallelMngUtilsFactoryBase.h"
15+
#include "arcane/impl/internal/ParallelMngUtilsFactoryBase.h"
1616

1717
#include "arcane/utils/Real2.h"
1818
#include "arcane/utils/Real3.h"
@@ -25,9 +25,9 @@
2525
#include "arcane/impl/ParallelTopology.h"
2626
#include "arcane/impl/internal/VariableSynchronizer.h"
2727

28-
#include "arcane/DataTypeDispatchingDataVisitor.h"
29-
30-
#include "arcane/IItemFamily.h"
28+
#include "arcane/core/DataTypeDispatchingDataVisitor.h"
29+
#include "arcane/core/IItemFamily.h"
30+
#include "arcane/core/internal/SerializeMessage.h"
3131

3232
/*---------------------------------------------------------------------------*/
3333
/*---------------------------------------------------------------------------*/
@@ -96,6 +96,28 @@ createSynchronizer(IParallelMng* pm,const ItemGroup& group)
9696
/*---------------------------------------------------------------------------*/
9797
/*---------------------------------------------------------------------------*/
9898

99+
Ref<ISerializeMessage> ParallelMngUtilsFactoryBase::
100+
createSendSerializeMessage(IParallelMng* pm, Int32 rank)
101+
{
102+
Int32 my_rank = pm->commRank();
103+
auto x = new SerializeMessage(my_rank, rank, ISerializeMessage::MT_Send);
104+
return makeRef<ISerializeMessage>(x);
105+
}
106+
107+
/*---------------------------------------------------------------------------*/
108+
/*---------------------------------------------------------------------------*/
109+
110+
Ref<ISerializeMessage> ParallelMngUtilsFactoryBase::
111+
createReceiveSerializeMessage(IParallelMng* pm, Int32 rank)
112+
{
113+
Int32 my_rank = pm->commRank();
114+
auto x = new SerializeMessage(my_rank, rank, ISerializeMessage::MT_Recv);
115+
return makeRef<ISerializeMessage>(x);
116+
}
117+
118+
/*---------------------------------------------------------------------------*/
119+
/*---------------------------------------------------------------------------*/
120+
99121
} // End namespace Arcane
100122

101123
/*---------------------------------------------------------------------------*/

arcane/src/arcane/impl/SequentialParallelMng.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
#include "arcane/impl/ParallelReplication.h"
5151
#include "arcane/impl/SequentialParallelSuperMng.h"
5252
#include "arcane/impl/SequentialParallelMng.h"
53-
#include "arcane/impl/ParallelMngUtilsFactoryBase.h"
53+
#include "arcane/impl/internal/ParallelMngUtilsFactoryBase.h"
5454
#include "arcane/impl/internal/VariableSynchronizer.h"
5555

5656
#include "arccore/message_passing/RequestListBase.h"

arcane/src/arcane/impl/ParallelMngUtilsFactoryBase.h arcane/src/arcane/impl/internal/ParallelMngUtilsFactoryBase.h

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* ParallelMngUtilsFactoryBase.h (C) 2000-2021 */
8+
/* ParallelMngUtilsFactoryBase.h (C) 2000-2025 */
99
/* */
1010
/* Classe de base d'une fabrique pour les fonctions utilitaires de */
1111
/* IParallelMng. */
1212
/*---------------------------------------------------------------------------*/
13-
#ifndef ARCANE_IMPL_PARALLELMNGUTILSFACTORY_H
14-
#define ARCANE_IMPL_PARALLELMNGUTILSFACTORY_H
13+
#ifndef ARCANE_IMPL_INTERNAL_PARALLELMNGUTILSFACTORY_H
14+
#define ARCANE_IMPL_INTERNAL_PARALLELMNGUTILSFACTORY_H
1515
/*---------------------------------------------------------------------------*/
1616
/*---------------------------------------------------------------------------*/
1717

18-
#include "arcane/IParallelMngUtilsFactory.h"
18+
#include "arcane/core/internal/IParallelMngUtilsFactory.h"
1919

2020
/*---------------------------------------------------------------------------*/
2121
/*---------------------------------------------------------------------------*/
@@ -39,6 +39,8 @@ class ARCANE_IMPL_EXPORT ParallelMngUtilsFactoryBase
3939
Ref<IVariableSynchronizer> createSynchronizer(IParallelMng* pm,IItemFamily* family) override;
4040
Ref<IVariableSynchronizer> createSynchronizer(IParallelMng* pm,const ItemGroup& group) override;
4141
Ref<IParallelTopology> createTopology(IParallelMng* pm) override;
42+
Ref<ISerializeMessage> createSendSerializeMessage(IParallelMng* pm, Int32 rank) override;
43+
Ref<ISerializeMessage> createReceiveSerializeMessage(IParallelMng* pm, Int32 rank) override;
4244
};
4345

4446
/*---------------------------------------------------------------------------*/

arcane/src/arcane/impl/srcs.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ set( ARCANE_SOURCES
6565
ParallelExchanger.cc
6666
ParallelExchanger.h
6767
ParallelMngUtilsFactoryBase.cc
68-
ParallelMngUtilsFactoryBase.h
6968
ParallelReplication.cc
7069
ParallelReplication.h
7170
ParallelTopology.cc
@@ -152,6 +151,7 @@ set( ARCANE_SOURCES
152151
internal/MeshFactoryMng.cc
153152
internal/MeshMng.h
154153
internal/MeshMng.cc
154+
internal/ParallelMngUtilsFactoryBase.h
155155
internal/ThreadBindingMng.h
156156
internal/ThreadBindingMng.cc
157157
internal/VariableMng.h

arcane/src/arcane/parallel/mpi/MpiParallelMng.cc

+3-5
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
#include "arcane/impl/ParallelReplication.h"
4141
#include "arcane/impl/SequentialParallelMng.h"
42-
#include "arcane/impl/ParallelMngUtilsFactoryBase.h"
42+
#include "arcane/impl/internal/ParallelMngUtilsFactoryBase.h"
4343
#include "arcane/impl/internal/VariableSynchronizer.h"
4444

4545
#include "arccore/message_passing_mpi/MpiMessagePassingMng.h"
@@ -537,8 +537,7 @@ sendSerializer(ISerializer* s,Int32 rank)
537537
ISerializeMessage* MpiParallelMng::
538538
createSendSerializer(Int32 rank)
539539
{
540-
auto x = new SerializeMessage(m_comm_rank,rank,ISerializeMessage::MT_Send);
541-
return x;
540+
return m_utils_factory->createSendSerializeMessage(this, rank)._release();
542541
}
543542

544543
/*---------------------------------------------------------------------------*/
@@ -581,8 +580,7 @@ recvSerializer(ISerializer* values,Int32 rank)
581580
ISerializeMessage* MpiParallelMng::
582581
createReceiveSerializer(Int32 rank)
583582
{
584-
auto x = new SerializeMessage(m_comm_rank,rank,ISerializeMessage::MT_Recv);
585-
return x;
583+
return m_utils_factory->createReceiveSerializeMessage(this, rank)._release();
586584
}
587585

588586
/*---------------------------------------------------------------------------*/

0 commit comments

Comments
 (0)