File d'exécution pour un accélérateur. Plus de détails...
#include <arcane/accelerator/core/RunQueue.h>
Classes | |
class | ScopedAsync |
Permet de modifier l'asynchronisme de la file pendant la durée de vie de l'instance. Plus de détails... | |
Fonctions membres publiques | |
RunQueue () | |
Créé une file nulle. | |
RunQueue (const Runner &runner) | |
Créé une file associée à runner avec les paramètres par défaut. | |
RunQueue (const Runner &runner, const RunQueueBuildInfo &bi) | |
Créé une file associée à runner avec les paramètres bi. | |
RunQueue (const RunQueue &) | |
RunQueue & | operator= (const RunQueue &) |
RunQueue (RunQueue &&) noexcept | |
RunQueue & | operator= (RunQueue &&) noexcept |
bool | isNull () const |
Indique si la RunQueue est nulle. | |
eExecutionPolicy | executionPolicy () const |
Politique d'exécution de la file. | |
bool | isAcceleratorPolicy () const |
Indique si l'instance est associée à un accélérateur. | |
void | setAsync (bool v) |
Positionne l'asynchronisme de l'instance. | |
bool | isAsync () const |
Indique si la file d'exécution est asynchrone. | |
const RunQueue & | addAsync (bool is_async) const |
Positionne l'asynchronisme de l'instance. | |
void | barrier () const |
Bloque tant que toutes les commandes associées à la file ne sont pas terminées. | |
void | copyMemory (const MemoryCopyArgs &args) const |
Copie des informations entre deux zones mémoires. | |
void | prefetchMemory (const MemoryPrefetchArgs &args) const |
Effectue un préfetching de la mémoire. | |
void | setConcurrentCommandCreation (bool v) |
Indique si on autorise la création de RunCommand pour cette instance depuis plusieurs threads. | |
bool | isConcurrentCommandCreation () const |
Indique si la création concurrente de plusieurs RunCommand est autorisée. | |
void * | platformStream () const |
Pointeur sur la structure interne dépendante de l'implémentation. | |
impl::RunQueueImpl * | _internalImpl () const |
Gestion des évènements | |
| |
void | recordEvent (RunQueueEvent &event) |
void | recordEvent (Ref< RunQueueEvent > &event) |
Enregistre l'état de l'instance dans event. | |
void | waitEvent (RunQueueEvent &event) |
Bloque l'exécution sur l'instance tant que les jobs enregistrés dans event ne sont pas terminés. | |
void | waitEvent (Ref< RunQueueEvent > &event) |
Bloque l'exécution sur l'instance tant que les jobs enregistrés dans event ne sont pas terminés. | |
Gestion mémoire | |
MemoryAllocationOptions | allocationOptions () const |
Options d'allocation associée à cette file. | |
void | setMemoryRessource (eMemoryRessource mem) |
Positionne la ressource mémoire utilisée pour les allocations avec cette instance. | |
eMemoryRessource | memoryRessource () const |
Ressource mémoire utilisée pour les allocations avec cette instance. | |
Amis | |
class | impl::RunCommandLaunchInfo |
class | impl::CudaUtils |
class | impl::HipUtils |
class | impl::SyclUtils |
class | VariableViewBase |
class | NumArrayViewBase |
RunCommand | makeCommand (const RunQueue &run_queue) |
Créé une commande associée à la file run_queue. | |
RunCommand | makeCommand (const RunQueue *run_queue) |
Créé une commande associée à la file run_queue. | |
bool | operator== (const RunQueue &q1, const RunQueue &q2) |
bool | operator!= (const RunQueue &q1, const RunQueue &q2) |
File d'exécution pour un accélérateur.
Cette classe utilise une sémantique par référence. La file d'exécution est détruite lorsque la dernière référence dessus est détruite.
Une file est attachée à une instance de Runner et permet d'exécuter des commandes (RunCommand) sur un accélérateur ou sur le CPU. La méthode executionPolicy() permet de savoir où s'exécutera les commandes issues de la file.
Les instances de cette classe sont créées par l'appel à makeQueue(Runner). On peut ensuite créer des noyaux de calcul (RunCommand) via l'appel à makeCommand().
Le constructeur par défaut construit Une file nulle qui ne peut pas être utilisée pour lancer des commandes. Les seules opérations autorisées sur la file nulle sont isNull(), executionPolicy(), isAcceleratorPolicy(), barrier(), allocationOptions() et memoryRessource().
Les méthodes de cette classe ne sont pas thread-safe pour une même instance.
Définition à la ligne 51 du fichier core/RunQueue.h.
Arcane::Accelerator::RunQueue::RunQueue | ( | ) |
Créé une file nulle.
Définition à la ligne 45 du fichier RunQueue.cc.
Arcane::Accelerator::RunQueue::~RunQueue | ( | ) |
Définition à la ligne 137 du fichier RunQueue.cc.
|
explicit |
Créé une file associée à runner avec les paramètres par défaut.
Définition à la ligne 53 du fichier RunQueue.cc.
Arcane::Accelerator::RunQueue::RunQueue | ( | const Runner & | runner, |
const RunQueueBuildInfo & | bi | ||
) |
Créé une file associée à runner avec les paramètres bi.
Définition à la ligne 62 du fichier RunQueue.cc.
Arcane::Accelerator::RunQueue::RunQueue | ( | const RunQueue & | x | ) |
Définition à la ligne 89 du fichier RunQueue.cc.
|
noexcept |
Définition à la ligne 98 du fichier RunQueue.cc.
impl::RunQueueImpl * Arcane::Accelerator::RunQueue::_internalImpl | ( | ) | const |
Définition à la ligne 206 du fichier RunQueue.cc.
const RunQueue & Arcane::Accelerator::RunQueue::addAsync | ( | bool | is_async | ) | const |
Positionne l'asynchronisme de l'instance.
Retourne l'instance.
Définition à la ligne 308 du fichier RunQueue.cc.
MemoryAllocationOptions Arcane::Accelerator::RunQueue::allocationOptions | ( | ) | const |
Options d'allocation associée à cette file.
Il est possible de changer la ressource mémoire et donc l'allocateur utilisé via setMemoryRessource().
Définition à la ligne 339 du fichier RunQueue.cc.
void Arcane::Accelerator::RunQueue::barrier | ( | ) | const |
Bloque tant que toutes les commandes associées à la file ne sont pas terminées.
Définition à la ligne 158 du fichier RunQueue.cc.
Référencé par Arcane::Accelerator::impl::GenericPartitionerIf::apply().
void Arcane::Accelerator::RunQueue::copyMemory | ( | const MemoryCopyArgs & | args | ) | const |
Copie des informations entre deux zones mémoires.
Définition à la ligne 236 du fichier RunQueue.cc.
eExecutionPolicy Arcane::Accelerator::RunQueue::executionPolicy | ( | ) | const |
Politique d'exécution de la file.
Définition à la ligne 168 du fichier RunQueue.cc.
Références Arcane::Accelerator::None.
Référencé par Arcane::Accelerator::impl::GenericFilteringIf::apply(), Arcane::Accelerator::impl::GenericPartitionerIf::apply(), Arcane::Accelerator::impl::GenericPartitionerIf::apply3(), Arcane::Accelerator::impl::arcaneCheckPointerIsAccessible(), Arcane::Accelerator::getPointerAccessibility(), et isAcceleratorPolicy().
bool Arcane::Accelerator::RunQueue::isAcceleratorPolicy | ( | ) | const |
Indique si l'instance est associée à un accélérateur.
Définition à la ligne 330 du fichier RunQueue.cc.
Références executionPolicy(), et Arcane::Accelerator::isAcceleratorPolicy().
Référencé par setConcurrentCommandCreation().
bool Arcane::Accelerator::RunQueue::isAsync | ( | ) | const |
Indique si la file d'exécution est asynchrone.
Définition à la ligne 319 du fichier RunQueue.cc.
bool Arcane::Accelerator::RunQueue::isConcurrentCommandCreation | ( | ) | const |
Indique si la création concurrente de plusieurs RunCommand est autorisée.
Définition à la ligne 383 du fichier RunQueue.cc.
|
inline |
Indique si la RunQueue est nulle.
Définition à la ligne 119 du fichier core/RunQueue.h.
Référencé par Arcane::Accelerator::impl::arcaneCheckPointerIsAccessible(), Arcane::Accelerator::getPointerAccessibility(), Arcane::Accelerator::ProfileRegion::ProfileRegion(), et Arcane::Accelerator::ProfileRegion::ProfileRegion().
eMemoryRessource Arcane::Accelerator::RunQueue::memoryRessource | ( | ) | const |
Ressource mémoire utilisée pour les allocations avec cette instance.
Définition à la ligne 360 du fichier RunQueue.cc.
Définition à la ligne 116 du fichier RunQueue.cc.
Définition à la ligne 127 du fichier RunQueue.cc.
void * Arcane::Accelerator::RunQueue::platformStream | ( | ) | const |
Pointeur sur la structure interne dépendante de l'implémentation.
Cette méthode est réservée à un usage avancée. La file retournée ne doit pas être conservée au delà de la vie de l'instance.
Avec CUDA, le pointeur retourné est un 'cudaStream_t*'. Avec HIP, il s'agit d'un 'hipStream_t*'.
Définition à la ligne 227 du fichier RunQueue.cc.
void Arcane::Accelerator::RunQueue::prefetchMemory | ( | const MemoryPrefetchArgs & | args | ) | const |
Effectue un préfetching de la mémoire.
Définition à la ligne 246 du fichier RunQueue.cc.
Référencé par Arcane::VariableUtils::prefetchVariableAsync().
void Arcane::Accelerator::RunQueue::recordEvent | ( | Ref< RunQueueEvent > & | event | ) |
Enregistre l'état de l'instance dans event.
Définition à la ligne 287 du fichier RunQueue.cc.
Références ARCANE_CHECK_POINTER, et recordEvent().
void Arcane::Accelerator::RunQueue::recordEvent | ( | RunQueueEvent & | event | ) |
Enregistre l'état de l'instance dans event.
Définition à la ligne 277 du fichier RunQueue.cc.
Référencé par recordEvent().
void Arcane::Accelerator::RunQueue::setAsync | ( | bool | v | ) |
Positionne l'asynchronisme de l'instance.
Si l'instance est asynchrone, les différentes commandes associées ne sont pas bloquantes et il faut appeler explicitement barrier() pour attendre la fin de l'exécution des commandes.
Définition à la ligne 298 du fichier RunQueue.cc.
void Arcane::Accelerator::RunQueue::setConcurrentCommandCreation | ( | bool | v | ) |
Indique si on autorise la création de RunCommand pour cette instance depuis plusieurs threads.
Cela nécessite d'utiliser un verrou (comme std::mutex) et peut dégrader les performances. Le défaut est false.
Cette méthode n'est pas supportée pour les files qui sont associées à des accélérateurs (isAcceleratorPolicy()==true)
Définition à la ligne 371 du fichier RunQueue.cc.
Références ARCANE_FATAL, et isAcceleratorPolicy().
void Arcane::Accelerator::RunQueue::setMemoryRessource | ( | eMemoryRessource | mem | ) |
Positionne la ressource mémoire utilisée pour les allocations avec cette instance.
La valeur par défaut est eMemoryRessource::UnifiedMemory si isAcceleratorPolicy()==true et eMemoryRessource::Host sinon.
Définition à la ligne 350 du fichier RunQueue.cc.
void Arcane::Accelerator::RunQueue::waitEvent | ( | Ref< RunQueueEvent > & | event | ) |
Bloque l'exécution sur l'instance tant que les jobs enregistrés dans event ne sont pas terminés.
Définition à la ligne 266 du fichier RunQueue.cc.
Références ARCANE_CHECK_POINTER, et waitEvent().
void Arcane::Accelerator::RunQueue::waitEvent | ( | RunQueueEvent & | event | ) |
Bloque l'exécution sur l'instance tant que les jobs enregistrés dans event ne sont pas terminés.
Définition à la ligne 256 du fichier RunQueue.cc.
Référencé par waitEvent().
|
friend |
Définition à la ligne 61 du fichier core/RunQueue.h.
|
friend |
Définition à la ligne 62 du fichier core/RunQueue.h.
|
friend |
Définition à la ligne 57 du fichier core/RunQueue.h.
|
friend |
Définition à la ligne 63 du fichier core/RunQueue.h.
|
friend |
Créé une commande associée à la file run_queue.
Définition à la ligne 283 du fichier core/RunQueue.h.
|
friend |
Créé une commande associée à la file run_queue.
Définition à la ligne 293 du fichier core/RunQueue.h.
|
friend |
Définition à la ligne 267 du fichier core/RunQueue.h.
Définition à la ligne 238 du fichier core/RunQueue.h.
Définition à la ligne 234 du fichier core/RunQueue.h.
|
friend |
Définition à la ligne 266 du fichier core/RunQueue.h.