Arcane  v4.1.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 "arccore/base/Ref.h"
18
19#include "arcane/accelerator/core/RunQueue.h"
20
21#include <memory>
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane::Accelerator
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
66class ARCANE_ACCELERATOR_CORE_EXPORT Runner
67{
68 friend impl::RunQueueImpl;
70 friend RunQueue;
71 friend RunQueueEvent;
72 friend impl::RunnerImpl;
73
74 friend RunQueue makeQueue(const Runner& runner);
75 friend RunQueue makeQueue(const Runner* runner);
76 friend RunQueue makeQueue(const Runner& runner, const RunQueueBuildInfo& bi);
77 friend RunQueue makeQueue(const Runner* runner, const RunQueueBuildInfo& bi);
78 friend Ref<RunQueue> makeQueueRef(const Runner& runner);
79 friend Ref<RunQueue> makeQueueRef(Runner& runner, const RunQueueBuildInfo& bi);
80 friend Ref<RunQueue> makeQueueRef(Runner* runner);
81
82 public:
83
89 Runner();
91 explicit Runner(eExecutionPolicy p);
94
95 public:
96
99
102
104 void initialize(eExecutionPolicy v, DeviceId device);
105
107 bool isInitialized() const;
108
115 ARCANE_DEPRECATED_REASON("Y2025: this method is a no op. Concurrent queue creation is always thread-safe")
116 void setConcurrentQueueCreation(bool v);
117
119 bool isConcurrentQueueCreation() const;
120
126 double cumulativeCommandTime() const;
127
129 ARCANE_DEPRECATED_REASON("Y2025: this method is a no op. reduce policy is always eDeviceReducePolicy::Grid")
131
134
136 void setMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice);
137
140
142 DeviceId deviceId() const;
143
149 void setAsCurrentDevice();
150
152 const DeviceInfo& deviceInfo() const;
153
156
158 void fillPointerAttribute(PointerAttribute& attr, const void* ptr);
159
160 public:
161
167 static const IDeviceInfoList* deviceInfoList(eExecutionPolicy policy);
168
169 private:
170
171 // La création est réservée aux méthodes globales makeQueue()
172 static RunQueue _makeQueue(const Runner& runner)
173 {
174 return RunQueue(runner, true);
175 }
176 static RunQueue _makeQueue(const Runner& runner, const RunQueueBuildInfo& bi)
177 {
178 return RunQueue(runner, bi, true);
179 }
180 static Ref<RunQueue> _makeQueueRef(const Runner& runner)
181 {
182 return makeRef(new RunQueue(runner, true));
183 }
184 static Ref<RunQueue> _makeQueueRef(Runner& runner, const RunQueueBuildInfo& bi)
185 {
186 return makeRef(new RunQueue(runner, bi, true));
187 }
188
189 public:
190
193
194 private:
195
196 impl::IRunnerRuntime* _internalRuntime() const;
197 impl::RunnerImpl* _impl() const { return m_p.get(); }
198
199 private:
200
201 std::shared_ptr<impl::RunnerImpl> m_p;
202
203 private:
204
205 void _checkIsInit() const;
206 bool _isAutoPrefetchCommand() const;
207};
208
209/*---------------------------------------------------------------------------*/
210/*---------------------------------------------------------------------------*/
211
212/*---------------------------------------------------------------------------*/
213/*---------------------------------------------------------------------------*/
214
220inline RunQueue
221makeQueue(const Runner& runner)
222{
223 return Runner::_makeQueue(runner);
224}
225
226/*---------------------------------------------------------------------------*/
227/*---------------------------------------------------------------------------*/
233inline RunQueue
234makeQueue(const Runner* runner)
235{
236 ARCANE_CHECK_POINTER(runner);
237 return Runner::_makeQueue(*runner);
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
247inline RunQueue
248makeQueue(const Runner& runner, const RunQueueBuildInfo& bi)
249{
250 return Runner::_makeQueue(runner, bi);
251}
252
253/*---------------------------------------------------------------------------*/
254/*---------------------------------------------------------------------------*/
260inline RunQueue
261makeQueue(const Runner* runner, const RunQueueBuildInfo& bi)
262{
263 ARCANE_CHECK_POINTER(runner);
264 return Runner::_makeQueue(*runner, bi);
265}
266
267/*---------------------------------------------------------------------------*/
268/*---------------------------------------------------------------------------*/
275inline Ref<RunQueue>
276makeQueueRef(const Runner& runner)
277{
278 return Runner::_makeQueueRef(runner);
279}
280
281/*---------------------------------------------------------------------------*/
282/*---------------------------------------------------------------------------*/
289inline Ref<RunQueue>
291{
292 return Runner::_makeQueueRef(runner, bi);
293}
294
295/*---------------------------------------------------------------------------*/
296/*---------------------------------------------------------------------------*/
303inline Ref<RunQueue>
305{
306 ARCANE_CHECK_POINTER(runner);
307 return Runner::_makeQueueRef(*runner);
308}
309
310/*---------------------------------------------------------------------------*/
311/*---------------------------------------------------------------------------*/
312
313} // End namespace Arcane::Accelerator
314
315/*---------------------------------------------------------------------------*/
316/*---------------------------------------------------------------------------*/
317
318#endif
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Gestion des références à une classe C++.
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:473
void setConcurrentQueueCreation(bool v)
Indique si on autorise la création de RunQueue depuis plusieurs threads.
Definition Runner.cc:321
static const IDeviceInfoList * deviceInfoList(eExecutionPolicy policy)
Liste des devices pour la politique d'exécution policy.
Definition Runner.cc:451
bool isInitialized() const
Indique si l'instance a été initialisée.
Definition Runner.cc:312
Runner()
Créé un gestionnaire d'exécution non initialisé.
Definition Runner.cc:261
RunnerInternal * _internalApi()
API interne à Arcane.
Definition Runner.cc:492
double cumulativeCommandTime() const
Temps total passé dans les commandes associées à cette instance.
Definition Runner.cc:386
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:330
DeviceId deviceId() const
Device associé à cette instance.
Definition Runner.cc:425
void setDeviceReducePolicy(eDeviceReducePolicy v)
Positionne la politique d'exécution des réductions.
Definition Runner.cc:339
const DeviceInfo & deviceInfo() const
Information sur le device associé à cette instance.
Definition Runner.cc:434
DeviceMemoryInfo deviceMemoryInfo() const
Information sur le device associé à cette instance.
Definition Runner.cc:463
void initialize(eExecutionPolicy v)
Initialise l'instance. Cette méthode ne doit être appelée qu'une seule fois.
Definition Runner.cc:358
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:415
eDeviceReducePolicy deviceReducePolicy() const
politique d'exécution des réductions
Definition Runner.cc:349
void setMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice)
Positionne un conseil sur la gestion d'une zone mémoire.
Definition Runner.cc:395
void unsetMemoryAdvice(ConstMemoryView buffer, eMemoryAdvice advice)
Supprime un conseil sur la gestion d'une zone mémoire.
Definition Runner.cc:405
eExecutionPolicy executionPolicy() const
Politique d'exécution associée.
Definition Runner.cc:303
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.
Vue constante sur une zone mémoire contigue contenant des éléments de taille fixe.
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:34
eExecutionPolicy
Politique d'exécution pour un Runner.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.