Arcane  v3.15.0.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-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/* Runner.h (C) 2000-2025 */
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/*---------------------------------------------------------------------------*/
67class ARCANE_ACCELERATOR_CORE_EXPORT Runner
68{
69 friend impl::RunQueueImpl;
71 friend RunQueue;
72 friend RunQueueEvent;
73 friend impl::RunnerImpl;
74
75 friend RunQueue makeQueue(const Runner& runner);
76 friend RunQueue makeQueue(const Runner* runner);
77 friend RunQueue makeQueue(const Runner& runner, const RunQueueBuildInfo& bi);
78 friend RunQueue makeQueue(const Runner* runner, const RunQueueBuildInfo& bi);
79 friend Ref<RunQueue> makeQueueRef(const Runner& runner);
81 friend Ref<RunQueue> makeQueueRef(Runner* runner);
82
83 public:
84
90 Runner();
92 explicit Runner(eExecutionPolicy p);
95
96 public:
97
99 eExecutionPolicy executionPolicy() const;
100
102 void initialize(eExecutionPolicy v);
103
105 void initialize(eExecutionPolicy v, DeviceId device);
106
108 bool isInitialized() const;
109
116 ARCANE_DEPRECATED_REASON("Y2025: this method is a no op. Concurrent queue creation is always thread-safe")
117 void setConcurrentQueueCreation(bool v);
118
120 bool isConcurrentQueueCreation() const;
121
127 double cumulativeCommandTime() const;
128
130 ARCANE_DEPRECATED_REASON("Y2025: this method is a no op. reduce policy is always eDeviceReducePolicy::Grid")
131 void setDeviceReducePolicy(eDeviceReducePolicy v);
132
134 eDeviceReducePolicy deviceReducePolicy() const;
135
137 void setMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice);
138
140 void unsetMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice);
141
143 DeviceId deviceId() const;
144
150 void setAsCurrentDevice();
151
153 const DeviceInfo& deviceInfo() const;
154
156 DeviceMemoryInfo deviceMemoryInfo() const;
157
159 void fillPointerAttribute(PointerAttribute& attr, const void* ptr);
160
161 public:
162
168 static const IDeviceInfoList* deviceInfoList(eExecutionPolicy policy);
169
170 private:
171
172 // La création est réservée aux méthodes globales makeQueue()
173 static RunQueue _makeQueue(const Runner& runner)
174 {
175 return RunQueue(runner, true);
176 }
177 static RunQueue _makeQueue(const Runner& runner, const RunQueueBuildInfo& bi)
178 {
179 return RunQueue(runner, bi, true);
180 }
181 static Ref<RunQueue> _makeQueueRef(const Runner& runner)
182 {
183 return makeRef(new RunQueue(runner, true));
184 }
185 static Ref<RunQueue> _makeQueueRef(Runner& runner, const RunQueueBuildInfo& bi)
186 {
187 return makeRef(new RunQueue(runner, bi, true));
188 }
189
190 public:
191
193 RunnerInternal* _internalApi();
194
195 private:
196
197 impl::IRunnerRuntime* _internalRuntime() const;
198 impl::RunnerImpl* _impl() const { return m_p.get(); }
199
200 private:
201
202 std::shared_ptr<impl::RunnerImpl> m_p;
203
204 private:
205
206 void _checkIsInit() const;
207 bool _isAutoPrefetchCommand() const;
208};
209
210/*---------------------------------------------------------------------------*/
211/*---------------------------------------------------------------------------*/
212
213/*---------------------------------------------------------------------------*/
214/*---------------------------------------------------------------------------*/
215
221inline RunQueue
222makeQueue(const Runner& runner)
223{
224 return Runner::_makeQueue(runner);
225}
226
227/*---------------------------------------------------------------------------*/
228/*---------------------------------------------------------------------------*/
234inline RunQueue
235makeQueue(const Runner* runner)
236{
237 ARCANE_CHECK_POINTER(runner);
238 return Runner::_makeQueue(*runner);
239}
240
241/*---------------------------------------------------------------------------*/
242/*---------------------------------------------------------------------------*/
248inline RunQueue
249makeQueue(const Runner& runner, const RunQueueBuildInfo& bi)
250{
251 return Runner::_makeQueue(runner, bi);
252}
253
254/*---------------------------------------------------------------------------*/
255/*---------------------------------------------------------------------------*/
261inline RunQueue
262makeQueue(const Runner* runner, const RunQueueBuildInfo& bi)
263{
264 ARCANE_CHECK_POINTER(runner);
265 return Runner::_makeQueue(*runner, bi);
266}
267
268/*---------------------------------------------------------------------------*/
269/*---------------------------------------------------------------------------*/
276inline Ref<RunQueue>
277makeQueueRef(const Runner& runner)
278{
279 return Runner::_makeQueueRef(runner);
280}
281
282/*---------------------------------------------------------------------------*/
283/*---------------------------------------------------------------------------*/
290inline Ref<RunQueue>
292{
293 return Runner::_makeQueueRef(runner, bi);
294}
295
296/*---------------------------------------------------------------------------*/
297/*---------------------------------------------------------------------------*/
304inline Ref<RunQueue>
306{
307 ARCANE_CHECK_POINTER(runner);
308 return Runner::_makeQueueRef(*runner);
309}
310
311/*---------------------------------------------------------------------------*/
312/*---------------------------------------------------------------------------*/
313
314} // End namespace Arcane::Accelerator
315
316/*---------------------------------------------------------------------------*/
317/*---------------------------------------------------------------------------*/
318
319#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
Information mémoire d'un accélérateur.
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:68
Interface du runtime associé à un accélérateur.
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:149
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.