Arcane  v3.16.8.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MachineMemoryWindow.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/* MachineMemoryWindow.h (C) 2000-2025 */
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_MACHINEMEMORYWINDOW_H
15#define ARCANE_CORE_MACHINEMEMORYWINDOW_H
16
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
21#include "arcane/core/MachineMemoryWindowBase.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.
Vue constante d'un tableau de type T.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Classe permettant de créer une fenêtre mémoire partagée entre les sous-domaines d'un même noeud....
void barrier() const
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
Span< const Type > windowConstView() const
Méthode permettant d'obtenir une vue constante 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.
MachineMemoryWindow(IParallelMng *pm, Int64 nb_elem_segment)
Constructeur.
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.
Span< Type > segmentView()
Méthode permettant d'obtenir une vue sur notre segment de fenêtre mémoire.
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< const Type > segmentConstView() const
Méthode permettant d'obtenir une vue constante sur notre segment de fenêtre mémoire.
Span< Type > windowView()
Méthode permettant d'obtenir une vue sur toute la fenêtre mémoire.
Vue d'un tableau d'éléments de type T.
Definition Span.h:513
-*- 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:976
std::int32_t Int32
Type entier signé sur 32 bits.