Arcane  v4.1.5.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ContigMachineShMemWin.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* ContigMachineShMemWin.h (C) 2000-2026 */
9/* */
10/* Classe permettant de créer une fenêtre mémoire partagée entre les */
11/* processus d'un même noeud. */
12/*---------------------------------------------------------------------------*/
13
14#ifndef ARCANE_CORE_CONTIGMACHINESHMEMWIN_H
15#define ARCANE_CORE_CONTIGMACHINESHMEMWIN_H
16
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
21#include "arcane/core/ContigMachineShMemWinBase.h"
22
23#include "arccore/base/Span.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34/*!
35 * \brief Classe permettant de créer une fenêtre mémoire partagée entre les
36 * sous-domaines d'un même noeud.
37 * Les segments de cette fenêtre seront contigüs en mémoire.
38 *
39 * \tparam Type Le type des éléments de la fenêtre.
40 */
41template <class Type>
43{
44 public:
45
46 /*!
47 * \brief Constructeur.
48 * \param pm Le ParallelMng contenant les processus du noeud.
49 * \param nb_elem_segment Le nombre d'éléments pour le segment de ce sous-domaine.
50 */
52 : m_impl(pm, nb_elem_segment, static_cast<Int32>(sizeof(Type)))
53 {}
54
55 public:
56
57 /*!
58 * \brief Méthode permettant d'obtenir une vue sur notre segment de fenêtre
59 * mémoire.
60 *
61 * \return Une vue.
62 */
64 {
65 return asSpan<Type>(m_impl.segmentView());
66 }
67
68 /*!
69 * \brief Méthode permettant d'obtenir une vue sur le segment de fenêtre
70 * mémoire d'un autre sous-domaine du noeud.
71 *
72 * \param rank Le rang du sous-domaine.
73 * \return Une vue.
74 */
76 {
77 return asSpan<Type>(m_impl.segmentView(rank));
78 }
79
80 /*!
81 * \brief Méthode permettant d'obtenir une vue sur toute la fenêtre mémoire.
82 *
83 * \return Une vue.
84 */
86 {
87 return asSpan<Type>(m_impl.windowView());
88 }
89
90 /*!
91 * \brief Méthode permettant d'obtenir une vue constante sur notre segment
92 * de fenêtre mémoire.
93 *
94 * \return Une vue constante.
95 */
97 {
98 return asSpan<const Type>(m_impl.segmentConstView());
99 }
100
101 /*!
102 * \brief Méthode permettant d'obtenir une vue constante sur le segment de
103 * fenêtre mémoire d'un autre sous-domaine du noeud.
104 *
105 * \param rank Le rang du sous-domaine.
106 * \return Une vue constante.
107 */
109 {
110 return asSpan<const Type>(m_impl.segmentConstView(rank));
111 }
112
113 /*!
114 * \brief Méthode permettant d'obtenir une vue constante sur toute la fenêtre
115 * mémoire.
116 *
117 * \return Une vue constante.
118 */
120 {
121 return asSpan<const Type>(m_impl.windowConstView());
122 }
123
124 /*!
125 * \brief Méthode permettant de redimensionner les segments de la fenêtre.
126 * Appel collectif.
127 *
128 * La taille totale de la fenêtre doit être inférieure ou égale à la taille
129 * d'origine.
130 *
131 * \param new_nb_elem La nouvelle taille de notre segment.
132 */
133 void resizeSegment(Integer new_nb_elem)
134 {
135 m_impl.resizeSegment(new_nb_elem);
136 }
137
138 /*!
139 * \brief Méthode permettant d'obtenir les rangs qui possèdent un segment
140 * dans la fenêtre.
141 *
142 * L'ordre des processus de la vue retournée correspond à l'ordre des
143 * segments dans la fenêtre.
144 *
145 * \return Une vue contenant les ids des rangs.
146 */
148 {
149 return m_impl.machineRanks();
150 }
151
152 /*!
153 * \brief Méthode permettant d'attendre que tous les processus/threads
154 * du noeud appellent cette méthode pour continuer l'exécution.
155 */
156 void barrier() const
157 {
158 m_impl.barrier();
159 }
160
161 private:
162
164};
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
168
169} // End namespace Arcane
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173
174#endif
Déclarations des types généraux de Arcane.
Types et fonctions associés aux classes SpanImpl, SmallSpan and Span.
Vue constante d'un tableau de type T.
Classe permettant de créer une fenêtre mémoire partagée entre les sous-domaines d'un même noeud....
Span< Type > segmentView(Int32 rank)
Méthode permettant d'obtenir une vue sur le segment de fenêtre mémoire d'un autre sous-domaine du noe...
ConstArrayView< Int32 > machineRanks() const
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
void barrier() const
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
Span< Type > windowView()
Méthode permettant d'obtenir une vue sur toute la fenêtre mémoire.
void resizeSegment(Integer new_nb_elem)
Méthode permettant de redimensionner les segments de la fenêtre. Appel collectif.
Span< const Type > segmentConstView() const
Méthode permettant d'obtenir une vue constante sur notre segment de fenêtre mémoire.
ContigMachineShMemWin(IParallelMng *pm, Int64 nb_elem_segment)
Constructeur.
Span< const Type > segmentConstView(Int32 rank) const
Méthode permettant d'obtenir une vue constante sur le segment de fenêtre mémoire d'un autre sous-doma...
Span< Type > segmentView()
Méthode permettant d'obtenir une vue sur notre segment de fenêtre mémoire.
Span< const Type > windowConstView() const
Méthode permettant d'obtenir une vue constante sur toute la fenêtre mémoire.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
Span< DataType > asSpan(Span< std::byte, Extent > bytes)
Converti un Span<std::byte> en un Span<DataType>.
Definition Span.h:1114
std::int32_t Int32
Type entier signé sur 32 bits.