Arcane  v3.16.8.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-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/* ParallelMngInternal.cc (C) 2000-2025 */
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/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33ParallelMngInternal::
34ParallelMngInternal(ParallelMngDispatcher* pm)
35: m_parallel_mng(pm)
37, m_queue(makeQueue(m_runner))
38{
39 if (auto v = Convert::Type<Int32>::tryParseFromEnvironment("ARCANE_DISABLE_ACCELERATOR_AWARE_MESSAGE_PASSING", true))
40 m_is_accelerator_aware_disabled = (v.value() != 0);
41}
42
43/*---------------------------------------------------------------------------*/
44/*---------------------------------------------------------------------------*/
45
46Runner ParallelMngInternal::
47runner() const
48{
49 return m_runner;
50}
51
52/*---------------------------------------------------------------------------*/
53/*---------------------------------------------------------------------------*/
54
55RunQueue ParallelMngInternal::
56queue() const
57{
58 return m_queue;
59}
60
61/*---------------------------------------------------------------------------*/
62/*---------------------------------------------------------------------------*/
63
64bool ParallelMngInternal::
65isAcceleratorAware() const
66{
67 if (m_is_accelerator_aware_disabled)
68 return false;
69 if (m_queue.isNull())
70 return false;
71 if (!m_queue.isAcceleratorPolicy())
72 return false;
73 return m_parallel_mng->_isAcceleratorAware();
74}
75
76/*---------------------------------------------------------------------------*/
77/*---------------------------------------------------------------------------*/
78
79void ParallelMngInternal::
80setDefaultRunner(const Runner& runner)
81{
82 if (!m_runner.isInitialized())
83 ARCANE_FATAL("Can not set an unitialized Runner");
84
85 // Attention à bien supprimer la référence sur la RunQueue
86 // avant de détruire le Runner car s'il n'y a pas d'autres
87 // références sur \a m_runner il sera détruit avec \a m_queue
88 // et ce dernier aura un \a m_runner détruit.
89 m_queue = RunQueue{};
90 m_runner = runner;
91 Accelerator::RunQueueBuildInfo build_info(-5);
92 m_queue = makeQueue(m_runner, build_info);
93 m_queue.setAsync(true);
94}
95
96/*---------------------------------------------------------------------------*/
97/*---------------------------------------------------------------------------*/
98
99Ref<IParallelMng> ParallelMngInternal::
100createSubParallelMngRef(Int32 color, Int32 key)
101{
102 return m_parallel_mng->_createSubParallelMngRef(color, key);
103}
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
109createMachineMemoryWindowBase(Int64 sizeof_segment, Int32 sizeof_type)
110{
111 ARCANE_THROW(NotImplementedException, "MachineWindow is not available in your ParallelMng");
112}
113
114/*---------------------------------------------------------------------------*/
115/*---------------------------------------------------------------------------*/
116
118createDynamicMachineMemoryWindowBase(Int64 sizeof_segment, Int32 sizeof_type)
119{
120 ARCANE_THROW(NotImplementedException, "MachineWindow is not available in your ParallelMng");
121}
122
123/*---------------------------------------------------------------------------*/
124/*---------------------------------------------------------------------------*/
125
126} // namespace Arcane
127
128/*---------------------------------------------------------------------------*/
129/*---------------------------------------------------------------------------*/
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:68
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.