Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
RunQueueEvent.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* RunQueueEvent.h (C) 2000-2025 */
9/* */
10/* Evènement sur une file d'exécution. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_RUNQUEUEEVENT_H
13#define ARCANE_ACCELERATOR_CORE_RUNQUEUEEVENT_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Ref.h"
18#include "arcane/utils/AutoRef.h"
19
20#include "arcane/accelerator/core/RunCommand.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane::Accelerator
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \brief Evènement pour une file d'exécution.
32 *
33 * Cette classe a une sémantique par référence.
34 *
35 * Les méthodes RunQueue::recordEvent() et RunQueue::waitEvent() permettent
36 * d'associer un RunQueueEvent à une RunQueue donnée pour effectuer
37 * une synchronisation.
38 *
39 * Par exemple:
40 *
41 * \snippet RunQueueUnitTest.cc SampleRunQueueEventSample1
42 */
43class ARCANE_ACCELERATOR_CORE_EXPORT RunQueueEvent
44{
45 friend RunQueueEvent makeEvent(const Runner& runner);
46 friend Ref<RunQueueEvent> makeEventRef(const Runner& runner);
47 friend RunQueue;
48 friend impl::RunQueueImpl;
49 class Impl;
50
51 private:
52
53 //! Construit un évènement. Utiliser makeEvent() pour constuire une instance
54 explicit RunQueueEvent(const Runner& runner);
55
56 public:
57
58 RunQueueEvent();
59 RunQueueEvent(const RunQueueEvent&);
60 RunQueueEvent& operator=(const RunQueueEvent&);
61 RunQueueEvent(RunQueueEvent&&) noexcept;
62 RunQueueEvent& operator=(RunQueueEvent&&) noexcept;
63 ~RunQueueEvent();
64
65 public:
66
67 /*!
68 * \brief Indique si l'instance est nulle.
69 *
70 * L'instance est nulle si elle a été construite avec le constructeur par défaut.
71 */
72 bool isNull() const { return m_p.get() == nullptr; }
73
74 //! Bloque tant que les files associées à cet évènement n'ont pas fini leur travail.
75 void wait();
76
77 /*!
78 * \brief Indique si les RunQueue associées à cet évènement ont fini leur travail.
79 *
80 * Retourne \a false si les RunQueue enregistrées via RunQueue::recordEvent() ont
81 * fini leur travail. Retourn \a true sinon.
82 */
83 bool hasPendingWork() const;
84
85 private:
86
87 impl::IRunQueueEventImpl* _internalEventImpl() const;
88
89 private:
90
92};
93
94/*---------------------------------------------------------------------------*/
95/*---------------------------------------------------------------------------*/
96
97/*---------------------------------------------------------------------------*/
98/*---------------------------------------------------------------------------*/
99/*!
100 * \brief Créé un évènement associé à \a runner.
101 */
102inline RunQueueEvent
103makeEvent(const Runner& runner)
104{
105 return RunQueueEvent(runner);
106}
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
110/*!
111 * \brief Créé un évènement associé à \a runner.
112 */
114makeEventRef(const Runner& runner)
115{
116 return makeRef(new RunQueueEvent(runner));
117}
118
119/*---------------------------------------------------------------------------*/
120/*---------------------------------------------------------------------------*/
121
122} // End namespace Arcane::Accelerator
123
124/*---------------------------------------------------------------------------*/
125/*---------------------------------------------------------------------------*/
126
127#endif
Evènement pour une file d'exécution.
friend RunQueueEvent makeEvent(const Runner &runner)
Créé un évènement associé à runner.
friend Ref< RunQueueEvent > makeEventRef(const Runner &runner)
Créé un évènement associé à runner.
bool isNull() const
Indique si l'instance est nulle.
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:68
Encapsulation d'un pointeur avec compteur de référence.
Definition AutoRef.h:123
Référence à une instance.
Espace de nom pour l'utilisation des accélérateurs.
RunQueueEvent makeEvent(const Runner &runner)
Créé un évènement associé à runner.
Ref< RunQueueEvent > makeEventRef(const Runner &runner)
Créé un évènement associé à runner.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.