Arcane  v4.1.2.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MachineMemoryWindowBase.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/* MachineMemoryWindowBase.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_MACHINEMEMORYWINDOWBASE_H
15#define ARCANE_CORE_MACHINEMEMORYWINDOWBASE_H
16
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
21#include "arcane/utils/Ref.h"
22
23#include "arccore/base/Span.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34class IParallelMng;
35class IParallelMngInternal;
36namespace MessagePassing
37{
38 class IMachineMemoryWindowBaseInternal;
39}
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
43
44/*!
45 * \brief Classe permettant de créer une fenêtre mémoire partagée entre les
46 * sous-domaines d'un même noeud.
47 * Les segments de cette fenêtre seront contigüs en mémoire.
48 */
49class ARCANE_CORE_EXPORT MachineMemoryWindowBase
50{
51
52 public:
53
54 /*!
55 * \brief Constructeur.
56 * \param pm Le ParallelMng contenant les processus du noeud.
57 * \param sizeof_segment La taille du segment de ce sous-domaine (en octet).
58 * \param sizeof_elem La taille d'un élément (en octet).
59 */
60 MachineMemoryWindowBase(IParallelMng* pm, Int64 sizeof_segment, Int32 sizeof_elem);
61
62 public:
63
64 /*!
65 * \brief Méthode permettant d'obtenir une vue sur notre segment de fenêtre
66 * mémoire.
67 *
68 * \return Une vue.
69 */
71
72 /*!
73 * \brief Méthode permettant d'obtenir une vue sur le segment de fenêtre
74 * mémoire d'un autre sous-domaine du noeud.
75 *
76 * \param rank Le rang du sous-domaine.
77 * \return Une vue.
78 */
80
81 /*!
82 * \brief Méthode permettant d'obtenir une vue sur toute la fenêtre mémoire.
83 *
84 * \return Une vue.
85 */
87
88 /*!
89 * \brief Méthode permettant d'obtenir une vue constante sur notre segment
90 * de fenêtre mémoire.
91 *
92 * \return Une vue constante.
93 */
95
96 /*!
97 * \brief Méthode permettant d'obtenir une vue constante sur le segment de
98 * fenêtre mémoire d'un autre sous-domaine du noeud.
99 *
100 * \param rank Le rang du sous-domaine.
101 * \return Une vue constante.
102 */
104
105 /*!
106 * \brief Méthode permettant d'obtenir une vue constante sur toute la fenêtre
107 * mémoire.
108 *
109 * \return Une vue constante.
110 */
112
113 /*!
114 * \brief Méthode permettant de redimensionner les segments de la fenêtre.
115 * Appel collectif.
116 *
117 * La taille totale de la fenêtre doit être inférieure ou égale à la taille
118 * d'origine.
119 *
120 * \param new_size La nouvelle taille de notre segment (en octet).
121 */
122 void resizeSegment(Integer new_size);
123
124 /*!
125 * \brief Méthode permettant d'obtenir les rangs qui possèdent un segment
126 * dans la fenêtre.
127 *
128 * L'ordre des processus de la vue retournée correspond à l'ordre des
129 * segments dans la fenêtre.
130 *
131 * \return Une vue contenant les ids des rangs.
132 */
134
135 /*!
136 * \brief Méthode permettant d'attendre que tous les processus/threads
137 * du noeud appellent cette méthode pour continuer l'exécution.
138 */
139 void barrier() const;
140
141 private:
142
143 IParallelMngInternal* m_pm_internal;
145 Int32 m_sizeof_elem;
146};
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151} // End namespace Arcane
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156#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.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Span< const std::byte > windowConstView() const
Méthode permettant d'obtenir une vue constante sur toute la fenêtre mémoire.
MachineMemoryWindowBase(IParallelMng *pm, Int64 sizeof_segment, Int32 sizeof_elem)
Constructeur.
Span< std::byte > windowView()
Méthode permettant d'obtenir une vue sur toute la fenêtre mémoire.
void resizeSegment(Integer new_size)
Méthode permettant de redimensionner les segments de la fenêtre. Appel collectif.
void barrier() const
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
Span< std::byte > segmentView()
Méthode permettant d'obtenir une vue sur notre segment de fenêtre mémoire.
Span< const std::byte > segmentConstView() const
Méthode permettant d'obtenir une vue constante sur notre segment de fenêtre mémoire.
ConstArrayView< Int32 > machineRanks() const
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
Référence à une instance.
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
Déclarations des types et méthodes utilisés par les mécanismes d'échange de messages.
-*- 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.
std::int32_t Int32
Type entier signé sur 32 bits.