14#include "arcane/utils/FatalErrorException.h"
16#include "arcane/accelerator/core/internal/AcceleratorCoreGlobalInternal.h"
17#include "arcane/accelerator/core/internal/IRunnerRuntime.h"
19#include "arcane/accelerator/core/DeviceInfoList.h"
20#include "arcane/accelerator/core/PointerAttribute.h"
21#include "arcane/accelerator/core/ViewBuildInfo.h"
22#include "arcane/accelerator/core/RunCommand.h"
23#include "arcane/accelerator/core/RunQueue.h"
50 bool global_is_using_cuda_runtime =
false;
51 impl::IRunnerRuntime* global_cuda_runqueue_runtime =
nullptr;
52 bool global_is_using_hip_runtime =
false;
53 impl::IRunnerRuntime* global_hip_runqueue_runtime =
nullptr;
54 bool global_is_using_sycl_runtime =
false;
55 impl::IRunnerRuntime* global_sycl_runqueue_runtime =
nullptr;
61extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
bool impl::
64 return global_is_using_cuda_runtime;
67extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
void impl::
68setUsingCUDARuntime(
bool v)
70 global_is_using_cuda_runtime = v;
77extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT impl::IRunnerRuntime* impl::
78getCUDARunQueueRuntime()
80 return global_cuda_runqueue_runtime;
84extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
void impl::
85setCUDARunQueueRuntime(IRunnerRuntime* v)
87 global_cuda_runqueue_runtime = v;
93extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
bool impl::
96 return global_is_using_hip_runtime;
99extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
void impl::
100setUsingHIPRuntime(
bool v)
102 global_is_using_hip_runtime = v;
109extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT impl::IRunnerRuntime* impl::
110getHIPRunQueueRuntime()
112 return global_hip_runqueue_runtime;
116extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
void impl::
117setHIPRunQueueRuntime(impl::IRunnerRuntime* v)
119 global_hip_runqueue_runtime = v;
125extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
bool impl::
128 return global_is_using_sycl_runtime;
131extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
void impl::
132setUsingSYCLRuntime(
bool v)
134 global_is_using_sycl_runtime = v;
140extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT impl::IRunnerRuntime* impl::
141getSYCLRunQueueRuntime()
143 return global_hip_runqueue_runtime;
146extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
void impl::
147setSYCLRunQueueRuntime(impl::IRunnerRuntime* v)
149 global_hip_runqueue_runtime = v;
156extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
160 switch (exec_policy) {
199 case ePointerMemoryType::Unregistered:
202 case ePointerMemoryType::Host:
205 case ePointerMemoryType::Device:
208 case ePointerMemoryType::Managed:
218extern "C++" impl::IRunnerRuntime* impl::
219getAcceleratorRunnerRuntime()
221 if (isUsingCUDARuntime())
222 return getCUDARunQueueRuntime();
223 if (isUsingHIPRuntime())
224 return getHIPRunQueueRuntime();
225 if (isUsingSYCLRuntime())
226 return getSYCLRunQueueRuntime();
234getPointerAccessibility(
eExecutionPolicy policy,
const void* ptr, PointerAttribute* ptr_attr)
241 IRunnerRuntime* r = getAcceleratorRunnerRuntime();
244 PointerAttribute attr;
245 r->getPointerAttribute(attr, ptr);
249 if (attr.isValid()) {
253 if (attr.memoryType() == ePointerMemoryType::Unregistered)
264void impl::RuntimeStaticInfo::
266 const char* name,
const TraceInfo& ti)
271 PointerAttribute ptr_attr;
274 auto s = String::format(
"Pointer 'addr={0}' ({1}) is not accessible "
275 "for this execution policy ({2}).\n PointerInfo: {3}",
276 ptr, name, policy, ptr_attr);
278 throw FatalErrorException(ti, s);
288 return impl::RuntimeStaticInfo::getPointerAccessibility(policy, ptr, ptr_attr);
291extern "C++" void impl::
295 return impl::RuntimeStaticInfo::checkPointerIsAcccessible(policy, ptr, name, ti);
304 o <<
"(mem_type=" << a.memoryType() <<
", ptr=" << a.originalPointer()
305 <<
", host_ptr=" << a.hostPointer()
306 <<
", device_ptr=" << a.devicePointer() <<
" device=" << a.device() <<
")";
315: m_queue_impl(queue._internalImpl())
323: m_queue_impl(queue->_internalImpl())
331: m_queue_impl(command._internalQueueImpl())
Identifiant d'un composant du système.
Int32 asInt32() const
Valeur numérique du device.
Informations sur une adresse mémoire.
Gestion d'une commande sur accélérateur.
File d'exécution pour un accélérateur.
ViewBuildInfo(const RunQueue &queue)
Créé instance associée a la file queue.
Espace de nom pour l'utilisation des accélérateurs.
ePointerAccessibility getPointerAccessibility(eExecutionPolicy policy, const void *ptr, PointerAttribute *ptr_attr)
Accessibilité de l'adresse ptr pour une politique d'exécutionpolicy.
std::ostream & operator<<(std::ostream &o, eExecutionPolicy exec_policy)
Affiche le nom de la politique d'exécution.
ePointerAccessibility
Informations d'accessibilité d'une adresse mémoire.
@ Unknown
Accessibilité inconnue.
ePointerMemoryType
Type de mémoire pour un pointeur.
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.
bool isAcceleratorPolicy(eExecutionPolicy exec_policy)
Indique si exec_policy correspond à un accélérateur.