14#include "arcane/utils/ApplicationInfo.h"
15#include "arcane/utils/NullThreadMng.h"
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/PlatformUtils.h"
18#include "arcane/utils/ValueConvert.h"
19#include "arcane/utils/NotImplementedException.h"
20#include "arcane/utils/ArgumentException.h"
21#include "arcane/utils/FatalErrorException.h"
22#include "arcane/utils/CommandLineArguments.h"
24#include "arcane/parallel/IStat.h"
26#include "arcane/parallel/mpi/MpiAdapter.h"
27#include "arcane/parallel/mpi/MpiParallelMng.h"
28#include "arcane/parallel/mpi/MpiParallelDispatch.h"
29#include "arcane/parallel/mpi/MpiErrorHandler.h"
31#include "arcane/FactoryService.h"
32#include "arcane/IApplication.h"
33#include "arcane/ParallelSuperMngDispatcher.h"
35#include "arcane/impl/SequentialParallelSuperMng.h"
57 void build()
override;
96 static void _ErrorHandler(
MPI_Comm *,
int *, ...);
104: m_application(
sbi.application())
107, m_is_parallel(
false)
110, m_nb_local_sub_domain(1)
124~MpiParallelSuperMng()
129 delete m_datatype_list;
135 catch(
const Exception& ex){
140 m_error_handler.removeHandler();
159void MpiParallelSuperMng::
163 char*** argv =
nullptr;
178#ifndef ARCANE_USE_MPC
190 app->
traceMng()->
info() <<
"WARNING: MPI thread level provided!=wanted ("
198void MpiParallelSuperMng::
199_ErrorHandler(MPI_Comm* comm,
int* error_code, ...)
203 char error_buf[MPI_MAX_ERROR_STRING+1];
207 MPI_Error_string(e,error_buf,&error_len);
208 error_buf[error_len] =
'\0';
209 error_buf[MPI_MAX_ERROR_STRING] =
'\0';
213 ARCANE_FATAL(
"Error in MPI call code={0} msg={1}",*error_code,error_buf);
227 Real
end_time = platform::getRealTime();
235#ifndef ARCANE_USE_MPC
240 tm->
info() <<
"MPI has non blocking collective";
249 auto astat = m_stat->toArccoreStat();
256 _setDispatchers(
c,
i32,i64,
r);
266 tm->
debug()<<
"[MpiParallelSuperMng::internalCreateWorldParallelMng]";
278 bool is_parallel = nb_rank > 1;
281 bi.is_parallel = is_parallel;
284 bi.timer_mng =
nullptr;
285 bi.thread_mng = m_thread_mng;
286 bi.mpi_lock =
nullptr;
288 tm->
debug()<<
"[MpiParallelSuperMng::internalCreateWorldParallelMng] pm->build()";
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
#define ARCANE_SERVICE_INTERFACE(ainterface)
Macro pour déclarer une interface lors de l'enregistrement d'un service.
Arguments de la ligne de commande.
Interface de l'application.
virtual ITraceMng * traceMng() const =0
Gestionnaire de traces.
virtual void build()=0
Construit l'instance.
Interface d'un gestionnaire de thread.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Gère les MPI_Datatype associées aux types Arcane.
Interface des messages pour le type Type.
Superviseur du parallélisme utilisant MPI.
bool isParallel() const override
Retourne true si l'exécution est parallèle.
void initialize() override
Initialise l'instance.
Int32 m_rank
Rang MPI dans le communicateur global de ce processus.
Int32 m_nb_local_sub_domain
Nombre de sous-domaines locaux.
Int32 commSize() const override
Retourne le nombre total de process utilisés.
Integer nbLocalSubDomain() override
Nombre de sous-domaines à créér localement.
IThreadMng * threadMng() const override
Gestionnaire de thread.
Int32 commRank() const override
Retourne le numéro du process (compris entre 0 et nbProcess()-1)
Integer masterIORank() const override
Rang de l'instance gérant les entrées/sorties (pour laquelle isMasterIO() est vrai)
void barrier() override
Gestionnaire de parallèlisme pour l'ensemble des ressources allouées.
MP::Communicator m_main_communicator
Communicateur MPI.
MPI_Comm m_mpi_main_communicator
Communicateur MPI.
Ref< IParallelMng > internalCreateWorldParallelMng(Int32 local_rank) override
Créé un gestionnaire de parallélisme pour l'ensemble des coeurs alloués.
Int32 traceRank() const override
Rang de cette instance pour les traces.
bool isMasterIO() const override
true si l'instance est un gestionnaire maître des entrées/sorties.
IApplication * application() const override
Retourne le gestionnaire principal.
Int32 m_nb_rank
Nombre de processus MPI dans le communicateur global.
void tryAbort() override
Tente de faire un abort.
bool m_is_parallel
Statistiques.
void build() override
Construit les membres l'instance.
void * getMPICommunicator() override
Adresse du communicateur MPI associé à ce gestionnaire.
Parallel::Communicator communicator() const override
Communicateur MPI associé à ce gestionnaire.
IApplication * m_application
Gestionnaire principal.
Superviseur en mode MPI avec un seul process alloué pour se comporter comme en séqentiel mais avec un...
void build() override
Construction de niveau build du service.
Gestionnaire de thread en mode mono-thread.
Redirige la gestion des messages des sous-domaines suivant le type de l'argument.
Statistiques sur le parallélisme.
Superviseur du parallélisme en mode séquentiel.
void build() override
Construction de niveau build du service.
IApplication * application() const override
Retourne le gestionnaire principal.
Structure contenant les informations pour créer un service.
Exception lorsqu'un argument est invalide.
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Communicateur pour l'échange de message.
void destroy()
Détruit l'instance. Elle ne doit plus être utilisée par la suite.
ITraceMng * traceMng() const
Gestionnaire de trace.
TraceMessage error() const
Flot pour un message d'erreur.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
TraceMessage info() const
Flot pour un message d'information.
#define ARCANE_REGISTER_SERVICE(aclass, a_service_property,...)
Macro pour enregistrer un service.
IStat * createDefaultStat()
Créé une instance par défaut.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ARCANE_MPI_EXPORT void arcaneInitializeMPI(int *argc, char ***argv, int wanted_thread_level)
ARCANE_MPI_EXPORT bool arcaneIsAcceleratorAwareMPI()
Indique si le runtime actuel de MPI a le support des accélérateurs.
@ ST_Application
Le service s'utilise au niveau de l'application.
ARCANE_MPI_EXPORT void arcaneFinalizeMPI()
Infos pour construire un MpiParallelMng.