Arcane  v3.14.10.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-2024 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-2024 */
9/* */
10/* Implémentation de 'IAcceleratorMng' */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/accelerator/core/IAcceleratorMng.h"
15
16#include "arcane/utils/TraceAccessor.h"
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/Ref.h"
19#include "arcane/utils/ScopedPtr.h"
20
21#include "arcane/accelerator/core/Runner.h"
22#include "arcane/accelerator/core/RunQueue.h"
23#include "arcane/accelerator/core/AcceleratorRuntimeInitialisationInfo.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28#define CHECK_HAS_INIT() \
29 if (!m_has_init)\
30 ARCANE_FATAL("Invalid call because IAcceleratorMng::initialized() has not been called")
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35namespace Arcane::Accelerator
36{
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40/*!
41 * \brief Gestionnaire des modules.
42 */
44: public TraceAccessor
45, public IAcceleratorMng
46{
47 public:
48
49 explicit AcceleratorMng(ITraceMng* tm)
50 : TraceAccessor(tm)
51 {
52 }
53
54 public:
55
56 void initialize(const AcceleratorRuntimeInitialisationInfo& runtime_info) override;
57 bool isInitialized() const override { return m_has_init; }
59 {
60 CHECK_HAS_INIT();
61 return m_default_runner_ref.get();
62 }
64 {
65 CHECK_HAS_INIT();
66 return m_default_queue_ref.get();
67 }
68 Runner runner() override
69 {
70 return m_default_runner;
71 }
72 RunQueue queue() override { return m_default_queue; }
73
74 private:
75
76 ScopedPtrT<Runner> m_default_runner_ref;
77 Runner m_default_runner;
78 Ref<RunQueue> m_default_queue_ref;
79 RunQueue m_default_queue;
80 bool m_has_init = false;
81};
82
83/*---------------------------------------------------------------------------*/
84/*---------------------------------------------------------------------------*/
85
88{
89 if (m_has_init)
90 ARCANE_FATAL("Method initialize() has already been called");
91
92 arcaneInitializeRunner(m_default_runner,traceMng(),runtime_info);
93 m_has_init = true;
94
95 m_default_runner_ref = new Runner(m_default_runner);
96 m_default_queue_ref = makeQueueRef(m_default_runner);
97 m_default_queue = *m_default_queue_ref.get();
98}
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
102
103extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT Ref<IAcceleratorMng>
104arcaneCreateAcceleratorMngRef(ITraceMng* tm)
105{
106 return makeRef<IAcceleratorMng>(new AcceleratorMng(tm));
107}
108
109/*---------------------------------------------------------------------------*/
110/*---------------------------------------------------------------------------*/
111
112} // End namespace Arcane
113
114/*---------------------------------------------------------------------------*/
115/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
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:53
Encapsulation d'un pointeur qui se détruit automatiquement.
Definition ScopedPtr.h:44
Interface du gestionnaire de traces.
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.