Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
core/Runner.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* Runner.h (C) 2000-2024 */
9/* */
10/* Gestion de l'exécution sur accélérateur. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_RUNNER_H
13#define ARCANE_ACCELERATOR_CORE_RUNNER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Ref.h"
18#include "arcane/utils/MemoryRessource.h"
19
20#include "arcane/accelerator/core/RunQueue.h"
21
22#include <memory>
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane::Accelerator
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
52class ARCANE_ACCELERATOR_CORE_EXPORT Runner
53{
54 friend impl::RunQueueImpl;
56 friend RunQueue;
57 friend RunQueueEvent;
58 friend impl::RunnerImpl;
59
60 friend RunQueue makeQueue(const Runner& runner);
61 friend RunQueue makeQueue(const Runner* runner);
62 friend RunQueue makeQueue(const Runner& runner, const RunQueueBuildInfo& bi);
63 friend RunQueue makeQueue(const Runner* runner, const RunQueueBuildInfo& bi);
64 friend Ref<RunQueue> makeQueueRef(const Runner& runner);
66 friend Ref<RunQueue> makeQueueRef(Runner* runner);
67
68 public:
69
75 Runner();
77 explicit Runner(eExecutionPolicy p);
80
81 public:
82
84 eExecutionPolicy executionPolicy() const;
85
87 void initialize(eExecutionPolicy v);
88
90 void initialize(eExecutionPolicy v, DeviceId device);
91
93 bool isInitialized() const;
94
101 void setConcurrentQueueCreation(bool v);
102
104 bool isConcurrentQueueCreation() const;
105
111 double cumulativeCommandTime() const;
112
114 void setDeviceReducePolicy(eDeviceReducePolicy v);
115
117 eDeviceReducePolicy deviceReducePolicy() const;
118
120 void setMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice);
121
123 void unsetMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice);
124
126 DeviceId deviceId() const;
127
133 void setAsCurrentDevice();
134
136 const DeviceInfo& deviceInfo() const;
137
139 void fillPointerAttribute(PointerAttribute& attr, const void* ptr);
140
141 public:
142
148 static const IDeviceInfoList* deviceInfoList(eExecutionPolicy policy);
149
150 private:
151
152 // La création est réservée aux méthodes globales makeQueue()
153 static RunQueue _makeQueue(const Runner& runner)
154 {
155 return RunQueue(runner, true);
156 }
157 static RunQueue _makeQueue(const Runner& runner, const RunQueueBuildInfo& bi)
158 {
159 return RunQueue(runner, bi, true);
160 }
161 static Ref<RunQueue> _makeQueueRef(const Runner& runner)
162 {
163 return makeRef(new RunQueue(runner, true));
164 }
165 static Ref<RunQueue> _makeQueueRef(Runner& runner, const RunQueueBuildInfo& bi)
166 {
167 return makeRef(new RunQueue(runner, bi, true));
168 }
169
170 public:
171
173 RunnerInternal* _internalApi();
174
175 private:
176
177 impl::IRunnerRuntime* _internalRuntime() const;
178 impl::RunnerImpl* _impl() const { return m_p.get(); }
179
180 private:
181
182 std::shared_ptr<impl::RunnerImpl> m_p;
183
184 private:
185
186 void _checkIsInit() const;
187 bool _isAutoPrefetchCommand() const;
188};
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
193/*---------------------------------------------------------------------------*/
194/*---------------------------------------------------------------------------*/
195
201inline RunQueue
202makeQueue(const Runner& runner)
203{
204 return Runner::_makeQueue(runner);
205}
206
207/*---------------------------------------------------------------------------*/
208/*---------------------------------------------------------------------------*/
214inline RunQueue
215makeQueue(const Runner* runner)
216{
217 ARCANE_CHECK_POINTER(runner);
218 return Runner::_makeQueue(*runner);
219}
220
221/*---------------------------------------------------------------------------*/
222/*---------------------------------------------------------------------------*/
228inline RunQueue
229makeQueue(const Runner& runner, const RunQueueBuildInfo& bi)
230{
231 return Runner::_makeQueue(runner, bi);
232}
233
234/*---------------------------------------------------------------------------*/
235/*---------------------------------------------------------------------------*/
241inline RunQueue
242makeQueue(const Runner* runner, const RunQueueBuildInfo& bi)
243{
244 ARCANE_CHECK_POINTER(runner);
245 return Runner::_makeQueue(*runner, bi);
246}
247
248/*---------------------------------------------------------------------------*/
249/*---------------------------------------------------------------------------*/
256inline Ref<RunQueue>
257makeQueueRef(const Runner& runner)
258{
259 return Runner::_makeQueueRef(runner);
260}
261
262/*---------------------------------------------------------------------------*/
263/*---------------------------------------------------------------------------*/
270inline Ref<RunQueue>
272{
273 return Runner::_makeQueueRef(runner, bi);
274}
275
276/*---------------------------------------------------------------------------*/
277/*---------------------------------------------------------------------------*/
284inline Ref<RunQueue>
286{
287 ARCANE_CHECK_POINTER(runner);
288 return Runner::_makeQueueRef(*runner);
289}
290
291/*---------------------------------------------------------------------------*/
292/*---------------------------------------------------------------------------*/
293
294} // End namespace Arcane::Accelerator
295
296/*---------------------------------------------------------------------------*/
297/*---------------------------------------------------------------------------*/
298
299#endif
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Identifiant d'un composant du système.
Definition DeviceId.h:33
Information sur un device.
Definition DeviceInfo.h:32
Interface d'une liste de devices.
Informations sur une adresse mémoire.
Informations pour créer une RunQueue.
Evènement pour une file d'exécution.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:53
Interface du runtime associé à une RunQueue.
Implémentation d'une commande pour accélérateur.
File d'exécution pour accélérateur.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Espace de nom pour l'utilisation des accélérateurs.
Ref< RunQueue > makeQueueRef(const Runner &runner)
Créé une référence sur file avec la politique d'exécution par défaut de runner.
eDeviceReducePolicy
Politique des opératations de réduction sur les accélérateurs.
RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
eMemoryAdvice
Conseils pour la gestion mémoire.
Definition Memory.h:36
eExecutionPolicy
Politique d'exécution pour un Runner.