Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MpiSerializeDispatcher.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* MpiSerializeDispatcher.h (C) 2000-2025 */
9/* */
10/* Gestion des messages de sérialisation avec MPI. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_MESSAGEPASSINGMPI_INTERNAL_MPISERIALIZEDISPATCHER_H
13#define ARCCORE_MESSAGEPASSINGMPI_INTERNAL_MPISERIALIZEDISPATCHER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/message_passing_mpi/MessagePassingMpiGlobal.h"
18#include "arccore/message_passing/ISerializeDispatcher.h"
19#include "arccore/message_passing/Request.h"
20#include "arccore/collections/Array.h"
21#include "arccore/serialize/SerializeGlobal.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane::MessagePassing::Mpi
28{
29class ARCCORE_MESSAGEPASSINGMPI_EXPORT MpiSerializeDispatcher
31{
32 friend MpiSerializeMessageList;
35
36 public:
37
39 {
40 public:
41 static const int MAX_REQUEST_SIZE = 256;
42 public:
43 Byte m_bytes[MAX_REQUEST_SIZE];
44 Request m_request;
45 };
46
47 public:
48
49 explicit MpiSerializeDispatcher(MpiAdapter* adapter, IMessagePassingMng* message_passing_mng);
50 ~MpiSerializeDispatcher() override;
51
52 public:
53
55 Request sendSerializer(const ISerializer* s,const PointToPointMessageInfo& message) override;
57
58 public:
59
60 // Ces méthodes sont spécifiques à la version MPI.
62 Int64 serializeBufferSize() const { return m_serialize_buffer_size; }
63 Request legacySendSerializer(ISerializer* values,const PointToPointMessageInfo& message);
64 Request sendSerializer(const ISerializer* s,const PointToPointMessageInfo& message,bool force_one_message);
65 void legacyReceiveSerializer(ISerializer* values,MessageRank rank,MessageTag mpi_tag);
66 void checkFinishedSubRequests();
67 MpiAdapter* adapter() const { return m_adapter; }
68 static MessageTag nextSerializeTag(MessageTag tag);
70
71 void broadcastSerializer(ISerializer* values,MessageRank rank);
72 ITraceMng* traceMng() const { return m_trace; }
73
74 protected:
75
76 // Ceux deux méthodes sont utilisés aussi par 'MpiSerializeMessageList'
77 Request _recvSerializerBytes(Span<Byte> bytes,MessageRank rank,MessageTag tag,bool is_blocking);
78 Request _recvSerializerBytes(Span<Byte> bytes,MessageId message_id,bool is_blocking);
79
80 private:
81
82 MpiAdapter* m_adapter = nullptr;
83 IMessagePassingMng* m_message_passing_mng = nullptr;
84 ITraceMng* m_trace = nullptr;
85 Int64 m_serialize_buffer_size;
86 Int64 m_max_serialize_buffer_size;
88 bool m_is_trace_serializer = false;
89 MPI_Datatype m_byte_serializer_datatype;
90
91 private:
92
93 BasicSerializer* _castSerializer(ISerializer* serializer);
94 const BasicSerializer* _castSerializer(const ISerializer* serializer);
95 void _checkBigMessage(Int64 message_size);
96 Request _sendSerializerWithTag(ISerializer* values,MessageRank rank,
97 MessageTag mpi_tag,bool is_blocking);
98 Request _sendSerializerBytes(Span<const Byte> bytes,MessageRank rank,
99 MessageTag tag,bool is_blocking);
100 void _init();
101};
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
105
106} // namespace Arccore::MessagePassing::Mpi
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
110
111#endif
Déclarations des types de la composante 'base' de Arccore.
Implémentation basique de 'ISerializer'.
Interface du gestionnaire de traces.
Interface du gestionnaire des échanges de messages.
Interface des messages de sérialisation.
Request receiveSerializer(ISerializer *s, const PointToPointMessageInfo &message) override
Message de réception.
Ref< ISerializeMessageList > createSerializeMessageListRef() override
Créé une liste de messages de sérialisation.
Request sendSerializer(const ISerializer *s, const PointToPointMessageInfo &message) override
Message d'envoi.
Informations pour envoyer/recevoir un message point à point.
Requête d'un message.
Definition Request.h:77
Référence à une instance.
Vue d'un tableau d'éléments de type T.
Definition Span.h:513
Vecteur 1D de données avec sémantique par valeur (style STL).
std::int64_t Int64
Type entier signé sur 64 bits.
unsigned char Byte
Type d'un octet.
Definition BaseTypes.h:43