Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
core/internal/RunQueueImpl.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/* RunQueueImpl.h (C) 2000-2024 */
9/* */
10/* Implémentation d'une 'RunQueue'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_INTERNAL_RUNQUEUEIMPL_H
13#define ARCANE_ACCELERATOR_CORE_INTERNAL_RUNQUEUEIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include "arcane/utils/Array.h"
20#include "arcane/utils/MemoryRessource.h"
21
22#include <stack>
23#include <atomic>
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane::Accelerator::impl
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
40class ARCANE_ACCELERATOR_CORE_EXPORT RunQueueImpl
41{
42 friend class Arcane::Accelerator::Runner;
44 friend class RunCommandImpl;
45 friend class RunQueueImplStack;
46 friend class RunnerImpl;
47
48 private:
49
51
52 public:
53
55
56 public:
57
58 RunQueueImpl(const RunQueueImpl&) = delete;
59 RunQueueImpl(RunQueueImpl&&) = delete;
60 RunQueueImpl& operator=(const RunQueueImpl&) = delete;
61 RunQueueImpl& operator=(RunQueueImpl&&) = delete;
62
63 public:
64
65 static RunQueueImpl* create(RunnerImpl* r, const RunQueueBuildInfo& bi);
66 static RunQueueImpl* create(RunnerImpl* r);
67
68 public:
69
70 eExecutionPolicy executionPolicy() const { return m_execution_policy; }
71 RunnerImpl* runner() const { return m_runner_impl; }
72 MemoryAllocationOptions allocationOptions() const;
73 bool isAutoPrefetchCommand() const;
74
75 void copyMemory(const MemoryCopyArgs& args) const;
76 void prefetchMemory(const MemoryPrefetchArgs& args) const;
77
78 void recordEvent(RunQueueEvent& event);
79 void waitEvent(RunQueueEvent& event);
80
81 public:
82
83 void addRef()
84 {
85 ++m_nb_ref;
86 }
87 void removeRef()
88 {
89 Int32 v = std::atomic_fetch_add(&m_nb_ref, -1);
90 if (v == 1)
91 _release();
92 }
93
94 private:
95
96 RunCommandImpl* _internalCreateOrGetRunCommandImpl();
97 IRunnerRuntime* _internalRuntime() const { return m_runtime; }
98 IRunQueueStream* _internalStream() const { return m_queue_stream; }
99 void _internalFreeRunningCommands();
100 void _internalBarrier();
101 bool _isInPool() const { return m_is_in_pool; }
102 void _release();
103 void _setDefaultMemoryRessource();
104 static RunQueueImpl* _reset(RunQueueImpl* p);
105
106 private:
107
108 RunnerImpl* m_runner_impl = nullptr;
109 eExecutionPolicy m_execution_policy = eExecutionPolicy::None;
110 IRunnerRuntime* m_runtime = nullptr;
111 IRunQueueStream* m_queue_stream = nullptr;
113 std::stack<RunCommandImpl*> m_run_command_pool;
117 Int32 m_id = 0;
119 bool m_is_in_pool = false;
121 std::atomic<Int32> m_nb_ref = 0;
123 bool m_is_async = false;
125 eMemoryRessource m_memory_ressource = eMemoryRessource::Unknown;
126};
127
128/*---------------------------------------------------------------------------*/
129/*---------------------------------------------------------------------------*/
130
131} // namespace Arcane::Accelerator::impl
132
133/*---------------------------------------------------------------------------*/
134/*---------------------------------------------------------------------------*/
135
136#endif
Arguments pour la copie mémoire.
Definition Memory.h:63
Arguments pour le préfetching mémoire.
Definition Memory.h:125
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 d'un flux d'exécution pour une RunQueue.
Interface du runtime associé à une RunQueue.
Implémentation d'une commande pour accélérateur.
File d'exécution pour accélérateur.
std::stack< RunCommandImpl * > m_run_command_pool
Pool de commandes.
UniqueArray< RunCommandImpl * > m_active_run_command_list
Liste des commandes en cours d'exécution.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Options pour configurer les allocations.
eExecutionPolicy
Politique d'exécution pour un Runner.
eMemoryRessource
Liste des ressources mémoire disponibles.
std::int32_t Int32
Type entier signé sur 32 bits.