Arcane  v3.16.8.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.
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:513
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.