14#include "arcane/accelerator/core/AcceleratorRuntimeInitialisationInfo.h"
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/String.h"
18#include "arcane/utils/Property.h"
21#include "arcane/accelerator/core/Runner.h"
22#include "arcane/accelerator/core/DeviceId.h"
28namespace Arcane::Accelerator
37 bool m_is_using_accelerator_runtime =
false;
38 String m_accelerator_runtime;
45template<
typename V>
void AcceleratorRuntimeInitialisationInfo::
46_applyPropertyVisitor(V& p)
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); });
64AcceleratorRuntimeInitialisationInfo::
65AcceleratorRuntimeInitialisationInfo()
73AcceleratorRuntimeInitialisationInfo::
74AcceleratorRuntimeInitialisationInfo(
const AcceleratorRuntimeInitialisationInfo& rhs)
75: m_p(new Impl(*rhs.m_p))
82AcceleratorRuntimeInitialisationInfo& AcceleratorRuntimeInitialisationInfo::
83operator=(
const AcceleratorRuntimeInitialisationInfo& rhs)
87 m_p =
new Impl(*(rhs.m_p));
95AcceleratorRuntimeInitialisationInfo::
96~AcceleratorRuntimeInitialisationInfo()
107bool AcceleratorRuntimeInitialisationInfo::
108isUsingAcceleratorRuntime()
const
110 return m_p->m_is_using_accelerator_runtime;
116 m_p->m_is_using_accelerator_runtime = v;
122String AcceleratorRuntimeInitialisationInfo::
123acceleratorRuntime()
const
125 return m_p->m_accelerator_runtime;
131 m_p->m_accelerator_runtime = v;
142 return m_p->m_device_id;
148 m_p->m_device_id = v;
157 String a = acceleratorRuntime();
159 return eExecutionPolicy::CUDA;
161 return eExecutionPolicy::HIP;
163 return eExecutionPolicy::SYCL;
165 return eExecutionPolicy::None;
167 return eExecutionPolicy::Thread;
168 return eExecutionPolicy::Sequential;
174extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
void
175arcaneInitializeRunner(Accelerator::Runner& runner,
ITraceMng* tm,
178 using namespace Accelerator;
179 String accelerator_runtime = acc_info.acceleratorRuntime();
181 if (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();
191 tm->
info() <<
"Using accelerator runtime=" << policy;
192 runner.initialize(policy);
199ARCANE_REGISTER_PROPERTY_CLASS(AcceleratorRuntimeInitialisationInfo,());
#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.
Informations pour l'initialisation des accélérateurs.
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.
DeviceId deviceId() const
Device associé au Runner associé
void setDeviceId(DeviceId name)
Positionne le device associé au Runner associé.
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.
constexpr bool empty() const ARCCORE_NOEXCEPT
Vrai si la chaîne est nulle ou vide.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
static bool isActive()
Indique si les tâches sont actives. Les tâches sont actives si une implémentation est disponible et s...