15#ifndef ARCCORE_MESSAGEPASSINGMPI_INTERNAL_MPIMULTIMACHINESHMEMWINBASEINTERNAL_H
16#define ARCCORE_MESSAGEPASSINGMPI_INTERNAL_MPIMULTIMACHINESHMEMWINBASEINTERNAL_H
21#include "arccore/collections/Array.h"
23#include "arccore/message_passing_mpi/MessagePassingMpiGlobal.h"
28namespace Arcane::MessagePassing::Mpi
302 void _executeRealloc();
355 MPI_Comm m_comm_machine;
356 Int32 m_comm_machine_size = 0;
357 Int32 m_comm_machine_rank = 0;
359 Int32 m_sizeof_type = 0;
360 Int32 m_nb_segments_per_proc = 0;
368 bool m_add_requested =
false;
374 bool m_resize_requested =
false;
Vue constante d'un tableau de type T.
void requestAdd(Int32 num_seg, Span< const std::byte > elem)
Méthode permettant de demander l'ajout d'éléments dans l'un de nos segments.
Span< const std::byte > segmentConstView(Int32 num_seg) const
Méthode permettant d'obtenir une vue sur l'un de nos segments.
void executeResize()
Méthode permettant d'exécuter les requêtes de redimensionnement.
void executeShrink()
Méthode permettant de réduire l'espace mémoire réservé pour les segments au minimum nécessaire.
void requestReserve(Int32 num_seg, Int64 new_capacity)
Méthode permettant de demander la réservation d'espace mémoire pour un de nos segments.
void requestAddToAnotherSegment(Int32 thread, Int32 rank, Int32 num_seg, Span< const std::byte > elem)
Méthode permettant de demander l'ajout d'éléments dans un des segments de la fenêtre.
void executeReserve()
Méthode permettant d'exécuter les requêtes de réservation.
void _requestRealloc(Int32 owner_pos_segment, Int64 new_capacity) const
Méthode permettant de demander une réallocation.
MpiMultiMachineShMemWinBaseInternal(SmallSpan< Int64 > sizeof_segments, Int32 nb_segments_per_proc, Int32 sizeof_type, const MPI_Comm &comm_machine, Int32 comm_machine_rank, Int32 comm_machine_size, ConstArrayView< Int32 > machine_ranks)
Le sizeof_segments ne doit pas être conservé !
void executeAdd()
Méthode permettant d'exécuter les requêtes d'ajout.
void requestResize(Int32 num_seg, Int64 new_size)
Méthode permettant de demander le redimensionnement d'un de nos segments.
Span< Int32 > m_target_segments
void barrier() const
Méthode permettant d'attendre que tous les processus du noeud appellent cette méthode pour continuer ...
void executeAddToAnotherSegment()
Méthode permettant d'exécuter les requêtes d'ajout dans les segments d'autres processus.
MPI_Win m_win_actual_sizeof
Fenêtre contiguë avec taille des fenêtres principales.
UniqueArray< MPI_Win > m_all_mpi_win
Span< Int64 > m_need_resize
UniqueArray< Span< std::byte > > m_reserved_part_span
UniqueArray< Span< const std::byte > > m_add_requests
Int32 sizeofOneElem() const
Méthode permettant d'obtenir la taille d'un élement de la fenêtre.
UniqueArray< Int64 > m_resize_requests
Span< Int64 > m_sizeof_used_part
MPI_Win m_win_need_resize
Span< std::byte > segmentView(Int32 num_seg)
Méthode permettant d'obtenir une vue sur l'un de nos segments.
MPI_Win m_win_target_segments
ConstArrayView< Int32 > machineRanks() const
Méthode permettant d'obtenir les rangs qui possèdent un segment dans la fenêtre.
Vue d'un tableau d'éléments de type T.
Vue d'un tableau d'éléments de type T.
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.