14#include "arccore/base/FatalErrorException.h"
16#include "arccore/common/accelerator/internal/AcceleratorCoreGlobalInternal.h"
17#include "arccore/common/accelerator/internal/IRunnerRuntime.h"
19#include "arccore/common/accelerator/DeviceInfoList.h"
20#include "arccore/common/accelerator/PointerAttribute.h"
21#include "arccore/common/accelerator/ViewBuildInfo.h"
22#include "arccore/common/accelerator/RunCommand.h"
23#include "arccore/common/accelerator/RunQueue.h"
26#include "arccore/common/accelerator/IAcceleratorMng.h"
53 bool global_is_using_cuda_runtime =
false;
54 impl::IRunnerRuntime* global_cuda_runqueue_runtime =
nullptr;
55 bool global_is_using_hip_runtime =
false;
56 impl::IRunnerRuntime* global_hip_runqueue_runtime =
nullptr;
57 bool global_is_using_sycl_runtime =
false;
58 impl::IRunnerRuntime* global_sycl_runqueue_runtime =
nullptr;
64extern "C++" ARCCORE_COMMON_EXPORT
bool impl::
67 return global_is_using_cuda_runtime;
70extern "C++" ARCCORE_COMMON_EXPORT
void impl::
71setUsingCUDARuntime(
bool v)
73 global_is_using_cuda_runtime = v;
80extern "C++" ARCCORE_COMMON_EXPORT impl::IRunnerRuntime* impl::
81getCUDARunQueueRuntime()
83 return global_cuda_runqueue_runtime;
87extern "C++" ARCCORE_COMMON_EXPORT
void impl::
88setCUDARunQueueRuntime(IRunnerRuntime* v)
90 global_cuda_runqueue_runtime = v;
96extern "C++" ARCCORE_COMMON_EXPORT
bool impl::
99 return global_is_using_hip_runtime;
102extern "C++" ARCCORE_COMMON_EXPORT
void impl::
103setUsingHIPRuntime(
bool v)
105 global_is_using_hip_runtime = v;
112extern "C++" ARCCORE_COMMON_EXPORT impl::IRunnerRuntime* impl::
113getHIPRunQueueRuntime()
115 return global_hip_runqueue_runtime;
119extern "C++" ARCCORE_COMMON_EXPORT
void impl::
120setHIPRunQueueRuntime(impl::IRunnerRuntime* v)
122 global_hip_runqueue_runtime = v;
128extern "C++" ARCCORE_COMMON_EXPORT
bool impl::
131 return global_is_using_sycl_runtime;
134extern "C++" ARCCORE_COMMON_EXPORT
void impl::
135setUsingSYCLRuntime(
bool v)
137 global_is_using_sycl_runtime = v;
143extern "C++" ARCCORE_COMMON_EXPORT impl::IRunnerRuntime* impl::
144getSYCLRunQueueRuntime()
146 return global_hip_runqueue_runtime;
149extern "C++" ARCCORE_COMMON_EXPORT
void impl::
150setSYCLRunQueueRuntime(impl::IRunnerRuntime* v)
152 global_hip_runqueue_runtime = v;
159extern "C++" ARCCORE_COMMON_EXPORT
163 switch (exec_policy) {
202 case ePointerMemoryType::Unregistered:
205 case ePointerMemoryType::Host:
208 case ePointerMemoryType::Device:
211 case ePointerMemoryType::Managed:
221extern "C++" impl::IRunnerRuntime* impl::
222getAcceleratorRunnerRuntime()
224 if (isUsingCUDARuntime())
225 return getCUDARunQueueRuntime();
226 if (isUsingHIPRuntime())
227 return getHIPRunQueueRuntime();
228 if (isUsingSYCLRuntime())
229 return getSYCLRunQueueRuntime();
237getPointerAccessibility(
eExecutionPolicy policy,
const void* ptr, PointerAttribute* ptr_attr)
244 IRunnerRuntime* r = getAcceleratorRunnerRuntime();
247 PointerAttribute attr;
248 r->getPointerAttribute(attr, ptr);
252 if (attr.isValid()) {
256 if (attr.memoryType() == ePointerMemoryType::Unregistered)
267void impl::RuntimeStaticInfo::
269 const char* name,
const TraceInfo& ti)
277 auto s = String::format(
"Pointer 'addr={0}' ({1}) is not accessible "
278 "for this execution policy ({2}).\n PointerInfo: {3}",
279 ptr, name, policy, ptr_attr);
281 throw FatalErrorException(ti, s);
291 return impl::RuntimeStaticInfo::getPointerAccessibility(policy, ptr, ptr_attr);
298 return impl::RuntimeStaticInfo::checkPointerIsAcccessible(policy, ptr, name, ti);
305printUUID(std::ostream& o,
char bytes[16])
307 static const char hexa_chars[16] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'a',
'b',
'c',
'd',
'e',
'f' };
309 for (
int i = 0; i < 16; ++i) {
310 o << hexa_chars[(bytes[i] >> 4) & 0xf];
311 o << hexa_chars[bytes[i] & 0xf];
312 if (i == 4 || i == 6 || i == 8 || i == 10)
323 o <<
"(mem_type=" << a.memoryType() <<
", ptr=" << a.originalPointer()
324 <<
", host_ptr=" << a.hostPointer()
325 <<
", device_ptr=" << a.devicePointer() <<
" device=" << a.device() <<
")";
334: m_queue_impl(queue._internalImpl())
342: m_queue_impl(queue->_internalImpl())
350: 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.
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.
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.