Arcane  v3.16.7.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
SharedMemoryMachineMemoryWindowBaseInternalCreator.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* SharedMemoryMachineMemoryWindowBaseInternalCreator.cc (C) 2000-2025 */
9/* */
10/* Classe permettant de créer des objets de type */
11/* SharedMemoryMachineMemoryWindowBaseInternal. Une instance de cet objet */
12/* doit être partagée par tous les threads. */
13/*---------------------------------------------------------------------------*/
14
15#include "arcane/parallel/thread/internal/SharedMemoryMachineMemoryWindowBaseInternalCreator.h"
16
17#include "arcane/parallel/thread/internal/SharedMemoryMachineMemoryWindowBaseInternal.h"
18#include "arccore/concurrency/IThreadBarrier.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29SharedMemoryMachineMemoryWindowBaseInternalCreator::
30SharedMemoryMachineMemoryWindowBaseInternalCreator(Int32 nb_rank, IThreadBarrier* barrier)
31: m_nb_rank(nb_rank)
32, m_sizeof_window(0)
33, m_barrier(barrier)
34, m_window(nullptr)
35, m_sizeof_segments(nullptr)
36, m_sum_sizeof_segments(nullptr)
37{
38 m_ranks.resize(m_nb_rank);
39 for (Int32 i = 0; i < m_nb_rank; ++i) {
40 m_ranks[i] = i;
41 }
42}
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
46
47SharedMemoryMachineMemoryWindowBaseInternal* SharedMemoryMachineMemoryWindowBaseInternalCreator::
48createWindow(Int32 my_rank, Int64 sizeof_segment, Int32 sizeof_type)
49{
50 if (my_rank == 0) {
51 m_sizeof_segments = new Int64[m_nb_rank];
52 m_sum_sizeof_segments = new Int64[m_nb_rank];
53 }
54 m_barrier->wait();
55
56 m_sizeof_segments[my_rank] = sizeof_segment;
57 m_barrier->wait();
58
59 if (my_rank == 0) {
60 m_sizeof_window = 0;
61 for (Int32 i = 0; i < m_nb_rank; ++i) {
62 m_sum_sizeof_segments[i] = m_sizeof_window;
63 m_sizeof_window += m_sizeof_segments[i];
64 }
65 m_window = new std::byte[m_sizeof_window];
66 }
67 m_barrier->wait();
68
69 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);
70 m_barrier->wait();
71
72 // Ces tableaux doivent être delete par SharedMemoryMachineMemoryWindowBaseInternal (rang 0 uniquement).
73 m_sizeof_segments = nullptr;
74 m_sum_sizeof_segments = nullptr;
75 m_window = nullptr;
76 m_sizeof_window = 0;
77
78 return window_obj;
79}
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83
84} // namespace Arcane::MessagePassing
85
86/*---------------------------------------------------------------------------*/
87/*---------------------------------------------------------------------------*/
Déclarations des types et méthodes utilisés par les mécanismes d'échange de messages.
std::int32_t Int32
Type entier signé sur 32 bits.