14#include "arcane/utils/NotImplementedException.h"
15#include "arcane/utils/MemoryView.h"
16#include "arcane/utils/PlatformUtils.h"
17#include "arcane/utils/FatalErrorException.h"
19#include "arcane/accelerator/core/internal/IRunnerRuntime.h"
20#include "arcane/accelerator/core/internal/IRunQueueStream.h"
21#include "arcane/accelerator/core/internal/IRunQueueEventImpl.h"
22#include "arcane/accelerator/core/Memory.h"
23#include "arcane/accelerator/core/DeviceInfoList.h"
24#include "arcane/accelerator/core/DeviceMemoryInfo.h"
25#include "arcane/accelerator/core/NativeStream.h"
32namespace Arcane::Accelerator::impl
38class ARCANE_ACCELERATOR_CORE_EXPORT HostRunQueueStream
39:
public IRunQueueStream
43 HostRunQueueStream(IRunnerRuntime* runtime)
49 void notifyBeginLaunchKernel(RunCommandImpl&)
override {
return m_runtime->notifyBeginLaunchKernel(); }
50 void notifyEndLaunchKernel(RunCommandImpl&)
override {
return m_runtime->notifyEndLaunchKernel(); }
51 void barrier()
override {
return m_runtime->barrier(); }
54 args.destination().copyHost(args.source());
58 bool _barrierNoException()
override {
return false; }
62 IRunnerRuntime* m_runtime;
68class ARCANE_ACCELERATOR_CORE_EXPORT HostRunQueueEvent
69:
public IRunQueueEventImpl
73 explicit HostRunQueueEvent(
bool has_timer)
74 : m_has_timer(has_timer)
79 void recordQueue(IRunQueueStream*)
final
85 void waitForEvent(IRunQueueStream*)
final {}
86 bool hasPendingWork()
final {
return false; }
87 Int64 elapsedTime(IRunQueueEventImpl* start_event)
final
90 auto* true_start_event =
static_cast<HostRunQueueEvent*
>(start_event);
91 if (!m_has_timer || !true_start_event->m_has_timer)
93 double diff_time = m_recorded_time - true_start_event->m_recorded_time;
94 Int64 diff_as_int64 =
static_cast<Int64>(diff_time * 1.0e9);
100 bool m_has_timer =
false;
101 double m_recorded_time = 0.0;
107class ARCANE_ACCELERATOR_CORE_EXPORT CommonRunnerRuntime
108:
public IRunnerRuntime
112 CommonRunnerRuntime()
116 d.setName(
"HostDevice");
117 m_device_info_list.addDevice(d);
122 void notifyBeginLaunchKernel()
final {}
123 void notifyEndLaunchKernel()
final {}
124 void barrier()
final {}
126 IRunQueueEventImpl* createEventImpl()
final {
return new HostRunQueueEvent(
false); }
127 IRunQueueEventImpl* createEventImplWithTimer()
final {
return new HostRunQueueEvent(
true); }
130 void setCurrentDevice(
DeviceId)
final {}
131 const IDeviceInfoList* deviceInfoList()
final {
return &m_device_info_list; }
132 void getPointerAttribute(
PointerAttribute& attribute,
const void* ptr)
final
134 _fillPointerAttribute(attribute, ptr);
151:
public CommonRunnerRuntime
160:
public CommonRunnerRuntime
177extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT IRunnerRuntime*
178getSequentialRunQueueRuntime()
180 return &global_sequential_runqueue_runtime;
184extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT IRunnerRuntime*
185getThreadRunQueueRuntime()
187 return &global_thread_runqueue_runtime;
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Identifiant d'un composant du système.
Information sur un device.
Information mémoire d'un accélérateur.
Interface d'une liste de devices.
Arguments pour la copie mémoire.
Arguments pour le préfetching mémoire.
Informations sur une adresse mémoire.
Informations pour créer une RunQueue.
Interface d'une liste de devices.
Type opaque pour encapsuler une 'stream' native.
eMemoryAdvice
Conseils pour la gestion mémoire.
eExecutionPolicy
Politique d'exécution pour un Runner.
@ Sequential
Politique d'exécution séquentielle.
@ Thread
Politique d'exécution multi-thread.
std::int64_t Int64
Type entier signé sur 64 bits.