Arcane  v3.16.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);
80 friend Ref<RunQueue> makeQueueRef(Runner& runner, const RunQueueBuildInfo& bi);
81 friend Ref<RunQueue> makeQueueRef(Runner* runner);
82
83 public:
84
90 Runner();
92 explicit Runner(eExecutionPolicy p);
95
96 public:
97
100
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")
132
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
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
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.
File d'exécution pour un accélérateur.
void fillPointerAttribute(PointerAttribute &attr, const void *ptr)
Remplit attr avec les informations concernant la zone mémoire pointée par ptr.
Definition Runner.cc:472
void setConcurrentQueueCreation(bool v)
Indique si on autorise la création de RunQueue depuis plusieurs threads.
Definition Runner.cc:320
static const IDeviceInfoList * deviceInfoList(eExecutionPolicy policy)
Liste des devices pour la politique d'exécution policy.
Definition Runner.cc:450
bool isInitialized() const
Indique si l'instance a été initialisée.
Definition Runner.cc:311
Runner()
Créé un gestionnaire d'exécution non initialisé.
Definition Runner.cc:260
RunnerInternal * _internalApi()
API interne à Arcane.
Definition Runner.cc:491
double cumulativeCommandTime() const
Temps total passé dans les commandes associées à cette instance.
Definition Runner.cc:385
friend Ref< RunQueue > makeQueueRef(const Runner &runner)
Créé une référence sur file avec la politique d'exécution par défaut de runner.
bool isConcurrentQueueCreation() const
Indique si la création concurrent de plusieurs RunQueue est autorisé
Definition Runner.cc:329
DeviceId deviceId() const
Device associé à cette instance.
Definition Runner.cc:424
void setDeviceReducePolicy(eDeviceReducePolicy v)
Positionne la politique d'exécution des réductions.
Definition Runner.cc:338
const DeviceInfo & deviceInfo() const
Information sur le device associé à cette instance.
Definition Runner.cc:433
DeviceMemoryInfo deviceMemoryInfo() const
Information sur le device associé à cette instance.
Definition Runner.cc:462
void initialize(eExecutionPolicy v)
Initialise l'instance. Cette méthode ne doit être appelée qu'une seule fois.
Definition Runner.cc:357
friend RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
void setAsCurrentDevice()
Positionne le device associé à cette instance comme le device par défaut du contexte.
Definition Runner.cc:414
eDeviceReducePolicy deviceReducePolicy() const
politique d'exécution des réductions
Definition Runner.cc:348
void setMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice)
Positionne un conseil sur la gestion d'une zone mémoire.
Definition Runner.cc:394
void unsetMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice)
Supprime un conseil sur la gestion d'une zone mémoire.
Definition Runner.cc:404
eExecutionPolicy executionPolicy() const
Politique d'exécution associée.
Definition Runner.cc:302
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.
Référence à une instance.
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.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.