Skip to content

Add methods in ParallelMngUtils to create Ref<ISerializeMessage> #1999

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions arcane/src/arcane/core/Parallel.cc
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
//-----------------------------------------------------------------------------
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// See the top-level COPYRIGHT file for details.
// SPDX-License-Identifier: Apache-2.0
//-----------------------------------------------------------------------------
/*---------------------------------------------------------------------------*/
/* Parallel.cc (C) 2000-2024 */
/* Parallel.cc (C) 2000-2025 */
/* */
/* Espace de nom des types gérant le parallélisme. */
/*---------------------------------------------------------------------------*/
Expand All @@ -18,6 +18,7 @@
#include "arcane/utils/FatalErrorException.h"
#include "arcane/utils/PlatformUtils.h"
#include "arcane/utils/ITraceMng.h"
#include "arcane/utils/Math.h"

#include "arcane/core/IParallelMng.h"
#include "arcane/core/IParallelMng.h"
Expand Down
23 changes: 20 additions & 3 deletions arcane/src/arcane/core/ParallelMngUtils.cc
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
//-----------------------------------------------------------------------------
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// See the top-level COPYRIGHT file for details.
// SPDX-License-Identifier: Apache-2.0
//-----------------------------------------------------------------------------
/*---------------------------------------------------------------------------*/
/* ParallelMngUtils.cc (C) 2000-2024 */
/* ParallelMngUtils.cc (C) 2000-2025 */
/* */
/* Fonctions utilitaires associées aux 'IParallelMng'. */
/*---------------------------------------------------------------------------*/
Expand All @@ -14,7 +14,7 @@
#include "arcane/core/ParallelMngUtils.h"

#include "arcane/core/IParallelMng.h"
#include "arcane/core/IParallelMngUtilsFactory.h"
#include "arcane/core/internal/IParallelMngUtilsFactory.h"
#include "arcane/core/internal/IParallelMngInternal.h"

/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -81,12 +81,29 @@ class ParallelMngUtilsAccessor
auto f = pm->_internalUtilsFactory();
return f->createTopology(pm);
}

static Ref<IParallelMng>
createSubParallelMngRef(IParallelMng* pm, Int32 color, Int32 key)
{
ARCANE_CHECK_POINTER(pm);
return pm->_internalApi()->createSubParallelMngRef(color, key);
}

static Ref<ISerializeMessage>
createSendSerializeMessageRef(IParallelMng* pm, Int32 rank)
{
ARCANE_CHECK_POINTER(pm);
auto f = pm->_internalUtilsFactory();
return f->createSendSerializeMessage(pm, rank);
}

static Ref<ISerializeMessage>
createReceiveSerializeMessageRef(IParallelMng* pm, Int32 rank)
{
ARCANE_CHECK_POINTER(pm);
auto f = pm->_internalUtilsFactory();
return f->createReceiveSerializeMessage(pm, rank);
}
};

/*---------------------------------------------------------------------------*/
Expand Down
20 changes: 18 additions & 2 deletions arcane/src/arcane/core/ParallelMngUtils.h
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
//-----------------------------------------------------------------------------
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// See the top-level COPYRIGHT file for details.
// SPDX-License-Identifier: Apache-2.0
//-----------------------------------------------------------------------------
/*---------------------------------------------------------------------------*/
/* ParallelMngUtils.h (C) 2000-2024 */
/* ParallelMngUtils.h (C) 2000-2025 */
/* */
/* Fonctions utilitaires associées aux 'IParallelMng'. */
/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -80,6 +80,22 @@ createTopologyRef(IParallelMng* pm);
extern "C++" ARCANE_CORE_EXPORT Ref<IParallelMng>
createSubParallelMngRef(IParallelMng* pm, Int32 color, Int32 key);

/*!
* \brief Créé un message de sérialisation non bloquant en envoi au rang \a rank.
*
* Le message est traité uniquement lors de l'appel à IParallelMng::processMessages().
*/
extern "C++" ARCANE_CORE_EXPORT Ref<ISerializeMessage>
createSendSerializeMessageRef(IParallelMng* pm, Int32 rank);

/*!
* \brief Créé un message de sérialisation non bloquant en réception du rang \a rank.
*
* Le message est traité uniquement lors de l'appel à IParallelMng::processMessages().
*/
extern "C++" ARCANE_CORE_EXPORT Ref<ISerializeMessage>
createReceiveSerializeMessageRef(IParallelMng* pm, Int32 rank);

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,26 @@
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
//-----------------------------------------------------------------------------
// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// See the top-level COPYRIGHT file for details.
// SPDX-License-Identifier: Apache-2.0
//-----------------------------------------------------------------------------
/*---------------------------------------------------------------------------*/
/* IParallelMngUtilsFactory.h (C) 2000-2021 */
/* IParallelMngUtilsFactory.h (C) 2000-2025 */
/* */
/* Interface d'une fabrique pour les fonctions utilitaires de IParallelMng. */
/*---------------------------------------------------------------------------*/
#ifndef ARCANE_IPARALLELMNGUTILSFACTORY_H
#define ARCANE_IPARALLELMNGUTILSFACTORY_H
#ifndef ARCANE_CORE_INTERNAL_IPARALLELMNGUTILSFACTORY_H
#define ARCANE_CORE_INTERNAL_IPARALLELMNGUTILSFACTORY_H
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

#include "arcane/utils/Ref.h"

#include "arcane/Parallel.h"
#include "arcane/core/Parallel.h"

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

namespace Arcane
{
class IItemFamily;
class ItemGroup;
}

namespace Arcane
{
/*---------------------------------------------------------------------------*/
Expand All @@ -38,51 +32,69 @@ namespace Arcane
class ARCANE_CORE_EXPORT IParallelMngUtilsFactory
{
public:

virtual ~IParallelMngUtilsFactory() = default;

public:

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

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

//! Retourne une interface pour transférer des messages entre rangs
virtual Ref<IParallelExchanger>
createExchanger(IParallelMng* pm) =0;
createExchanger(IParallelMng* pm) = 0;

/*!
* \brief Retourne une interface pour synchroniser des
* variables sur le groupe de la famille \a family
*/
virtual Ref<IVariableSynchronizer>
createSynchronizer(IParallelMng* pm,IItemFamily* family) =0;
createSynchronizer(IParallelMng* pm, IItemFamily* family) = 0;

/*!
* \brief Retourne une interface pour synchroniser des
* variables sur le groupe \a group.
*/
virtual Ref<IVariableSynchronizer>
createSynchronizer(IParallelMng* pm,const ItemGroup& group) =0;
createSynchronizer(IParallelMng* pm, const ItemGroup& group) = 0;

/*!
* \brief Créé une instance contenant les infos sur la topologie des rangs de ce gestionnnaire.
*
* Cette opération est collective.
*/
virtual Ref<IParallelTopology>
createTopology(IParallelMng* pm) =0;
createTopology(IParallelMng* pm) = 0;

/*!
* \brief Créé un message de sérialisation non bloquant en envoi au rang \a rank.
*
* Le message est traité uniquement lors de l'appel à IParallelMng::processMessages().
*/
virtual Ref<ISerializeMessage>
createSendSerializeMessage(IParallelMng* pm, Int32 rank) = 0;

/*!
* \brief Créé un message de sérialisation non bloquant en réception du rang \a rank.
*
* Le message est traité uniquement lors de l'appel à IParallelMng::processMessages().
*/
virtual Ref<ISerializeMessage>
createReceiveSerializeMessage(IParallelMng* pm, Int32 rank) = 0;
};

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

} // End namespace Arcane::impl
} // namespace Arcane

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
Expand Down
2 changes: 1 addition & 1 deletion arcane/src/arcane/core/srcs.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ set(ARCANE_INTERNAL_SOURCES
internal/IParallelMngInternal.h
internal/IItemFamilyInternal.h
internal/IMeshInternal.h
internal/IParallelMngUtilsFactory.h
internal/IVariableInternal.h
internal/IMeshModifierInternal.h
internal/ItemGroupImplInternal.h
Expand Down Expand Up @@ -243,7 +244,6 @@ set(ARCANE_ORIGINAL_SOURCES
IParallelDispatch.h
IParallelExchanger.h
IParallelMng.h
IParallelMngUtilsFactory.h
IParallelNonBlockingCollective.h
IParallelNonBlockingCollectiveDispatch.h
IParallelReplication.h
Expand Down
34 changes: 28 additions & 6 deletions arcane/src/arcane/impl/ParallelMngUtilsFactoryBase.cc
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
//-----------------------------------------------------------------------------
// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// See the top-level COPYRIGHT file for details.
// SPDX-License-Identifier: Apache-2.0
//-----------------------------------------------------------------------------
/*---------------------------------------------------------------------------*/
/* ParallelMngUtilsFactoryBase.cc (C) 2000-2023 */
/* ParallelMngUtilsFactoryBase.cc (C) 2000-2025 */
/* */
/* Classe de base d'une fabrique pour les fonctions utilitaires de */
/* IParallelMng. */
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

#include "arcane/impl/ParallelMngUtilsFactoryBase.h"
#include "arcane/impl/internal/ParallelMngUtilsFactoryBase.h"

#include "arcane/utils/Real2.h"
#include "arcane/utils/Real3.h"
Expand All @@ -25,9 +25,9 @@
#include "arcane/impl/ParallelTopology.h"
#include "arcane/impl/internal/VariableSynchronizer.h"

#include "arcane/DataTypeDispatchingDataVisitor.h"

#include "arcane/IItemFamily.h"
#include "arcane/core/DataTypeDispatchingDataVisitor.h"
#include "arcane/core/IItemFamily.h"
#include "arcane/core/internal/SerializeMessage.h"

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -96,6 +96,28 @@ createSynchronizer(IParallelMng* pm,const ItemGroup& group)
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

Ref<ISerializeMessage> ParallelMngUtilsFactoryBase::
createSendSerializeMessage(IParallelMng* pm, Int32 rank)
{
Int32 my_rank = pm->commRank();
auto x = new SerializeMessage(my_rank, rank, ISerializeMessage::MT_Send);
return makeRef<ISerializeMessage>(x);
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

Ref<ISerializeMessage> ParallelMngUtilsFactoryBase::
createReceiveSerializeMessage(IParallelMng* pm, Int32 rank)
{
Int32 my_rank = pm->commRank();
auto x = new SerializeMessage(my_rank, rank, ISerializeMessage::MT_Recv);
return makeRef<ISerializeMessage>(x);
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

} // End namespace Arcane

/*---------------------------------------------------------------------------*/
Expand Down
2 changes: 1 addition & 1 deletion arcane/src/arcane/impl/SequentialParallelMng.cc
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
#include "arcane/impl/ParallelReplication.h"
#include "arcane/impl/SequentialParallelSuperMng.h"
#include "arcane/impl/SequentialParallelMng.h"
#include "arcane/impl/ParallelMngUtilsFactoryBase.h"
#include "arcane/impl/internal/ParallelMngUtilsFactoryBase.h"
#include "arcane/impl/internal/VariableSynchronizer.h"

#include "arccore/message_passing/RequestListBase.h"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
//-----------------------------------------------------------------------------
// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
// See the top-level COPYRIGHT file for details.
// SPDX-License-Identifier: Apache-2.0
//-----------------------------------------------------------------------------
/*---------------------------------------------------------------------------*/
/* ParallelMngUtilsFactoryBase.h (C) 2000-2021 */
/* ParallelMngUtilsFactoryBase.h (C) 2000-2025 */
/* */
/* Classe de base d'une fabrique pour les fonctions utilitaires de */
/* IParallelMng. */
/*---------------------------------------------------------------------------*/
#ifndef ARCANE_IMPL_PARALLELMNGUTILSFACTORY_H
#define ARCANE_IMPL_PARALLELMNGUTILSFACTORY_H
#ifndef ARCANE_IMPL_INTERNAL_PARALLELMNGUTILSFACTORY_H
#define ARCANE_IMPL_INTERNAL_PARALLELMNGUTILSFACTORY_H
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

#include "arcane/IParallelMngUtilsFactory.h"
#include "arcane/core/internal/IParallelMngUtilsFactory.h"

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
Expand All @@ -39,6 +39,8 @@ class ARCANE_IMPL_EXPORT ParallelMngUtilsFactoryBase
Ref<IVariableSynchronizer> createSynchronizer(IParallelMng* pm,IItemFamily* family) override;
Ref<IVariableSynchronizer> createSynchronizer(IParallelMng* pm,const ItemGroup& group) override;
Ref<IParallelTopology> createTopology(IParallelMng* pm) override;
Ref<ISerializeMessage> createSendSerializeMessage(IParallelMng* pm, Int32 rank) override;
Ref<ISerializeMessage> createReceiveSerializeMessage(IParallelMng* pm, Int32 rank) override;
};

/*---------------------------------------------------------------------------*/
Expand Down
2 changes: 1 addition & 1 deletion arcane/src/arcane/impl/srcs.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ set( ARCANE_SOURCES
ParallelExchanger.cc
ParallelExchanger.h
ParallelMngUtilsFactoryBase.cc
ParallelMngUtilsFactoryBase.h
ParallelReplication.cc
ParallelReplication.h
ParallelTopology.cc
Expand Down Expand Up @@ -152,6 +151,7 @@ set( ARCANE_SOURCES
internal/MeshFactoryMng.cc
internal/MeshMng.h
internal/MeshMng.cc
internal/ParallelMngUtilsFactoryBase.h
internal/ThreadBindingMng.h
internal/ThreadBindingMng.cc
internal/VariableMng.h
Expand Down
8 changes: 3 additions & 5 deletions arcane/src/arcane/parallel/mpi/MpiParallelMng.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@

#include "arcane/impl/ParallelReplication.h"
#include "arcane/impl/SequentialParallelMng.h"
#include "arcane/impl/ParallelMngUtilsFactoryBase.h"
#include "arcane/impl/internal/ParallelMngUtilsFactoryBase.h"
#include "arcane/impl/internal/VariableSynchronizer.h"

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

/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -581,8 +580,7 @@ recvSerializer(ISerializer* values,Int32 rank)
ISerializeMessage* MpiParallelMng::
createReceiveSerializer(Int32 rank)
{
auto x = new SerializeMessage(m_comm_rank,rank,ISerializeMessage::MT_Recv);
return x;
return m_utils_factory->createReceiveSerializeMessage(this, rank)._release();
}

/*---------------------------------------------------------------------------*/
Expand Down
Loading
Loading