16#include "arccore/base/NotSupportedException.h"
17#include "arccore/base/FatalErrorException.h"
18#include "arccore/base/NotImplementedException.h"
20#include "arccore/serialize/BasicSerializer.h"
21#include "arccore/serialize/internal/BasicSerializerInternal.h"
23#include "arccore/message_passing/ISerializeDispatcher.h"
24#include "arccore/message_passing/IControlDispatcher.h"
25#include "arccore/message_passing/MessageId.h"
26#include "arccore/message_passing/PointToPointMessageInfo.h"
50 template <
typename DataType>
void
62void BasicSerializeGatherMessage::
155 auto d =
pm->dispatchers()->controlDispatcher();
156 return d->createRequestListRef();
164 auto d =
pm->dispatchers()->controlDispatcher();
165 d->waitAllRequests(requests);
181 auto d =
pm->dispatchers()->controlDispatcher();
182 d->waitSomeRequests(requests, indexes,
false);
190 auto d =
pm->dispatchers()->controlDispatcher();
191 d->waitSomeRequests(requests, indexes,
true);
220 auto d =
pm->dispatchers()->controlDispatcher();
221 return d->probe(message);
230 auto d =
pm->dispatchers()->controlDispatcher();
231 return d->legacyProbe(message);
240 auto d =
pm->dispatchers()->controlDispatcher();
241 return d->commSplit(
keep);
249 auto d =
pm->dispatchers()->controlDispatcher();
259 auto d =
pm->dispatchers()->controlDispatcher();
260 return d->nonBlockingBarrier();
269 auto d =
pm->dispatchers()->serializeDispatcher();
270 return d->createSerializeMessageListRef();
280 auto d =
pm->dispatchers()->serializeDispatcher();
281 return d->sendSerializer(values, message);
291 auto d =
pm->dispatchers()->serializeDispatcher();
292 return d->receiveSerializer(values, message);
298MessageSourceInfo IControlDispatcher::
299legacyProbe(
const PointToPointMessageInfo&)
311 ARCCORE_FATAL(
"send_serializer is not a BasicSerializer");
314 ARCCORE_FATAL(
"receive_serializer is not a BasicSerializer");
316 message.doAllGather(
pm, s,
r);
326 ARCCORE_CHECK_POINTER(
pm);
327 DataType* x =
nullptr;
328 auto* dispatcher =
pm->dispatchers()->dispatcher(x);
329 ARCCORE_CHECK_POINTER(dispatcher);
334#define ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(type) \
335 void mpAllGather(IMessagePassingMng* pm, Span<const type> send_buf, Span<type> recv_buf) \
337 _getDispatcher<type>(pm)->allGather(send_buf, recv_buf); \
339 void mpGather(IMessagePassingMng* pm, Span<const type> send_buf, Span<type> recv_buf, Int32 rank) \
341 _getDispatcher<type>(pm)->gather(send_buf, recv_buf, rank); \
343 Request mpNonBlockingAllGather(IMessagePassingMng* pm, Span<const type> send_buf, Span<type> recv_buf) \
345 return _getDispatcher<type>(pm)->nonBlockingAllGather(send_buf, recv_buf); \
347 Request mpNonBlockingGather(IMessagePassingMng* pm, Span<const type> send_buf, Span<type> recv_buf, Int32 rank) \
349 return _getDispatcher<type>(pm)->nonBlockingGather(send_buf, recv_buf, rank); \
351 void mpAllGatherVariable(IMessagePassingMng* pm, Span<const type> send_buf, Array<type>& recv_buf) \
353 _getDispatcher<type>(pm)->allGatherVariable(send_buf, recv_buf); \
355 void mpGatherVariable(IMessagePassingMng* pm, Span<const type> send_buf, Array<type>& recv_buf, Int32 rank) \
357 _getDispatcher<type>(pm)->gatherVariable(send_buf, recv_buf, rank); \
359 Request mpGather(IMessagePassingMng* pm, GatherMessageInfo<type>& gather_info) \
361 return _getDispatcher<type>(pm)->gather(gather_info); \
363 void mpScatterVariable(IMessagePassingMng* pm, Span<const type> send_buf, Span<type> recv_buf, Int32 root) \
365 return _getDispatcher<type>(pm)->scatterVariable(send_buf, recv_buf, root); \
367 type mpAllReduce(IMessagePassingMng* pm, eReduceType rt, type v) \
369 return _getDispatcher<type>(pm)->allReduce(rt, v); \
371 void mpAllReduce(IMessagePassingMng* pm, eReduceType rt, Span<type> buf) \
373 _getDispatcher<type>(pm)->allReduce(rt, buf); \
375 Request mpNonBlockingAllReduce(IMessagePassingMng* pm, eReduceType rt, Span<const type> send_buf, Span<type> recv_buf) \
377 return _getDispatcher<type>(pm)->nonBlockingAllReduce(rt, send_buf, recv_buf); \
379 void mpBroadcast(IMessagePassingMng* pm, Span<type> send_buf, Int32 rank) \
381 _getDispatcher<type>(pm)->broadcast(send_buf, rank); \
383 Request mpNonBlockingBroadcast(IMessagePassingMng* pm, Span<type> send_buf, Int32 rank) \
385 return _getDispatcher<type>(pm)->nonBlockingBroadcast(send_buf, rank); \
387 void mpSend(IMessagePassingMng* pm, Span<const type> values, Int32 rank) \
389 _getDispatcher<type>(pm)->send(values, rank, true); \
391 void mpReceive(IMessagePassingMng* pm, Span<type> values, Int32 rank) \
393 _getDispatcher<type>(pm)->receive(values, rank, true); \
395 Request mpSend(IMessagePassingMng* pm, Span<const type> values, Int32 rank, bool is_blocked) \
397 return _getDispatcher<type>(pm)->send(values, rank, is_blocked); \
399 Request mpSend(IMessagePassingMng* pm, Span<const type> values, const PointToPointMessageInfo& message) \
401 return _getDispatcher<type>(pm)->send(values, message); \
403 Request mpReceive(IMessagePassingMng* pm, Span<type> values, Int32 rank, bool is_blocked) \
405 return _getDispatcher<type>(pm)->receive(values, rank, is_blocked); \
407 Request mpReceive(IMessagePassingMng* pm, Span<type> values, const PointToPointMessageInfo& message) \
409 return _getDispatcher<type>(pm)->receive(values, message); \
411 void mpAllToAll(IMessagePassingMng* pm, Span<const type> send_buf, Span<type> recv_buf, Int32 count) \
413 return _getDispatcher<type>(pm)->allToAll(send_buf, recv_buf, count); \
415 Request mpNonBlockingAllToAll(IMessagePassingMng* pm, Span<const type> send_buf, Span<type> recv_buf, Int32 count) \
417 return _getDispatcher<type>(pm)->nonBlockingAllToAll(send_buf, recv_buf, count); \
419 void mpAllToAllVariable(IMessagePassingMng* pm, Span<const type> send_buf, ConstArrayView<Int32> send_count, \
420 ConstArrayView<Int32> send_index, Span<type> recv_buf, \
421 ConstArrayView<Int32> recv_count, ConstArrayView<Int32> recv_index) \
423 _getDispatcher<type>(pm)->allToAllVariable(send_buf, send_count, send_index, recv_buf, recv_count, recv_index); \
425 Request mpNonBlockingAllToAllVariable(IMessagePassingMng* pm, Span<const type> send_buf, ConstArrayView<Int32> send_count, \
426 ConstArrayView<Int32> send_index, Span<type> recv_buf, \
427 ConstArrayView<Int32> recv_count, ConstArrayView<Int32> recv_index) \
429 return _getDispatcher<type>(pm)->nonBlockingAllToAllVariable(send_buf, send_count, send_index, recv_buf, recv_count, recv_index); \
435ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
char)
436ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
signed char)
437ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
unsigned char)
439ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
short)
440ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
unsigned short)
441ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
int)
442ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
unsigned int)
443ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
long)
444ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
unsigned long)
445ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
long long)
446ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
unsigned long long)
448ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
float)
449ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
double)
450ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(
long double)
452ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(BFloat16)
453ARCCORE_GENERATE_MESSAGEPASSING_DEFINITION(Float16)
Liste des fonctions d'échange de message.
Interface d'un sérialiseur.
Interface du gestionnaire des échanges de messages.
Informations pour envoyer/recevoir un message point à point.
Référence à une instance.
Espace de nommage contenant les types et déclarations qui gèrent le mécanisme de parallélisme par éch...
void mpWaitSome(IMessagePassingMng *pm, ArrayView< Request > requests, ArrayView< bool > indexes)
Bloque jusqu'à ce qu'au moins une des requêtes de request soit terminée.
IMessagePassingMng * mpSplit(IMessagePassingMng *pm, bool keep)
Créé une nouvelle instance de IMessagePassingMng.
Request mpReceive(IMessagePassingMng *pm, ISerializer *values, const PointToPointMessageInfo &message)
Message de réception utilisant un ISerializer.
void mpBarrier(IMessagePassingMng *pm)
Effectue une barrière.
MessageId mpProbe(IMessagePassingMng *pm, const PointToPointMessageInfo &message)
Teste si un message est disponible.
Ref< IRequestList > mpCreateRequestListRef(IMessagePassingMng *pm)
Créé une liste de requêtes.
void mpAllGather(IMessagePassingMng *pm, const ISerializer *send_serializer, ISerializer *receive_serialize)
Message allGather() pour une sérialisation.
void mpWaitAll(IMessagePassingMng *pm, ArrayView< Request > requests)
Bloque tant que les requêtes de requests ne sont pas terminées.
Request mpNonBlockingBarrier(IMessagePassingMng *pm)
Effectue une barrière non bloquante.
void mpTestSome(IMessagePassingMng *pm, ArrayView< Request > requests, ArrayView< bool > indexes)
Teste si des requêtes de request sont terminées.
@ WaitSome
Attend que tous les messages de la liste soient traités.
Ref< ISerializeMessageList > mpCreateSerializeMessageListRef(IMessagePassingMng *pm)
Créé une liste de messages de sérialisation.
@ ReduceSum
Somme des valeurs.
Request mpSend(IMessagePassingMng *pm, const ISerializer *values, const PointToPointMessageInfo &message)
Message d'envoi utilisant un ISerializer.
void mpWait(IMessagePassingMng *pm, Request request)
Bloque jusqu'à ce que la requête request soit terminée.
MessageSourceInfo mpLegacyProbe(IMessagePassingMng *pm, const PointToPointMessageInfo &message)
Teste si un message est disponible.
Espace de nom de Arccore.
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
std::int64_t Int64
Type entier signé sur 64 bits.