Arcane  v3.14.10.0
Documentation développeur
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();
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
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
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.
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.
TraceMessage info() const
Flot pour un message d'information.
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.