Arcane  4.1.12.0
User documentation
Loading...
Searching...
No Matches
AcceleratorMng.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* Implementation of '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/*---------------------------------------------------------------------------*/
43
44/*!
45 * \brief Module Manager.
46 */
47class AcceleratorMng
48: public TraceAccessor
49, public IAcceleratorMng
50{
51 public:
52
53 explicit AcceleratorMng(ITraceMng* tm)
54 : TraceAccessor(tm)
55 {
56 }
57
58 public:
59
60 void initialize(const AcceleratorRuntimeInitialisationInfo& runtime_info) override;
61 bool isInitialized() const override { return m_has_init; }
63 {
64 CHECK_HAS_INIT();
65 return m_default_runner_ref.get();
66 }
68 {
69 CHECK_HAS_INIT();
70 return m_default_queue_ref.get();
71 }
72 Runner runner() override
73 {
74 return m_default_runner;
75 }
76 RunQueue queue() override { return m_default_queue; }
77
78 private:
79
80 std::unique_ptr<Runner> m_default_runner_ref;
81 Runner m_default_runner;
82 Ref<RunQueue> m_default_queue_ref;
83 RunQueue m_default_queue;
84 bool m_has_init = false;
85};
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
89
92{
93 if (m_has_init)
94 ARCCORE_FATAL("Method initialize() has already been called");
95
96 Impl::arccoreInitializeRunner(m_default_runner, traceMng(), runtime_info);
97 m_has_init = true;
98
99 m_default_runner_ref = std::make_unique<Runner>(m_default_runner);
100 m_default_queue_ref = makeQueueRef(m_default_runner);
101 m_default_queue = *m_default_queue_ref.get();
102}
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
106
107extern "C++" ARCCORE_COMMON_EXPORT Ref<IAcceleratorMng>
108arccoreCreateAcceleratorMngRef(ITraceMng* tm)
109{
111}
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
116} // namespace Arcane::Accelerator
117
118/*---------------------------------------------------------------------------*/
119/*---------------------------------------------------------------------------*/
#define ARCCORE_FATAL(...)
Macro throwing a FatalErrorException.
Management of references to a C++ class.
Runner * defaultRunner() override
Default runner.
RunQueue * defaultQueue() override
Default run queue.
void initialize(const AcceleratorRuntimeInitialisationInfo &runtime_info) override
Initializes the instance.
bool isInitialized() const override
Indicates if the instance has been initialized via the call to initialize().
Runner runner() override
Runner associated with the instance.
RunQueue queue() override
Run queue associated with the instance.
Reference to an instance.
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.
ITraceMng * traceMng() const
Trace manager.
Namespace for accelerator usage.
Ref< RunQueue > makeQueueRef(const Runner &runner)
Creates a reference to a queue with the default execution policy of runner.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Creates a reference on a pointer.