Arcane  v3.16.8.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DynamicMachineMemoryWindow.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/* DynamicMachineMemoryWindow.h (C) 2000-2025 */
9/* */
10/* Classe permettant de créer des fenêtres mémoires pour un noeud de calcul. */
11/* Les segments de ces fenêtres ne sont pas contigües en mémoire et peuvent */
12/* être redimensionnées. */
13/*---------------------------------------------------------------------------*/
14
15#ifndef ARCANE_CORE_DYNAMICMACHINEMEMORYWINDOW_H
16#define ARCANE_CORE_DYNAMICMACHINEMEMORYWINDOW_H
17
18/*---------------------------------------------------------------------------*/
19/*---------------------------------------------------------------------------*/
20
21#include "arcane/core/DynamicMachineMemoryWindowBase.h"
23#include "arcane/utils/Ref.h"
24
25#include "arccore/base/Span.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
47template <class Type>
49{
50
51 public:
52
59 : m_impl(pm, nb_elem_segment, static_cast<Int32>(sizeof(Type)))
60 {}
61
67 : m_impl(pm, 0, static_cast<Int32>(sizeof(Type)))
68 {}
69
70 public:
71
81 {
82 return m_impl.machineRanks();
83 }
84
89 void barrier() const
90 {
91 m_impl.barrier();
92 }
93
101 {
102 return asSpan<Type>(m_impl.segmentView());
103 }
104
115 {
116 return asSpan<Type>(m_impl.segmentView(rank));
117 }
118
127 {
128 return asSpan<const Type>(m_impl.segmentConstView());
129 }
130
141 {
142 return asSpan<const Type>(m_impl.segmentConstView(rank));
143 }
144
160 {
161 const Span<const std::byte> span_bytes(reinterpret_cast<const std::byte*>(elem.data()), elem.sizeBytes());
162 m_impl.add(span_bytes);
163 }
164
175 void add()
176 {
177 m_impl.add();
178 }
179
200 {
201 const Span<const std::byte> span_bytes(reinterpret_cast<const std::byte*>(elem.data()), elem.sizeBytes());
202 m_impl.addToAnotherSegment(rank, span_bytes);
203 }
204
216 {
217 m_impl.addToAnotherSegment();
218 }
219
243 void reserve(Int64 new_capacity)
244 {
245 m_impl.reserve(new_capacity);
246 }
247
256 void reserve()
257 {
258 m_impl.reserve();
259 }
260
275 void resize(Int64 new_nb_elem)
276 {
277 m_impl.resize(new_nb_elem);
278 }
279
288 void resize()
289 {
290 m_impl.resize();
291 }
292
299 void shrink()
300 {
301 m_impl.shrink();
302 }
303
304 private:
305
307};
308
309/*---------------------------------------------------------------------------*/
310/*---------------------------------------------------------------------------*/
311
312} // End namespace Arcane
313
314/*---------------------------------------------------------------------------*/
315/*---------------------------------------------------------------------------*/
316
317#endif
Déclarations des types généraux de Arcane.
Vue constante d'un tableau de type T.
void barrier() const
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
void add(Span< const Type > elem)
Méthode permettant d'ajouter des élements dans notre segment.
Span< Type > segmentView()
Méthode permettant d'obtenir une vue sur notre segment.
void addToAnotherSegment()
Méthode à appeler par le ou les sous-domaines ne souhaitant pas ajouter d'éléments dans le segment d'...
void reserve()
Méthode à appeler par le ou les sous-domaines ne souhaitant pas réserver davantage de mémoire pour le...
ConstArrayView< Int32 > machineRanks() const
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
void add()
Méthode à appeler par le ou les sous-domaines ne souhaitant pas ajouter d'éléments dans son segment.
DynamicMachineMemoryWindow(IParallelMng *pm)
Constructeur.
DynamicMachineMemoryWindow(IParallelMng *pm, Int64 nb_elem_segment)
Constructeur.
void resize(Int64 new_nb_elem)
Méthode permettant de redimensionner notre segment.
void shrink()
Méthode permettant de réduire l'espace mémoire réservé pour les segments au minimum nécessaire.
Span< const Type > segmentConstView(Int32 rank) const
Méthode permettant d'obtenir une vue sur le segment d'un autre sous-domaine du noeud.
Span< Type > segmentView(Int32 rank)
Méthode permettant d'obtenir une vue sur le segment d'un autre sous-domaine du noeud.
void reserve(Int64 new_capacity)
Méthode permettant de réserver de l'espace mémoire dans notre segment.
void resize()
Méthode à appeler par le ou les sous-domaines ne souhaitant pas redimensionner leurs segments.
Span< const Type > segmentConstView() const
Méthode permettant d'obtenir une vue sur notre segment.
void addToAnotherSegment(Int32 rank, Span< const Type > elem)
Méthode permettant d'ajouter des éléments dans le segment d'un autre sous-domaine.
Interface du gestionnaire de parallélisme pour un sous-domaine.
constexpr __host__ __device__ SizeType sizeBytes() const noexcept
Retourne la taille du tableau en octets.
Definition Span.h:214
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:422
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.
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.
Type
Type of JSON value.
Definition rapidjson.h:730