Skip to content

Commit 4ae0e09

Browse files
[arcane,impl] Supprime utilisation de 'SerializeMessage' dans 'GetVariablesValuesParallelOperation'.
1 parent deda603 commit 4ae0e09

File tree

2 files changed

+23
-31
lines changed

2 files changed

+23
-31
lines changed

Diff for: arcane/src/arcane/impl/GetVariablesValuesParallelOperation.cc

+22-28
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,20 @@
1818
#include "arcane/core/IParallelMng.h"
1919
#include "arcane/core/ISerializer.h"
2020
#include "arcane/core/IItemFamily.h"
21-
#include "arcane/core/internal/SerializeMessage.h"
21+
#include "arcane/core/ISerializeMessage.h"
2222

2323
#include "arcane/impl/GetVariablesValuesParallelOperation.h"
2424

25+
#include "arccore/message_passing/ISerializeMessageList.h"
26+
2527
#include <map>
2628

2729
/*---------------------------------------------------------------------------*/
2830
/*---------------------------------------------------------------------------*/
2931

3032
namespace Arcane
3133
{
34+
using namespace MessagePassing;
3235

3336
/*---------------------------------------------------------------------------*/
3437
/*---------------------------------------------------------------------------*/
@@ -106,7 +109,8 @@ getVariableValues(VariableItemReal& variable,
106109

107110
UniqueArray<Int32> total_sub_domain_nb_to_send;
108111
pm->allGatherVariable(sub_domain_nb_to_send, total_sub_domain_nb_to_send);
109-
UniqueArray<ISerializeMessage*> messages;
112+
UniqueArray<Ref<ISerializeMessage>> messages;
113+
Ref<ISerializeMessageList> message_list(pm->createSerializeMessageListRef());
110114
for (Integer i = 0, is = total_sub_domain_nb_to_send.size(); i < is; i += 3) {
111115
Int32 rank_send = total_sub_domain_nb_to_send[i];
112116
Int32 rank_recv = total_sub_domain_nb_to_send[i + 1];
@@ -116,14 +120,14 @@ getVariableValues(VariableItemReal& variable,
116120
//<< " N= " << nb_exchange;
117121
if (rank_send == rank_recv)
118122
continue;
119-
SerializeMessage* sm = nullptr;
123+
Ref<ISerializeMessage> sm;
120124
if (rank_recv == my_rank) {
121125
//trace->info() << " ADD RECV MESSAGE recv=" << rank_recv << " send=" << rank_send;
122-
sm = new SerializeMessage(rank_recv, rank_send, ISerializeMessage::MT_Recv);
126+
sm = message_list->createAndAddMessage(MessageRank(rank_send), ePointToPointMessageType::MsgReceive);
123127
}
124128
else if (rank_send == my_rank) {
125129
//trace->info() << " ADD SEND MESSAGE recv=" << rank_recv << " send=" << rank_send;
126-
sm = new SerializeMessage(rank_send, rank_recv, ISerializeMessage::MT_Send);
130+
sm = message_list->createAndAddMessage(MessageRank(rank_recv), ePointToPointMessageType::MsgSend);
127131
ISerializer* s = sm->serializer();
128132
s->setMode(ISerializer::ModeReserve);
129133
auto xiter = sub_domain_list.find(rank_recv);
@@ -138,24 +142,24 @@ getVariableValues(VariableItemReal& variable,
138142
s->putInt64(nb);
139143
s->putSpan(z_unique_ids);
140144
}
141-
if (sm)
145+
if (sm.get())
142146
messages.add(sm);
143147
}
144148

145-
pm->processMessages(messages);
149+
message_list->waitMessages(eWaitType::WaitAll);
146150

147151
UniqueArray<Int64> tmp_unique_ids;
148152
UniqueArray<Int32> tmp_local_ids;
149153
UniqueArray<Real> tmp_values;
150154

151-
UniqueArray<ISerializeMessage*> values_messages;
155+
UniqueArray<Ref<ISerializeMessage>> values_messages;
152156
ItemInfoListView items_internal(item_family);
153-
for (ISerializeMessage* sm : messages) {
154-
ISerializeMessage* new_sm = nullptr;
157+
for (Ref<ISerializeMessage> sm : messages) {
158+
Ref<ISerializeMessage> new_sm;
155159
if (sm->isSend()) {
156160
// Pour recevoir les valeurs
157161
//trace->info() << " ADD RECV2 MESSAGE recv=" << my_rank << " send=" << sm->destSubDomain();
158-
new_sm = new SerializeMessage(my_rank, sm->destination().value(), ISerializeMessage::MT_Recv);
162+
new_sm = message_list->createAndAddMessage(MessageRank(sm->destination().value()), ePointToPointMessageType::MsgReceive);
159163
}
160164
else {
161165
ISerializer* s = sm->serializer();
@@ -172,7 +176,7 @@ getVariableValues(VariableItemReal& variable,
172176
}
173177

174178
//trace->info() << " ADD SEND2 MESSAGE recv=" << my_rank << " send=" << sm->destSubDomain();
175-
new_sm = new SerializeMessage(my_rank, sm->destination().value(), ISerializeMessage::MT_Send);
179+
new_sm = message_list->createAndAddMessage(MessageRank(sm->destination().value()), ePointToPointMessageType::MsgSend);
176180
ISerializer* s2 = new_sm->serializer();
177181
s2->setMode(ISerializer::ModeReserve);
178182
s2->reserveInt64(1);
@@ -186,11 +190,11 @@ getVariableValues(VariableItemReal& variable,
186190
}
187191

188192
// Supprime les messages qui ne sont plus utilisés
189-
_deleteMessages(messages);
193+
messages.clear();
190194

191-
pm->processMessages(values_messages);
195+
message_list->waitMessages(eWaitType::WaitAll);
192196

193-
for (ISerializeMessage* sm : values_messages) {
197+
for (Ref<ISerializeMessage> sm : values_messages) {
194198
if (sm->isSend()) {
195199
}
196200
else {
@@ -222,7 +226,8 @@ getVariableValues(VariableItemReal& variable,
222226
}
223227

224228
// Supprime les messages qui ne sont plus utilisés
225-
_deleteMessages(values_messages);
229+
values_messages.clear();
230+
//_deleteMessages(values_messages);
226231

227232
#if 0
228233
{
@@ -308,17 +313,6 @@ getVariableValues(VariableItemReal& variable, Int64ConstArrayView unique_ids,
308313
/*---------------------------------------------------------------------------*/
309314
/*---------------------------------------------------------------------------*/
310315

311-
void GetVariablesValuesParallelOperation::
312-
_deleteMessages(Array<ISerializeMessage*>& messages)
313-
{
314-
for (ISerializeMessage* sm : messages)
315-
delete sm;
316-
messages.clear();
317-
}
318-
319-
/*---------------------------------------------------------------------------*/
320-
/*---------------------------------------------------------------------------*/
321-
322316
template <class Type> void GetVariablesValuesParallelOperation::
323317
_getVariableValues(ItemVariableScalarRefT<Type>& variable,
324318
Int64ConstArrayView unique_ids,
@@ -330,7 +324,7 @@ _getVariableValues(ItemVariableScalarRefT<Type>& variable,
330324
IItemFamily* item_family = group.itemFamily();
331325

332326
// Pour éviter un bug MPI sur certaines machines,
333-
// si la liste est vide, on créé une liste temporaire
327+
// si la liste est vide, on crée une liste temporaire
334328
UniqueArray<Int64> dummy_unique_ids;
335329
UniqueArray<Real> dummy_values;
336330
if (unique_ids.empty()) {

Diff for: arcane/src/arcane/impl/GetVariablesValuesParallelOperation.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,10 @@ class ARCANE_IMPL_EXPORT GetVariablesValuesParallelOperation
6262

6363
private:
6464

65-
IParallelMng* m_parallel_mng;
65+
IParallelMng* m_parallel_mng = nullptr;
6666

6767
private:
6868

69-
void _deleteMessages(Array<ISerializeMessage*>& messages);
70-
7169
template<class Type>
7270
void _getVariableValues(ItemVariableScalarRefT<Type>& variable,
7371
Int64ConstArrayView unique_ids,

0 commit comments

Comments
 (0)