Arcane  v4.1.7.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MpiMachineShMemWinBaseInternal.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/* MpiMachineShMemWinBaseInternal.h (C) 2000-2026 */
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 ARCCORE_MESSAGEPASSINGMPI_INTERNAL_MPIMACHINESHMEMWINBASEINTERNAL_H
16#define ARCCORE_MESSAGEPASSINGMPI_INTERNAL_MPIMACHINESHMEMWINBASEINTERNAL_H
17
18/*---------------------------------------------------------------------------*/
19/*---------------------------------------------------------------------------*/
20
21#include "arccore/collections/Array.h"
22#include "arccore/message_passing/internal/IMachineShMemWinBaseInternal.h"
23
24#include "arccore/message_passing_mpi/MessagePassingMpiGlobal.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane::MessagePassing::Mpi
30{
31
32class ARCCORE_MESSAGEPASSINGMPI_EXPORT MpiMachineShMemWinBaseInternal
34{
35 public:
36
37 explicit MpiMachineShMemWinBaseInternal(Int64 sizeof_segment, Int32 sizeof_type, const MPI_Comm& comm_machine, Int32 comm_machine_rank, Int32 comm_machine_size, ConstArrayView<Int32> machine_ranks);
38
39 ~MpiMachineShMemWinBaseInternal() override;
40
41 public:
42
43 Int32 sizeofOneElem() const override;
44 ConstArrayView<Int32> machineRanks() const override;
45 void barrier() const override;
46
48 Span<std::byte> segmentView(Int32 rank) override;
49
51 Span<const std::byte> segmentConstView(Int32 rank) const override;
52
53 void add(Span<const std::byte> elem) override;
54 void add() override;
55
56 void addToAnotherSegment(Int32 rank, Span<const std::byte> elem) override;
57 void addToAnotherSegment() override;
58
59 void reserve(Int64 new_capacity) override;
60 void reserve() override;
61
62 void resize(Int64 new_size) override;
63 void resize() override;
64
65 void shrink() override;
66
67 private:
68
69 void _reallocBarrier(Int64 new_sizeof);
70 void _reallocBarrier(Int32 machine_rank, Int64 new_sizeof);
71 void _reallocBarrier();
72 void _reallocCollective();
73
74 Int32 _worldToMachine(Int32 world) const;
75 Int32 _machineToWorld(Int32 machine) const;
76
77 private:
78
86
93
98
111
112 MPI_Comm m_comm_machine;
113 Int32 m_comm_machine_size = 0;
114 Int32 m_comm_machine_rank = 0;
115
116 Int32 m_sizeof_type = 0;
117
118 ConstArrayView<Int32> m_machine_ranks;
119};
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
123
124} // namespace Arcane::MessagePassing::Mpi
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128
129#endif
Vue constante d'un tableau de type T.
Classe permettant de créer des fenêtres mémoires pour un noeud de calcul.
void reserve(Int64 new_capacity) override
Méthode permettant de réserver de l'espace mémoire dans notre segment.
ConstArrayView< Int32 > machineRanks() const override
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
Span< Int64 > m_sizeof_used_part
Vue globale sur fenêtre contiguë avec taille des fenêtres principales.
Int32 sizeofOneElem() const override
Méthode permettant d'obtenir la taille d'un élement de la fenêtre.
MPI_Win m_win_actual_sizeof
Fenêtre contiguë avec taille des fenêtres principales.
void shrink() override
Méthode permettant de réduire l'espace mémoire réservé pour les segments au minimum nécessaire.
void addToAnotherSegment(Int32 rank, Span< const std::byte > elem) override
Méthode permettant d'ajouter des éléments dans le segment d'un autre sous-domaine.
void resize(Int64 new_size) override
Méthode permettant de redimensionner notre segment.
void barrier() const override
Méthode permettant d'attendre que tous les processus/threads du noeud appellent cette méthode pour co...
void add(Span< const std::byte > elem) override
Méthode permettant d'ajouter des élements dans notre segment.
Span< std::byte > segmentView() override
Méthode permettant d'obtenir une vue sur notre segment.
Span< const std::byte > segmentConstView() const override
Méthode permettant d'obtenir une vue sur notre segment.
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
Vecteur 1D de données avec sémantique par valeur (style STL).
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.