Arcane  v4.1.1.0
Documentation développeur
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 "arccore/common/accelerator/AcceleratorRuntimeInitialisationInfo.h"
24#include "arccore/common/accelerator/internal/AcceleratorCoreGlobalInternal.h"
25
26#include <memory>
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31#define CHECK_HAS_INIT() \
32 if (!m_has_init)\
33 ARCCORE_FATAL("Invalid call because IAcceleratorMng::initialized() has not been called")
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
38namespace Arcane::Accelerator
39{
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
46class AcceleratorMng
47: public TraceAccessor
48, public IAcceleratorMng
49{
50 public:
51
52 explicit AcceleratorMng(ITraceMng* tm)
53 : TraceAccessor(tm)
54 {
55 }
56
57 public:
58
59 void initialize(const AcceleratorRuntimeInitialisationInfo& runtime_info) override;
60 bool isInitialized() const override { return m_has_init; }
62 {
63 CHECK_HAS_INIT();
64 return m_default_runner_ref.get();
65 }
67 {
68 CHECK_HAS_INIT();
69 return m_default_queue_ref.get();
70 }
71 Runner runner() override
72 {
73 return m_default_runner;
74 }
75 RunQueue queue() override { return m_default_queue; }
76
77 private:
78
79 std::unique_ptr<Runner> m_default_runner_ref;
80 Runner m_default_runner;
81 Ref<RunQueue> m_default_queue_ref;
82 RunQueue m_default_queue;
83 bool m_has_init = false;
84};
85
86/*---------------------------------------------------------------------------*/
87/*---------------------------------------------------------------------------*/
88
91{
92 if (m_has_init)
93 ARCCORE_FATAL("Method initialize() has already been called");
94
95 Impl::arccoreInitializeRunner(m_default_runner,traceMng(),runtime_info);
96 m_has_init = true;
97
98 m_default_runner_ref = std::make_unique<Runner>(m_default_runner);
99 m_default_queue_ref = makeQueueRef(m_default_runner);
100 m_default_queue = *m_default_queue_ref.get();
101}
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
105
106extern "C++" ARCCORE_COMMON_EXPORT Ref<IAcceleratorMng>
107arccoreCreateAcceleratorMngRef(ITraceMng* tm)
108{
110}
111
112/*---------------------------------------------------------------------------*/
113/*---------------------------------------------------------------------------*/
114
115} // End namespace Arcane
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
#define ARCCORE_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.
Gestionnaire d'exécution pour accélérateur.
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.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.