Arcane  v4.1.1.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 "arccore/common/accelerator/IAcceleratorMng.h"
15
16#include "arccore/trace/TraceAccessor.h"
17#include "arccore/base/FatalErrorException.h"
18#include "arccore/base/Ref.h"
19
20#include "arccore/common/accelerator/Runner.h"
21#include "arccore/common/accelerator/RunQueue.h"
22
23#include "arcane/accelerator/core/AcceleratorRuntimeInitialisationInfo.h"
24
25#include <memory>
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30#define CHECK_HAS_INIT() \
31 if (!m_has_init)\
32 ARCANE_FATAL("Invalid call because IAcceleratorMng::initialized() has not been called")
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37namespace Arcane::Accelerator
38{
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
42/*!
43 * \brief Gestionnaire des modules.
44 */
45class AcceleratorMng
46: public TraceAccessor
47, public IAcceleratorMng
48{
49 public:
50
51 explicit AcceleratorMng(ITraceMng* tm)
52 : TraceAccessor(tm)
53 {
54 }
55
56 public:
57
58 void initialize(const AcceleratorRuntimeInitialisationInfo& runtime_info) override;
59 bool isInitialized() const override { return m_has_init; }
60 Runner* defaultRunner() override
61 {
62 CHECK_HAS_INIT();
63 return m_default_runner_ref.get();
64 }
65 RunQueue* defaultQueue() override
66 {
67 CHECK_HAS_INIT();
68 return m_default_queue_ref.get();
69 }
70 Runner runner() override
71 {
72 return m_default_runner;
73 }
74 RunQueue queue() override { return m_default_queue; }
75
76 private:
77
78 std::unique_ptr<Runner> m_default_runner_ref;
79 Runner m_default_runner;
80 Ref<RunQueue> m_default_queue_ref;
81 RunQueue m_default_queue;
82 bool m_has_init = false;
83};
84
85/*---------------------------------------------------------------------------*/
86/*---------------------------------------------------------------------------*/
87
88void AcceleratorMng::
89initialize(const AcceleratorRuntimeInitialisationInfo& runtime_info)
90{
91 if (m_has_init)
92 ARCANE_FATAL("Method initialize() has already been called");
93
94 arcaneInitializeRunner(m_default_runner,traceMng(),runtime_info);
95 m_has_init = true;
96
97 m_default_runner_ref = std::make_unique<Runner>(m_default_runner);
98 m_default_queue_ref = makeQueueRef(m_default_runner);
99 m_default_queue = *m_default_queue_ref.get();
100}
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT Ref<IAcceleratorMng>
106arcaneCreateAcceleratorMngRef(ITraceMng* tm)
107{
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114} // End namespace Arcane
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Gestion des références à une classe C++.
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.
InstanceType * get() const
Instance associée ou nullptr si aucune.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.