Arcane  v3.15.0.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"
20
21#include "arcane/accelerator/core/Runner.h"
22#include "arcane/accelerator/core/DeviceId.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane::Accelerator
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
35{
36 public:
37 bool m_is_using_accelerator_runtime = false;
38 String m_accelerator_runtime;
39 DeviceId m_device_id;
40};
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
44
45template<typename V> void AcceleratorRuntimeInitialisationInfo::
46_applyPropertyVisitor(V& p)
47{
48 auto b = p.builder();
49 p << b.addString("AcceleratorRuntime")
50 .addDescription("Name of the accelerator runtime (currently only 'cuda', 'hip' or 'sycl') to use")
51 .addCommandLineArgument("AcceleratorRuntime")
52 .addGetter([](auto a) { return a.x.acceleratorRuntime(); })
53 .addSetter([](auto a) { a.x.setAcceleratorRuntime(a.v); });
54 p << b.addBool("UseAccelerator")
55 .addDescription("activate/deactivate accelerator runtime")
56 .addCommandLineArgument("UseAccelerator")
57 .addGetter([](auto a) { return a.x.isUsingAcceleratorRuntime(); })
58 .addSetter([](auto a) { a.x.setIsUsingAcceleratorRuntime(a.v); });
59}
60
61/*---------------------------------------------------------------------------*/
62/*---------------------------------------------------------------------------*/
63
64AcceleratorRuntimeInitialisationInfo::
65AcceleratorRuntimeInitialisationInfo()
66: m_p(new Impl())
67{
68}
69
70/*---------------------------------------------------------------------------*/
71/*---------------------------------------------------------------------------*/
72
73AcceleratorRuntimeInitialisationInfo::
74AcceleratorRuntimeInitialisationInfo(const AcceleratorRuntimeInitialisationInfo& rhs)
75: m_p(new Impl(*rhs.m_p))
76{
77}
78
79/*---------------------------------------------------------------------------*/
80/*---------------------------------------------------------------------------*/
81
82AcceleratorRuntimeInitialisationInfo& AcceleratorRuntimeInitialisationInfo::
83operator=(const AcceleratorRuntimeInitialisationInfo& rhs)
84{
85 if (&rhs!=this){
86 delete m_p;
87 m_p = new Impl(*(rhs.m_p));
88 }
89 return (*this);
90}
91
92/*---------------------------------------------------------------------------*/
93/*---------------------------------------------------------------------------*/
94
95AcceleratorRuntimeInitialisationInfo::
96~AcceleratorRuntimeInitialisationInfo()
97{
98 delete m_p;
99}
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
106
107bool AcceleratorRuntimeInitialisationInfo::
108isUsingAcceleratorRuntime() const
109{
110 return m_p->m_is_using_accelerator_runtime;
111}
112
115{
116 m_p->m_is_using_accelerator_runtime = v;
117}
118
119/*---------------------------------------------------------------------------*/
120/*---------------------------------------------------------------------------*/
121
122String AcceleratorRuntimeInitialisationInfo::
123acceleratorRuntime() const
124{
125 return m_p->m_accelerator_runtime;
126}
127
130{
131 m_p->m_accelerator_runtime = v;
132 if (!v.empty())
134}
135
136/*---------------------------------------------------------------------------*/
137/*---------------------------------------------------------------------------*/
138
140deviceId() const
141{
142 return m_p->m_device_id;
143}
144
147{
148 m_p->m_device_id = v;
149}
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
153
155executionPolicy() const
156{
157 String a = acceleratorRuntime();
158 if (a=="cuda")
160 if (a=="hip")
162 if (a=="sycl")
164 if (!a.null())
169}
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173
174extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
177{
178 using namespace Accelerator;
179 String accelerator_runtime = acc_info.acceleratorRuntime();
180 eExecutionPolicy policy = acc_info.executionPolicy();
182 ARCANE_FATAL("Invalid policy eExecutionPolicy::None");
183 tm->info() << "AcceleratorRuntime=" << accelerator_runtime;
184 tm->info() << "DefaultDataAllocator MemoryResource=" << MemoryUtils::getDefaultDataMemoryResource();
185 if (impl::isAcceleratorPolicy(policy)){
186 tm->info() << "Using accelerator runtime=" << policy << " device=" << acc_info.deviceId();
187 runner.initialize(policy,acc_info.deviceId());
188 runner.setAsCurrentDevice();
189 }
190 else{
191 tm->info() << "Using accelerator runtime=" << policy;
192 runner.initialize(policy);
193 }
194}
195
196/*---------------------------------------------------------------------------*/
197/*---------------------------------------------------------------------------*/
198
199ARCANE_REGISTER_PROPERTY_CLASS(AcceleratorRuntimeInitialisationInfo,());
200
201/*---------------------------------------------------------------------------*/
202/*---------------------------------------------------------------------------*/
203
204} // End namespace Arcane::Accelerator
205
206/*---------------------------------------------------------------------------*/
207/*---------------------------------------------------------------------------*/
208
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classes, Types et macros pour gérer la concurrence.
Fonctions de gestion mémoire et des allocateurs.
void setAcceleratorRuntime(StringView name)
Nom du runtime utilisé (pour l'instant uniquement 'cuda', 'hip' ou 'sycl')
eExecutionPolicy executionPolicy() const
Politique d'exécution associée à acceleratorRuntime()
void setIsUsingAcceleratorRuntime(bool v)
Indique si on utilise un runtime accélérateur.
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:68
void initialize(eExecutionPolicy v)
Initialise l'instance. Cette méthode ne doit être appelée qu'une seule fois.
Definition Runner.cc:357
void setAsCurrentDevice()
Positionne le device associé à cette instance comme le device par défaut du contexte.
Definition Runner.cc:414
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
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.
eMemoryResource getDefaultDataMemoryResource()
Ressource mémoire utilisée par l'allocateur par défaut pour les données.