Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
AcceleratorRuntimeInitialisationInfo.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/* AcceleratorRuntimeInitialisationInfo.cc (C) 2000-2024 */
9/* */
10/* Informations pour l'initialisation du runtime des accélérateurs. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/accelerator/core/AcceleratorRuntimeInitialisationInfo.h"
15
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/String.h"
18#include "arcane/utils/Property.h"
19
20#include "arcane/accelerator/core/Runner.h"
21#include "arcane/accelerator/core/DeviceId.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane::Accelerator
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
34{
35 public:
36 bool m_is_using_accelerator_runtime = false;
37 String m_accelerator_runtime;
38 DeviceId m_device_id;
39};
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
43
44template<typename V> void AcceleratorRuntimeInitialisationInfo::
45_applyPropertyVisitor(V& p)
46{
47 auto b = p.builder();
48 p << b.addString("AcceleratorRuntime")
49 .addDescription("Name of the accelerator runtime (currently only 'cuda', 'hip' or 'sycl') to use")
50 .addCommandLineArgument("AcceleratorRuntime")
51 .addGetter([](auto a) { return a.x.acceleratorRuntime(); })
52 .addSetter([](auto a) { a.x.setAcceleratorRuntime(a.v); });
53}
54
55/*---------------------------------------------------------------------------*/
56/*---------------------------------------------------------------------------*/
57
58AcceleratorRuntimeInitialisationInfo::
59AcceleratorRuntimeInitialisationInfo()
60: m_p(new Impl())
61{
62}
63
64/*---------------------------------------------------------------------------*/
65/*---------------------------------------------------------------------------*/
66
67AcceleratorRuntimeInitialisationInfo::
68AcceleratorRuntimeInitialisationInfo(const AcceleratorRuntimeInitialisationInfo& rhs)
69: m_p(new Impl(*rhs.m_p))
70{
71}
72
73/*---------------------------------------------------------------------------*/
74/*---------------------------------------------------------------------------*/
75
76AcceleratorRuntimeInitialisationInfo& AcceleratorRuntimeInitialisationInfo::
77operator=(const AcceleratorRuntimeInitialisationInfo& rhs)
78{
79 if (&rhs!=this){
80 delete m_p;
81 m_p = new Impl(*(rhs.m_p));
82 }
83 return (*this);
84}
85
86/*---------------------------------------------------------------------------*/
87/*---------------------------------------------------------------------------*/
88
89AcceleratorRuntimeInitialisationInfo::
90~AcceleratorRuntimeInitialisationInfo()
91{
92 delete m_p;
93}
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97
98/*---------------------------------------------------------------------------*/
99/*---------------------------------------------------------------------------*/
100
101bool AcceleratorRuntimeInitialisationInfo::
102isUsingAcceleratorRuntime() const
103{
104 return m_p->m_is_using_accelerator_runtime;
105}
106
107void AcceleratorRuntimeInitialisationInfo::
108setIsUsingAcceleratorRuntime(bool v)
109{
110 m_p->m_is_using_accelerator_runtime = v;
111}
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
116String AcceleratorRuntimeInitialisationInfo::
117acceleratorRuntime() const
118{
119 return m_p->m_accelerator_runtime;
120}
121
124{
125 m_p->m_accelerator_runtime = v;
126 if (!v.empty())
127 setIsUsingAcceleratorRuntime(true);
128}
129
130/*---------------------------------------------------------------------------*/
131/*---------------------------------------------------------------------------*/
132
134deviceId() const
135{
136 return m_p->m_device_id;
137}
138
141{
142 m_p->m_device_id = v;
143}
144
145/*---------------------------------------------------------------------------*/
146/*---------------------------------------------------------------------------*/
147
149executionPolicy() const
150{
151 String a = acceleratorRuntime();
152 if (a=="cuda")
154 if (a=="hip")
156 if (a=="sycl")
158 if (!a.null())
163}
164
165/*---------------------------------------------------------------------------*/
166/*---------------------------------------------------------------------------*/
167
168extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
171{
172 using namespace Accelerator;
173 String accelerator_runtime = acc_info.acceleratorRuntime();
174 eExecutionPolicy policy = acc_info.executionPolicy();
175 if (policy==eExecutionPolicy::None)
176 ARCANE_FATAL("Invalid policy eExecutionPolicy::None");
177 tm->info() << "AcceleratorRuntime=" << accelerator_runtime;
178 if (impl::isAcceleratorPolicy(policy)){
179 tm->info() << "Using accelerator runtime=" << policy << " device=" << acc_info.deviceId();
180 runner.initialize(policy,acc_info.deviceId());
181 runner.setAsCurrentDevice();
182 }
183 else{
184 tm->info() << "Using accelerator runtime=" << policy;
185 runner.initialize(policy);
186 }
187}
188
189/*---------------------------------------------------------------------------*/
190/*---------------------------------------------------------------------------*/
191
192ARCANE_REGISTER_PROPERTY_CLASS(AcceleratorRuntimeInitialisationInfo,());
193
194/*---------------------------------------------------------------------------*/
195/*---------------------------------------------------------------------------*/
196
197} // End namespace Arcane::Accelerator
198
199/*---------------------------------------------------------------------------*/
200/*---------------------------------------------------------------------------*/
201
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classes, Types et macros pour gérer la concurrence.
void setAcceleratorRuntime(StringView name)
Nom du runtime utilisé (pour l'instant uniquement 'cuda')
eExecutionPolicy executionPolicy() const
Politique d'exécution associée à acceleratorRuntime()
void setDeviceId(DeviceId name)
Positionne le device associé au Runner associé.
Identifiant d'un composant du système.
Definition DeviceId.h:33
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:53
void initialize(eExecutionPolicy v)
Initialise l'instance. Cette méthode ne doit être appelée qu'une seule fois.
Definition Runner.cc:354
void setAsCurrentDevice()
Positionne le device associé à cette instance comme le device par défaut du contexte.
Definition Runner.cc:411
static bool isActive()
Indique si les tâches sont actives. Les tâches sont actives si une implémentation est disponible et s...
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Vue sur une chaîne de caractères UTF-8.
Definition StringView.h:47
constexpr bool empty() const ARCCORE_NOEXCEPT
Vrai si la chaîne est nulle ou vide.
Definition StringView.h:105
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Definition String.cc:304
Espace de nom pour l'utilisation des accélérateurs.
void arcaneInitializeRunner(Accelerator::Runner &runner, ITraceMng *tm, const AcceleratorRuntimeInitialisationInfo &acc_info)
Initialise runner avec les informations de acc_info.
eExecutionPolicy
Politique d'exécution pour un Runner.
@ SYCL
Politique d'exécution utilisant l'environnement SYCL.
@ HIP
Politique d'exécution utilisant l'environnement HIP.
@ None
Aucune politique d'exécution.
@ CUDA
Politique d'exécution utilisant l'environnement CUDA.
@ Sequential
Politique d'exécution séquentielle.
@ Thread
Politique d'exécution multi-thread.