14#include "arcane/parallel/thread/internal/SharedMemoryMachineMemoryWindowBaseInternal.h"
16#include "arcane/utils/FatalErrorException.h"
18#include "arccore/concurrency/IThreadBarrier.h"
29SharedMemoryMachineMemoryWindowBaseInternal::
30SharedMemoryMachineMemoryWindowBaseInternal(
Int32 my_rank,
Int32 nb_rank, ConstArrayView<Int32> ranks,
Int32 sizeof_type, std::byte* window,
Int64* sizeof_segments,
Int64* sum_sizeof_segments,
Int64 sizeof_window, IThreadBarrier* barrier)
34, m_sizeof_type(sizeof_type)
35, m_actual_sizeof_win(sizeof_window)
36, m_max_sizeof_win(sizeof_window)
37, m_window_span(window, sizeof_window)
38, m_sizeof_segments_span(sizeof_segments, nb_rank)
39, m_sum_sizeof_segments_span(sum_sizeof_segments, nb_rank)
41, m_sizeof_segments(sizeof_segments)
42, m_sum_sizeof_segments(sum_sizeof_segments)
49SharedMemoryMachineMemoryWindowBaseInternal::
50~SharedMemoryMachineMemoryWindowBaseInternal()
54 delete[] m_sizeof_segments;
55 delete[] m_sum_sizeof_segments;
62Int32 SharedMemoryMachineMemoryWindowBaseInternal::
74 const Int64 begin_segment = m_sum_sizeof_segments_span[m_my_rank];
75 const Int64 size_segment = m_sizeof_segments_span[m_my_rank];
77 return m_window_span.subSpan(begin_segment, size_segment);
84segment(
Int32 rank)
const
86 const Int64 begin_segment = m_sum_sizeof_segments_span[rank];
87 const Int64 size_segment = m_sizeof_segments_span[rank];
89 return m_window_span.subSpan(begin_segment, size_segment);
104void SharedMemoryMachineMemoryWindowBaseInternal::
105resizeSegment(
Int64 new_sizeof_segment)
107 m_sizeof_segments_span[m_my_rank] = new_sizeof_segment;
111 if (m_my_rank == 0) {
113 for (
Int32 i = 0; i < m_nb_rank; ++i) {
114 m_sum_sizeof_segments_span[i] = sum;
115 sum += m_sizeof_segments_span[i];
117 if (sum > m_max_sizeof_win) {
118 ARCANE_FATAL(
"New size of window (sum of size of all segments) is superior than the old size");
120 m_actual_sizeof_win = sum;
124 for (
Int32 i = 0; i < m_nb_rank; ++i) {
125 sum += m_sizeof_segments_span[i];
127 if (sum > m_max_sizeof_win) {
128 ARCANE_FATAL(
"New size of window (sum of size of all segments) is superior than the old size");
130 m_actual_sizeof_win = sum;
133 m_window_span =
Span<std::byte>{ m_window_span.data(), m_actual_sizeof_win };
150void SharedMemoryMachineMemoryWindowBaseInternal::
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Vue constante d'un tableau de type T.
Vue d'un tableau d'éléments de type T.
Déclarations des types et méthodes utilisés par les mécanismes d'échange de messages.
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.