12#ifndef ARCANE_ACCELERATOR_CORE_INTERNAL_RUNQUEUEIMPL_H
13#define ARCANE_ACCELERATOR_CORE_INTERNAL_RUNQUEUEIMPL_H
19#include "arcane/utils/Array.h"
20#include "arcane/utils/MemoryRessource.h"
29namespace Arcane::Accelerator::impl
41class ARCANE_ACCELERATOR_CORE_EXPORT RunQueueImpl
45 friend class RunCommandImpl;
46 friend class RunQueueImplStack;
47 friend class RunnerImpl;
62 RunQueueImpl(
const RunQueueImpl&) =
delete;
63 RunQueueImpl(RunQueueImpl&&) =
delete;
64 RunQueueImpl& operator=(
const RunQueueImpl&) =
delete;
65 RunQueueImpl& operator=(RunQueueImpl&&) =
delete;
70 static RunQueueImpl* create(RunnerImpl* r);
75 RunnerImpl* runner()
const {
return m_runner_impl; }
77 bool isAutoPrefetchCommand()
const;
85 void setConcurrentCommandCreation(
bool v);
86 bool isConcurrentCommandCreation()
const {
return m_use_pool_mutex; }
88 void dumpStats(std::ostream& ostr)
const;
110 RunCommandImpl* _internalCreateOrGetRunCommandImpl();
114 void _setDefaultMemoryRessource();
115 void _addRunningCommand(RunCommandImpl* p);
116 void _putInCommandPool(RunCommandImpl* p);
117 void _freeCommandsInPool();
119 static RunQueueImpl*
_reset(RunQueueImpl* p);
120 static void _destroy(RunQueueImpl* q);
124 RunnerImpl* m_runner_impl =
nullptr;
144 std::unique_ptr<std::mutex> m_pool_mutex;
145 bool m_use_pool_mutex =
false;
Arguments pour la copie mémoire.
Arguments pour le préfetching mémoire.
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.
Interface d'un flux d'exécution pour une RunQueue.
Interface du runtime associé à un accélérateur.
Verrou pour le pool de RunCommand en multi-thread.
void _checkPutCommandInPoolNoLock(RunCommandImpl *p)
Remet la commande dans le pool si possible.
static RunQueueImpl * _reset(RunQueueImpl *p)
Réinitialise l'implémentation.
bool m_is_async
Indique si la file est asynchrone.
eMemoryRessource m_memory_ressource
Ressource mémoire par défaut.
bool m_is_in_pool
Indique si l'instance est dans un pool d'instance.
void _internalBarrier()
Bloque jusqu'à ce que toutes les commandes soient terminées.
std::stack< RunCommandImpl * > m_run_command_pool
Pool de commandes.
std::atomic< Int32 > m_nb_ref
Nombre de références sur l'instance.
Int32 m_id
Identifiant de la file.
UniqueArray< RunCommandImpl * > m_active_run_command_list
Liste des commandes en cours d'exécution.
void _internalFreeRunningCommands()
Libère les commandes en cours d'exécution.
Options pour configurer les allocations.
Vecteur 1D de données avec sémantique par valeur (style STL).
eExecutionPolicy
Politique d'exécution pour un Runner.
@ None
Aucune politique d'exécution.
Arcane::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')
std::int32_t Int32
Type entier signé sur 32 bits.