15#include "arcane/parallel/thread/internal/SharedMemoryMachineMemoryWindowBaseInternalCreator.h"
17#include "arcane/parallel/thread/internal/SharedMemoryMachineMemoryWindowBaseInternal.h"
18#include "arcane/parallel/thread/internal/SharedMemoryDynamicMachineMemoryWindowBaseInternal.h"
19#include "arccore/concurrency/IThreadBarrier.h"
30SharedMemoryMachineMemoryWindowBaseInternalCreator::
31SharedMemoryMachineMemoryWindowBaseInternalCreator(
Int32 nb_rank, IThreadBarrier* barrier)
35 m_ranks.resize(m_nb_rank);
36 for (Int32 i = 0; i < m_nb_rank; ++i) {
44SharedMemoryMachineMemoryWindowBaseInternal* SharedMemoryMachineMemoryWindowBaseInternalCreator::
45createWindow(Int32 my_rank, Int64 sizeof_segment, Int32 sizeof_type)
48 m_sizeof_segments =
makeRef(
new UniqueArray<Int64>(m_nb_rank));
49 m_sum_sizeof_segments =
makeRef(
new UniqueArray<Int64>(m_nb_rank));
53 (*m_sizeof_segments.get())[my_rank] = sizeof_segment;
58 for (Int32 i = 0; i < m_nb_rank; ++i) {
59 (*m_sum_sizeof_segments.get())[i] = m_sizeof_window;
60 m_sizeof_window += (*m_sizeof_segments.get())[i];
62 m_window =
makeRef(
new UniqueArray<std::byte>(m_sizeof_window));
66 auto* window_obj =
new SharedMemoryMachineMemoryWindowBaseInternal(my_rank, m_nb_rank, m_ranks, sizeof_type, m_window, m_sizeof_segments, m_sum_sizeof_segments, m_sizeof_window, m_barrier);
71 m_sizeof_segments.reset();
72 m_sum_sizeof_segments.reset();
83SharedMemoryDynamicMachineMemoryWindowBaseInternal* SharedMemoryMachineMemoryWindowBaseInternalCreator::
84createDynamicWindow(Int32 my_rank, Int64 sizeof_segment, Int32 sizeof_type)
87 m_windows =
makeRef(
new UniqueArray<UniqueArray<std::byte>>(m_nb_rank));
88 m_target_segments =
makeRef(
new UniqueArray<Int32>(m_nb_rank));
92 (*m_windows.get())[my_rank].resize(sizeof_segment);
93 (*m_target_segments.get())[my_rank] = -1;
95 auto* window_obj =
new SharedMemoryDynamicMachineMemoryWindowBaseInternal(my_rank, m_ranks, sizeof_type, m_windows, m_target_segments, m_barrier);
101 m_target_segments.reset();
Déclarations des types et méthodes utilisés par les mécanismes d'échange de messages.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
std::int32_t Int32
Type entier signé sur 32 bits.