Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MessageTag.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* MessageTag.h (C) 2000-2020 */
9/* */
10/* Tag d'un message. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_MESSAGEPASSING_MESSAGETAG_H
13#define ARCCORE_MESSAGEPASSING_MESSAGETAG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include <iosfwd>
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
25{
26/*!
27 * \brief Tag d'un message.
28 *
29 * Le type exact du tag dépend de l'implémentation. Pour être le plus
30 * générique possible, on utilise le type 'Int32' qui est aussi le type
31 * utilisé couramment avec MPI.
32 *
33 * Avec l'implémentation MPI, ce type est utilisé pour le tag MPI et
34 * les valeurs maximales autorisées dépendent de l'implémentation. La norme
35 * MPI indique seulement qu'il faut au moins autoriser 2^30 (32767) valeurs.
36 *
37 * En mode échange de message hybride (MPI + mémoire partagée), la valeur
38 * maximale du tag peut être plus faible. Pour toutes ces raisons, il
39 * est conseillé de ne pas dépasser la valeur 4096.
40 */
41class ARCCORE_MESSAGEPASSING_EXPORT MessageTag
42{
43 public:
44 MessageTag() : m_tag(A_NULL_TAG_VALUE){}
45 explicit MessageTag(Int32 tag) : m_tag(tag){}
46 friend bool operator==(const MessageTag& a,const MessageTag& b)
47 {
48 return a.m_tag==b.m_tag;
49 }
50 friend bool operator!=(const MessageTag& a,const MessageTag& b)
51 {
52 return a.m_tag!=b.m_tag;
53 }
54 friend bool operator<(const MessageTag& a,const MessageTag& b)
55 {
56 return a.m_tag<b.m_tag;
57 }
58 Int32 value() const { return m_tag; }
59 bool isNull() const { return m_tag==A_NULL_TAG_VALUE; }
60 void print(std::ostream& o) const;
61 friend inline std::ostream&
62 operator<<(std::ostream& o,const MessageTag& tag)
63 {
64 tag.print(o);
65 return o;
66 }
67 public:
68 //! Valeur par défaut du tag.
69 static constexpr Int32 DEFAULT_TAG_VALUE = 100;
70 //! Tag par défaut pour les send/receive sans argument tag.
71 static MessageTag defaultTag() { return MessageTag(DEFAULT_TAG_VALUE); }
72 private:
73 Int32 m_tag;
74};
75
76/*---------------------------------------------------------------------------*/
77/*---------------------------------------------------------------------------*/
78
79} // End namespace Arccore::MessagePassing
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83
84#endif
85
Déclarations générales de la composante 'message_passing'.
static MessageTag defaultTag()
Tag par défaut pour les send/receive sans argument tag.
Definition MessageTag.h:71
Espace de nommage contenant les types et déclarations qui gèrent le mécanisme de parallélisme par éch...
std::int32_t Int32
Type entier signé sur 32 bits.