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.