Arcane  v4.1.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
AcceleratorMng.cc
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/* AcceleratorMng.cc (C) 2000-2025 */
9/* */
10/* Implémentation de 'IAcceleratorMng' */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/accelerator/core/IAcceleratorMng.h"
15
16#include "arccore/trace/TraceAccessor.h"
17#include "arccore/base/FatalErrorException.h"
18#include "arccore/base/Ref.h"
19
20#include "arcane/accelerator/core/Runner.h"
21#include "arcane/accelerator/core/RunQueue.h"
22#include "arcane/accelerator/core/AcceleratorRuntimeInitialisationInfo.h"
23
24#include <memory>
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29#define CHECK_HAS_INIT() \
30 if (!m_has_init)\
31 ARCANE_FATAL("Invalid call because IAcceleratorMng::initialized() has not been called")
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36namespace Arcane::Accelerator
37{
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41/*!
42 * \brief Gestionnaire des modules.
43 */
44class AcceleratorMng
45: public TraceAccessor
46, public IAcceleratorMng
47{
48 public:
49
50 explicit AcceleratorMng(ITraceMng* tm)
51 : TraceAccessor(tm)
52 {
53 }
54
55 public:
56
57 void initialize(const AcceleratorRuntimeInitialisationInfo& runtime_info) override;
58 bool isInitialized() const override { return m_has_init; }
60 {
61 CHECK_HAS_INIT();
62 return m_default_runner_ref.get();
63 }
65 {
66 CHECK_HAS_INIT();
67 return m_default_queue_ref.get();
68 }
69 Runner runner() override
70 {
71 return m_default_runner;
72 }
73 RunQueue queue() override { return m_default_queue; }
74
75 private:
76
77 std::unique_ptr<Runner> m_default_runner_ref;
78 Runner m_default_runner;
79 Ref<RunQueue> m_default_queue_ref;
80 RunQueue m_default_queue;
81 bool m_has_init = false;
82};
83
84/*---------------------------------------------------------------------------*/
85/*---------------------------------------------------------------------------*/
86
89{
90 if (m_has_init)
91 ARCANE_FATAL("Method initialize() has already been called");
92
93 arcaneInitializeRunner(m_default_runner,traceMng(),runtime_info);
94 m_has_init = true;
95
96 m_default_runner_ref = std::make_unique<Runner>(m_default_runner);
97 m_default_queue_ref = makeQueueRef(m_default_runner);
98 m_default_queue = *m_default_queue_ref.get();
99}
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103
104extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT Ref<IAcceleratorMng>
105arcaneCreateAcceleratorMngRef(ITraceMng* tm)
106{
108}
109
110/*---------------------------------------------------------------------------*/
111/*---------------------------------------------------------------------------*/
112
113} // End namespace Arcane
114
115/*---------------------------------------------------------------------------*/
116/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Gestion des références à une classe C++.
Runner * defaultRunner() override
Exécuteur par défaut.
RunQueue * defaultQueue() override
File d'exécution par défaut.
void initialize(const AcceleratorRuntimeInitialisationInfo &runtime_info) override
Initialise l'instance.
bool isInitialized() const override
Indique si l'instance a été initialisée via l'appel à initialize()
Runner runner() override
Exécuteur associé à l'instance.
RunQueue queue() override
File d'exécution associée à l'instance.
Interface du gestionnaire des accélérateurs.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:67
Interface du gestionnaire de traces.
Référence à une instance.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
ITraceMng * traceMng() const
Gestionnaire de trace.
Espace de nom pour l'utilisation des accélérateurs.
Ref< RunQueue > makeQueueRef(const Runner &runner)
Créé une référence sur file avec la politique d'exécution par défaut de runner.
void arcaneInitializeRunner(Accelerator::Runner &runner, ITraceMng *tm, const AcceleratorRuntimeInitialisationInfo &acc_info)
Initialise runner avec les informations de acc_info.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.