14#include "arccore/message_passing_mpi/internal/MpiAllInOneMachineMemoryWindowBase.h"
16#include "arccore/base/FatalErrorException.h"
21namespace Arcane::MessagePassing::Mpi
27MpiAllInOneMachineMemoryWindowBase::
28MpiAllInOneMachineMemoryWindowBase(
void* node_window, MPI_Aint offset,
const MPI_Comm& comm,
Int32 my_node_rank)
29: m_node_window(node_window)
33, m_my_rank(my_node_rank)
36 m_win =
reinterpret_cast<MPI_Win*
>(
static_cast<char*
>(m_node_window) - offset);
37 void* ptr_win =
nullptr;
38 int error = MPI_Win_shared_query(*m_win, m_my_rank, &m_nb_elem_local, &m_size_type, &ptr_win);
40 if (error != MPI_SUCCESS) {
41 ARCCORE_FATAL(
"Error with MPI_Win_allocate_shared() call");
48MpiAllInOneMachineMemoryWindowBase::
49~MpiAllInOneMachineMemoryWindowBase() =
default;
54Integer MpiAllInOneMachineMemoryWindowBase::
63Integer MpiAllInOneMachineMemoryWindowBase::
66 return static_cast<Integer>(m_nb_elem_local);
72Integer MpiAllInOneMachineMemoryWindowBase::
73sizeSegment(Int32 rank)
const
77 void* ptr_win =
nullptr;
79 int error = MPI_Win_shared_query(*m_win, rank, &size_win, &size_type, &ptr_win);
81 if (error != MPI_SUCCESS) {
82 ARCCORE_FATAL(
"Error with MPI_Win_allocate_shared() call");
85 return static_cast<Integer>((size_win - m_offset) / size_type);
91void* MpiAllInOneMachineMemoryWindowBase::
100void* MpiAllInOneMachineMemoryWindowBase::
101data(Int32 rank)
const
105 void* ptr_win =
nullptr;
107 int error = MPI_Win_shared_query(*m_win, rank, &size_win, &size_type, &ptr_win);
109 if (error != MPI_SUCCESS) {
110 ARCCORE_FATAL(
"Error with MPI_Win_allocate_shared() call");
113 return (
static_cast<char*
>(ptr_win) + m_offset);
119std::pair<Integer, void*> MpiAllInOneMachineMemoryWindowBase::
120sizeAndDataSegment()
const
122 return sizeAndDataSegment(m_my_rank);
128std::pair<Integer, void*> MpiAllInOneMachineMemoryWindowBase::
129sizeAndDataSegment(Int32 rank)
const
133 void* ptr_win =
nullptr;
135 int error = MPI_Win_shared_query(*m_win, rank, &size_win, &size_type, &ptr_win);
137 if (error != MPI_SUCCESS) {
138 ARCCORE_FATAL(
"Error with MPI_Win_allocate_shared() call");
141 return {
static_cast<Integer>((size_win - m_offset) / size_type), (
static_cast<char*
>(ptr_win) + m_offset) };
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.