Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
core/RunQueue.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/* RunQueue.h (C) 2000-2024 */
9/* */
10/* Gestion d'une file d'exécution sur accélérateur. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_RUNQUEUE_H
13#define ARCANE_ACCELERATOR_CORE_RUNQUEUE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/AutoRef.h"
18
19#include "arcane/accelerator/core/RunCommand.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane::Accelerator
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
51class ARCANE_ACCELERATOR_CORE_EXPORT RunQueue
52{
53 friend RunCommand;
54 friend ProfileRegion;
55 friend Runner;
56 friend ViewBuildInfo;
57 friend class impl::RunCommandLaunchInfo;
60
61 public:
62
65 {
66 public:
67
68 explicit ScopedAsync(RunQueue* queue)
69 : m_queue(queue)
70 {
71 // Rend la file asynchrone
72 if (m_queue) {
73 m_is_async = m_queue->isAsync();
74 m_queue->setAsync(true);
75 }
76 }
77 ~ScopedAsync() noexcept(false)
78 {
79 // Remet la file dans l'état d'origine lors de l'appel au constructeur
80 if (m_queue)
81 m_queue->setAsync(m_is_async);
82 }
83
84 private:
85
86 RunQueue* m_queue = nullptr;
87 bool m_is_async = false;
88 };
89
90 public:
91
93 RunQueue();
94 ~RunQueue();
95
96 public:
97
99 ARCANE_DEPRECATED_REASON("Y2024: Use makeQueue(runner) instead")
100 explicit RunQueue(const Runner& runner);
102 ARCANE_DEPRECATED_REASON("Y2024: Use makeQueue(runner,bi) instead")
103 RunQueue(const Runner& runner, const RunQueueBuildInfo& bi);
104
105 public:
106
107 RunQueue(const RunQueue&);
108 RunQueue& operator=(const RunQueue&);
111
112 public:
113
115 bool isNull() const { return !m_p; }
116
118 eExecutionPolicy executionPolicy() const;
120 bool isAcceleratorPolicy() const;
121
131 void setAsync(bool v);
133 bool isAsync() const;
134
143 const RunQueue& addAsync(bool is_async) const;
144
146 void barrier() const;
147
149 void copyMemory(const MemoryCopyArgs& args) const;
151 void prefetchMemory(const MemoryPrefetchArgs& args) const;
152
159 void recordEvent(RunQueueEvent& event);
161 void recordEvent(Ref<RunQueueEvent>& event);
163 void waitEvent(RunQueueEvent& event);
165 void waitEvent(Ref<RunQueueEvent>& event);
167
170
176 MemoryAllocationOptions allocationOptions() const;
177
189 void setMemoryRessource(eMemoryRessource mem);
190
192 eMemoryRessource memoryRessource() const;
194
195 public:
196
209 ARCANE_DEPRECATED_REASON("Y2024: Use toCudaNativeStream(), toHipNativeStream() or toSyclNativeStream() instead")
210 void* platformStream() const;
211
212 private:
213
214 // Les méthodes de création sont réservée à Runner.
215 // On ajoute un argument supplémentaire non utilisé pour ne pas utiliser
216 // le constructeur obsolète.
217 RunQueue(const Runner& runner, bool);
219 RunQueue(const Runner& runner, const RunQueueBuildInfo& bi, bool);
220 explicit RunQueue(impl::RunQueueImpl* p);
221
222 private:
223
224 impl::IRunnerRuntime* _internalRuntime() const;
225 impl::IRunQueueStream* _internalStream() const;
226 impl::RunCommandImpl* _getCommandImpl() const;
227 impl::RunQueueImpl* _internalImpl() const;
228 void _checkNotNull() const;
229
230 // Pour VariableViewBase
233
234 private:
235
236 AutoRef2<impl::RunQueueImpl> m_p;
237};
238
239/*---------------------------------------------------------------------------*/
240/*---------------------------------------------------------------------------*/
241
242/*---------------------------------------------------------------------------*/
243/*---------------------------------------------------------------------------*/
248makeCommand(const RunQueue& run_queue)
249{
250 run_queue._checkNotNull();
251 return RunCommand(run_queue);
252}
253
257inline RunCommand
259{
261 run_queue->_checkNotNull();
262 return RunCommand(*run_queue);
263}
264
265/*---------------------------------------------------------------------------*/
266/*---------------------------------------------------------------------------*/
267
268} // End namespace Arcane::Accelerator
269
270/*---------------------------------------------------------------------------*/
271/*---------------------------------------------------------------------------*/
272
273#endif
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Arguments pour la copie mémoire.
Definition Memory.h:63
Arguments pour le préfetching mémoire.
Definition Memory.h:125
Classe de base des vues sur les 'NumArray'.
Région pour le profiling.
Gestion d'une commande sur accélérateur.
Informations pour créer une RunQueue.
Evènement pour une file d'exécution.
Permet de modifier l'asynchronisme de la file pendant la durée de vie de l'instance.
File d'exécution pour un accélérateur.
ARCANE_DEPRECATED_REASON("Y2024: Use toCudaNativeStream(), toHipNativeStream() or toSyclNativeStream() instead") void *platformStream() const
Pointeur sur la structure interne dépendante de l'implémentation.
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:53
Classe de base des vues sur les variables.
Informations pour construire une vue pour les données sur accélérateur.
Object temporaire pour conserver les informations d'exécution d'une commande et regrouper les tests.
Encapsulation d'un pointeur avec compteur de référence.
Definition AutoRef.h:123
Vue typée sur une liste d'entités d'une connectivité.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Options pour configurer les allocations.
Espace de nom pour l'utilisation des accélérateurs.
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
eExecutionPolicy
Politique d'exécution pour un Runner.
bool isAcceleratorPolicy(eExecutionPolicy exec_policy)
Indique si exec_policy correspond à un accélérateur.
eMemoryRessource
Liste des ressources mémoire disponibles.