12#ifndef ARCANE_ACCELERATOR_CORE_INTERNAL_RUNNERIMPL_H
13#define ARCANE_ACCELERATOR_CORE_INTERNAL_RUNNERIMPL_H
19#include "arcane/accelerator/core/DeviceId.h"
20#include "arcane/accelerator/core/internal/RunnerInternal.h"
29namespace Arcane::Accelerator::impl
39 void initialize(
RunnerImpl* v) { m_runner_impl = v; }
43 bool empty()
const {
return m_stack.empty(); }
44 void pop() { m_stack.pop(); }
54 std::stack<impl::RunQueueImpl*> m_stack;
55 std::atomic<Int32> m_nb_created = -1;
64 friend ::Arcane::Accelerator::Runner;
74 : m_mutex_ptr(&
p->m_pool_mutex)
80 m_mutex_ptr->unlock();
83 Lock& operator=(
const Lock&) =
delete;
87 std::mutex* m_mutex_ptr =
nullptr;
93 : m_internal_api(this)
108 RunQueueImplStack* getPool();
109 void addTime(
double v)
115 double cumulativeCommandTime()
const
118 return static_cast<double>(x) / 1.0e9;
121 impl::IRunnerRuntime* runtime()
const {
return m_runtime; }
125 bool isInit()
const {
return m_is_init; }
127 DeviceId deviceId()
const {
return m_device_id; }
131 void _internalPutRunQueueImplInPool(RunQueueImpl* p);
132 RunQueueImpl* _internalCreateOrGetRunQueueImpl();
133 RunQueueImpl* _internalCreateOrGetRunQueueImpl(
const RunQueueBuildInfo& bi);
134 IRunQueueEventImpl* _createEvent();
135 IRunQueueEventImpl* _createEventWithTimer();
136 RunnerInternal* _internalApi() {
return &m_internal_api; }
141 bool m_is_init =
false;
143 DeviceId m_device_id;
144 impl::IRunnerRuntime* m_runtime =
nullptr;
145 RunQueueImplStack m_run_queue_pool;
146 std::mutex m_pool_mutex;
161 void _checkIsInit()
const;
Identifiant d'un composant du système.
Informations pour créer une RunQueue.
Gestionnaire d'exécution pour accélérateur.
File d'exécution pour accélérateur.
Verrou pour le pool de RunQueue en multi-thread.
bool m_is_auto_prefetch_command
Indique si on pré-copie les données avant une commande de cette RunQueue.
std::atomic< Int64 > m_cumulative_command_time
Temps passé dans le noyau en nano-seconde. On utilise un 'Int64' car les atomiques sur les flottants ...
Lecteur des fichiers de maillage via la bibliothèque LIMA.
eDeviceReducePolicy
Politique des opératations de réduction sur les accélérateurs.
@ Grid
Utilise un noyau de calcul avec une synchronisations entre les blocs.
eExecutionPolicy
Politique d'exécution pour un Runner.
@ None
Aucune politique d'exécution.
std::int64_t Int64
Type entier signé sur 64 bits.