Arcane  v3.15.3.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_MPISERIALIZEDISPATCHER_H
13#define ARCCORE_MESSAGEPASSINGMPI_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{
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);
50 ~MpiSerializeDispatcher() override;
51
52 public:
53
54 Ref<ISerializeMessageList> createSerializeMessageListRef() override;
55 Request sendSerializer(const ISerializer* s,const PointToPointMessageInfo& message) override;
56 Request receiveSerializer(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 ITraceMng* m_trace = nullptr;
84 Int64 m_serialize_buffer_size;
85 Int64 m_max_serialize_buffer_size;
87 bool m_is_trace_serializer = false;
88 MPI_Datatype m_byte_serializer_datatype;
89
90 private:
91
92 BasicSerializer* _castSerializer(ISerializer* serializer);
93 const BasicSerializer* _castSerializer(const ISerializer* serializer);
94 void _checkBigMessage(Int64 message_size);
95 Request _sendSerializerWithTag(ISerializer* values,MessageRank rank,
97 Request _sendSerializerBytes(Span<const Byte> bytes,MessageRank rank,
98 MessageTag tag,bool is_blocking);
99 void _init();
100};
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105} // namespace Arccore::MessagePassing::Mpi
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
109
110#endif
Déclarations des types de la composante 'base' de Arccore.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Implémentation basique de 'ISerializer'.
Interface du gestionnaire de traces.
Interface des messages de sérialisation.
Informations pour envoyer/recevoir un message point à point.
Requête d'un message.
Definition Request.h:77