14#include "arccore/message_passing_mpi/internal/MpiMachineMemoryWindowBaseInternalCreator.h" 
   16#include "arccore/base/FatalErrorException.h" 
   17#include "arccore/message_passing_mpi/internal/MpiMachineMemoryWindowBaseInternal.h" 
   18#include "arccore/message_passing_mpi/internal/MpiDynamicMachineMemoryWindowBaseInternal.h" 
   19#include "arccore/message_passing_mpi/internal/MpiDynamicMultiMachineMemoryWindowBaseInternal.h" 
   24namespace Arcane::MessagePassing::Mpi
 
   30MpiMachineMemoryWindowBaseInternalCreator::
 
   31MpiMachineMemoryWindowBaseInternalCreator(
const MPI_Comm& comm_machine, 
Int32 comm_machine_rank, 
Int32 comm_machine_size, 
const MPI_Comm& comm_world, 
Int32 comm_world_size)
 
   32: m_comm_machine(comm_machine)
 
   33, m_comm_machine_rank(comm_machine_rank)
 
   34, m_comm_machine_size(comm_machine_size)
 
   36  UniqueArray<Int32> global_ranks(comm_world_size);
 
   37  UniqueArray<Int32> machine_ranks(comm_world_size);
 
   39  for (Int32 i = 0; i < comm_world_size; ++i) {
 
   42  MPI_Group comm_world_group;
 
   43  MPI_Comm_group(comm_world, &comm_world_group);
 
   45  MPI_Group machine_comm_group;
 
   46  MPI_Comm_group(m_comm_machine, &machine_comm_group);
 
   48  MPI_Group_translate_ranks(comm_world_group, comm_world_size, global_ranks.data(), machine_comm_group, machine_ranks.data());
 
   50  m_machine_ranks.resize(m_comm_machine_size);
 
   53  for (Int32 i = 0; i < comm_world_size; ++i) {
 
   54    if (machine_ranks[i] != MPI_UNDEFINED) {
 
   55      m_machine_ranks[iter++] = i;
 
   58  if (iter != m_comm_machine_size) {
 
   59    ARCCORE_FATAL(
"Error in machine_ranks creation");
 
   66MpiMachineMemoryWindowBaseInternal* MpiMachineMemoryWindowBaseInternalCreator::
 
   67createWindow(Int64 sizeof_segment, Int32 sizeof_type)
 const 
   69  return new MpiMachineMemoryWindowBaseInternal(sizeof_segment, sizeof_type, m_comm_machine, m_comm_machine_rank, m_comm_machine_size, m_machine_ranks);
 
   75MpiDynamicMachineMemoryWindowBaseInternal* MpiMachineMemoryWindowBaseInternalCreator::
 
   76createDynamicWindow(Int64 sizeof_segment, Int32 sizeof_type)
 const 
   78  return new MpiDynamicMachineMemoryWindowBaseInternal(sizeof_segment, sizeof_type, m_comm_machine, m_comm_machine_rank, m_comm_machine_size, m_machine_ranks);
 
   84MpiDynamicMultiMachineMemoryWindowBaseInternal* MpiMachineMemoryWindowBaseInternalCreator::
 
   85createDynamicMultiWindow(SmallSpan<Int64> sizeof_segments, Int32 nb_segments_per_proc, Int32 sizeof_type)
 const 
   87  return new MpiDynamicMultiMachineMemoryWindowBaseInternal(sizeof_segments, nb_segments_per_proc, sizeof_type, m_comm_machine, m_comm_machine_rank, m_comm_machine_size, m_machine_ranks);
 
   93ConstArrayView<Int32> MpiMachineMemoryWindowBaseInternalCreator::
 
   96  return m_machine_ranks;
 
std::int32_t Int32
Type entier signé sur 32 bits.