14#include "arccore/message_passing_mpi/internal/MpiMachineMemoryWindowBaseInternalCreator.h"
16#include "arccore/base/FatalErrorException.h"
17#include "arccore/message_passing_mpi/internal/MpiMachineMemoryWindowBaseInternal.h"
22namespace Arcane::MessagePassing::Mpi
28MpiMachineMemoryWindowBaseInternalCreator::
29MpiMachineMemoryWindowBaseInternalCreator(
const MPI_Comm& comm_machine,
Int32 comm_machine_rank,
Int32 comm_machine_size,
const MPI_Comm& comm_world,
Int32 comm_world_size)
30: m_comm_machine(comm_machine)
31, m_comm_machine_rank(comm_machine_rank)
32, m_comm_machine_size(comm_machine_size)
34 UniqueArray<Int32> global_ranks(comm_world_size);
35 UniqueArray<Int32> machine_ranks(comm_world_size);
37 for (Int32 i = 0; i < comm_world_size; ++i) {
40 MPI_Group comm_world_group;
41 MPI_Comm_group(comm_world, &comm_world_group);
43 MPI_Group machine_comm_group;
44 MPI_Comm_group(m_comm_machine, &machine_comm_group);
46 MPI_Group_translate_ranks(comm_world_group, comm_world_size, global_ranks.data(), machine_comm_group, machine_ranks.data());
48 m_machine_ranks.resize(m_comm_machine_size);
51 for (Int32 i = 0; i < comm_world_size; ++i) {
52 if (machine_ranks[i] != MPI_UNDEFINED) {
53 m_machine_ranks[iter++] = i;
56 if (iter != m_comm_machine_size) {
57 ARCCORE_FATAL(
"Error in machine_ranks creation");
64MpiMachineMemoryWindowBaseInternal* MpiMachineMemoryWindowBaseInternalCreator::
65createWindow(Int64 sizeof_segment, Int32 sizeof_type)
const
67 return new MpiMachineMemoryWindowBaseInternal(sizeof_segment, sizeof_type, m_comm_machine, m_comm_machine_rank, m_comm_machine_size, m_machine_ranks);
73ConstArrayView<Int32> MpiMachineMemoryWindowBaseInternalCreator::
76 return m_machine_ranks;
std::int32_t Int32
Type entier signé sur 32 bits.