12#ifndef ARCANE_PARALLEL_THREAD_HYBRIDPARALLELMNG_H
13#define ARCANE_PARALLEL_THREAD_HYBRIDPARALLELMNG_H
17#include "arcane/utils/NotImplementedException.h"
18#include "arcane/utils/Array.h"
19#include "arcane/utils/Ref.h"
21#include "arcane/ParallelMngDispatcher.h"
34class ISharedMemoryMessageQueue;
35class HybridMessageQueue;
36class HybridParallelMng;
37class MpiThreadAllDispatcher;
38class HybridSerializeMessageList;
48 Int32 local_rank = -1;
49 Int32 local_nb_rank = -1;
78 bool isParallel()
const override {
return m_is_parallel; }
98 void sendSerializer(
ISerializer* values,Int32 rank)
override;
102 void recvSerializer(
ISerializer* values,Int32 rank)
override;
107 void broadcastSerializer(
ISerializer* values,Int32 rank)
override;
119 void build()
override;
125 MpiParallelMng* mpiParallelMng() {
return m_mpi_parallel_mng; }
128 PointToPointMessageInfo
buildMessage(
const PointToPointMessageInfo& message);
146 bool _isAcceleratorAware()
const override;
152 return m_thread_barrier;
164 HybridMessageQueue* m_message_queue;
Tableau d'items de types quelconques.
Interface du gestionnaire des entrées sorties.
Interface d'une fabrique de conteneur de 'IParallelMng'.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface des opérations parallèles collectives non bloquantes.
Informations sur la réplication des sous-domaines en parallèle.
Interface d'un gestionnaire de thread.
Interface d'un gestionnaire de timer.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Implémentation de IRequestList pour HybridParallelMng.
Gestionnaire du parallélisme utilisant les threads.
bool isMasterIO() const override
true si l'instance est un gestionnaire maître des entrées/sorties.
IParallelMng * worldParallelMng() const override
Gestionnaire de parallélisme sur l'ensemble des ressources allouées.
bool isThreadImplementation() const override
Indique si l'implémentation utilise les threads.
Parallel::IStat * stat() override
Gestionnaire des statistiques.
void freeRequests(ArrayView< Request > requests) override
Libère les requêtes.
IParallelNonBlockingCollective * nonBlockingCollective() const override
Interface des opérations collectives non blocantes.
void printStats() override
Affiche des statistiques liées à ce gestionnaire du parallélisme.
IParallelExchanger * createExchanger() override
Retourne une interface pour transférer des messages entre processeurs.
void barrier() override
Effectue une barière.
MP::Communicator communicator() const override
Communicateur MPI associé à ce gestionnaire.
bool m_is_initialized
true si déjà initialisé
ISerializeMessage * createReceiveSerializer(Int32 rank) override
Créé un message non bloquant pour recevoir des données sérialisées du rang rank.
Ref< Parallel::IRequestList > createRequestListRef() override
Créé une liste de requêtes pour ce gestionnaire.
bool isParallel() const override
Retourne true si l'exécution est parallèle.
ITimerMng * timerMng() const override
Gestionnaire de timers.
void build() override
Construit l'instance.
void waitAllRequests(ArrayView< Request > requests) override
Bloque en attendant que les requêtes rvalues soient terminées.
void initialize() override
Initialise le gestionnaire du parallélisme.
IThreadMng * threadMng() const override
Gestionnaire de threads.
Int32 m_global_nb_rank
Nombre de rangs globaux.
MessageSourceInfo legacyProbe(const PointToPointMessageInfo &message) override
Sonde si des messages sont disponibles.
Int32 m_local_rank
Rang local du processeur actuel.
ITraceMng * traceMng() const override
Gestionnaire de traces.
IGetVariablesValuesParallelOperation * createGetVariablesValuesOperation() override
Retourne une opération pour récupérer les valeurs d'une variable sur les entités d'un autre sous-doma...
void * getMPICommunicator() override
Adresse du communicateur MPI associé à ce gestionnaire.
IParallelReplication * replication() const override
Informations sur la réplication.
Ref< IParallelMngUtilsFactory > _internalUtilsFactory() const override
Fabrique des fonctions utilitaires.
Int32 masterIORank() const override
Rang de l'instance gérant les entrées/sorties (pour laquelle isMasterIO() est vrai)
Ref< IParallelMng > createSubParallelMngRef(Int32ConstArrayView kept_ranks) override
Créé un nouveau gestionnaire de parallélisme pour un sous-ensemble des rangs.
IIOMng * ioMng() const override
Gestionnaire des entrées/sorties.
ITransferValuesParallelOperation * createTransferValuesOperation() override
Retourne une opération pour transférer des valeurs entre sous-domaine.
IParallelTopology * createTopology() override
Créé une instance contenant les infos sur la topologie des rangs de ce gestionnnaire.
void setReplication(IParallelReplication *v) override
Positionne les Informations sur la réplication.
IParallelMng * sequentialParallelMng() override
Retourne un gestionnaire de parallélisme séquentiel.
Int32 commSize() const override
Nombre d'instance dans le communicateur.
bool isHybridImplementation() const override
Indique si l'implémentation utilise le mode hybride.
IVariableSynchronizer * createSynchronizer(IItemFamily *family) override
Retourne une interface pour synchroniser des variables sur le groupe de la famille family.
Int32 m_local_nb_rank
Nombre de rang locaux.
MessageId probe(const PointToPointMessageInfo &message) override
Sonde si des messages sont disponibles.
ISerializeMessage * createSendSerializer(Int32 rank) override
Créé un message non bloquant pour envoyer des données sérialisées au rang rank.
Int32 commRank() const override
Rang de cette instance dans le communicateur.
Int32 m_global_rank
Numéro du processeur actuel.
PointToPointMessageInfo buildMessage(Int32 dest, MP::eBlockingType is_blocking)
Construit un message avec pour destinataire dest.
Interface d'une file de messages avec les threads.
Gestionnaire du parallélisme utilisant MPI.
Redirige la gestion des messages des sous-domaines suivant le type de l'argument.
Statistiques sur le parallélisme.
Implémentation d'un tampon pour la sérialisation.
Vue constante d'un tableau de type T.
Interface d'un sérialiseur.
Interface d'une barrière entre threads.
Interface du gestionnaire de traces.
Communicateur pour l'échange de message.
Interface d'une liste de messages de sérialisation.
Interface d'un message de sérialisation entre IMessagePassingMng.
Informations sur la source d'un message.
Informations pour envoyer/recevoir un message point à point.
Déclarations des types et méthodes utilisés par les mécanismes d'échange de messages.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eBlockingType
Type indiquant si un message est bloquant ou non.
Infos pour construire un HybridParallelMng.