Arcane  v4.1.7.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ParallelMngInternal.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* ParallelMngInternal.cc (C) 2000-2026 */
9/* */
10/* Implémentation de la partie interne à Arcane de IParallelMng. */
11/*---------------------------------------------------------------------------*/
12
13#include "arcane/core/internal/ParallelMngInternal.h"
14
16#include "arcane/accelerator/core/RunQueueBuildInfo.h"
17
18#include "arcane/core/ParallelMngDispatcher.h"
19
20#include "arcane/utils/Convert.h"
21#include "arcane/utils/FatalErrorException.h"
22#include "arcane/utils/NotImplementedException.h"
23
24#include "arccore/common/MemoryAllocationOptions.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35ParallelMngInternal::
36ParallelMngInternal(ParallelMngDispatcher* pm)
37: m_parallel_mng(pm)
39, m_queue(makeQueue(m_runner))
40{
41 if (auto v = Convert::Type<Int32>::tryParseFromEnvironment("ARCANE_DISABLE_ACCELERATOR_AWARE_MESSAGE_PASSING", true))
42 m_is_accelerator_aware_disabled = (v.value() != 0);
43}
44
45/*---------------------------------------------------------------------------*/
46/*---------------------------------------------------------------------------*/
47
48Runner ParallelMngInternal::
49runner() const
50{
51 return m_runner;
52}
53
54/*---------------------------------------------------------------------------*/
55/*---------------------------------------------------------------------------*/
56
57RunQueue ParallelMngInternal::
58queue() const
59{
60 return m_queue;
61}
62
63/*---------------------------------------------------------------------------*/
64/*---------------------------------------------------------------------------*/
65
66bool ParallelMngInternal::
67isAcceleratorAware() const
68{
69 if (m_is_accelerator_aware_disabled)
70 return false;
71 if (m_queue.isNull())
72 return false;
73 if (!m_queue.isAcceleratorPolicy())
74 return false;
75 return m_parallel_mng->_isAcceleratorAware();
76}
77
78/*---------------------------------------------------------------------------*/
79/*---------------------------------------------------------------------------*/
80
81void ParallelMngInternal::
82setDefaultRunner(const Runner& runner)
83{
84 if (!m_runner.isInitialized())
85 ARCANE_FATAL("Can not set an unitialized Runner");
86
87 // Attention à bien supprimer la référence sur la RunQueue
88 // avant de détruire le Runner car s'il n'y a pas d'autres
89 // références sur \a m_runner il sera détruit avec \a m_queue
90 // et ce dernier aura un \a m_runner détruit.
91 m_queue = RunQueue{};
92 m_runner = runner;
93 Accelerator::RunQueueBuildInfo build_info(-5);
94 m_queue = makeQueue(m_runner, build_info);
95 m_queue.setAsync(true);
96}
97
98/*---------------------------------------------------------------------------*/
99/*---------------------------------------------------------------------------*/
100
101Int32 ParallelMngInternal::
102masterParallelIORank() const
103{
104 return m_parallel_mng->masterIORank();
105}
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
109
110Int32 ParallelMngInternal::
111nbSendersToMasterParallelIO() const
112{
113 return m_parallel_mng->commSize();
114}
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
118
119Ref<IParallelMng> ParallelMngInternal::
120createSubParallelMngRef(Int32 color, Int32 key)
121{
122 return m_parallel_mng->_createSubParallelMngRef(color, key);
123}
124
125/*---------------------------------------------------------------------------*/
126/*---------------------------------------------------------------------------*/
127
128void ParallelMngInternal::
129initializeWindowCreator()
130{
131 ARCANE_THROW(NotImplementedException, "MachineWindow is not available in your ParallelMng");
132}
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136
137bool ParallelMngInternal::
138isMachineShMemWinAvailable()
139{
140 return false;
141}
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
147createContigMachineShMemWinBase([[maybe_unused]] Int64 sizeof_segment,
148 [[maybe_unused]] Int32 sizeof_type)
149{
150 ARCANE_THROW(NotImplementedException, "MachineWindow is not available in your ParallelMng");
151}
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
157createMachineShMemWinBase([[maybe_unused]] Int64 sizeof_segment,
158 [[maybe_unused]] Int32 sizeof_type)
159{
160 ARCANE_THROW(NotImplementedException, "MachineWindow is not available in your ParallelMng");
161}
162
163/*---------------------------------------------------------------------------*/
164/*---------------------------------------------------------------------------*/
165
166MemoryAllocationOptions ParallelMngInternal::
167machineShMemWinMemoryAllocator()
168{
169 ARCANE_THROW(NotImplementedException, "MachineWindow is not available in your ParallelMng");
170}
171
172/*---------------------------------------------------------------------------*/
173/*---------------------------------------------------------------------------*/
174
175ConstArrayView<Int32> ParallelMngInternal::
176machineRanks()
177{
178 ARCANE_THROW(NotImplementedException, "MachineWindow is not available in your ParallelMng");
179}
180
181/*---------------------------------------------------------------------------*/
182/*---------------------------------------------------------------------------*/
183
184void ParallelMngInternal::
185machineBarrier()
186{
187 ARCANE_THROW(NotImplementedException, "MachineWindow is not available in your ParallelMng");
188}
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
193} // namespace Arcane
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Gestionnaire d'exécution pour accélérateur.
Vue constante d'un tableau de type T.
Exception lorsqu'une fonction n'est pas implémentée.
Redirige la gestion des messages des sous-domaines suivant le type de l'argument.
Référence à une instance.
Espace de nom pour l'utilisation des accélérateurs.
RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
eExecutionPolicy
Politique d'exécution pour un Runner.
@ Sequential
Politique d'exécution séquentielle.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.