14#include "arcane/accelerator/hip/HipAccelerator.h"
16#include "arcane/utils/PlatformUtils.h"
17#include "arcane/utils/Array.h"
18#include "arcane/utils/TraceInfo.h"
19#include "arcane/utils/FatalErrorException.h"
20#include "arcane/utils/NotImplementedException.h"
21#include "arcane/utils/IMemoryRessourceMng.h"
22#include "arcane/utils/OStringStream.h"
23#include "arcane/utils/internal/IMemoryRessourceMngInternal.h"
25#include "arcane/accelerator/core/RunQueueBuildInfo.h"
26#include "arcane/accelerator/core/Memory.h"
27#include "arcane/accelerator/core/internal/IRunnerRuntime.h"
28#include "arcane/accelerator/core/internal/RegisterRuntimeInfo.h"
29#include "arcane/accelerator/core/internal/IRunQueueStream.h"
30#include "arcane/accelerator/core/internal/IRunQueueEventImpl.h"
31#include "arcane/accelerator/core/DeviceInfoList.h"
32#include "arcane/accelerator/core/RunQueue.h"
33#include "arcane/accelerator/core/internal/RunCommandImpl.h"
37#ifdef ARCANE_HAS_ROCTX
43namespace Arcane::Accelerator::Hip
60 int priority =
bi.priority();
73#ifdef ARCANE_HAS_ROCTX
74 auto kname =
c.kernelName();
80 return m_runtime->notifyBeginLaunchKernel();
84#ifdef ARCANE_HAS_ROCTX
87 return m_runtime->notifyEndLaunchKernel();
99 auto r =
hipMemcpyAsync(args.destination().data(), args.source().data(),
107 auto src = args.source().bytes();
121 return &m_hip_stream;
205 void notifyBeginLaunchKernel()
override
207 ++m_nb_kernel_launched;
209 std::cout <<
"BEGIN HIP KERNEL!\n";
211 void notifyEndLaunchKernel()
override
215 std::cout <<
"END HIP KERNEL!\n";
217 void barrier()
override
239 auto v = buffer.bytes();
240 const void*
ptr = v.data();
241 size_t count = v.size();
266 auto v = buffer.bytes();
267 const void*
ptr = v.data();
268 size_t count = v.size();
295 ARCANE_FATAL(
"Device {0} is not an accelerator device",
id);
298 const IDeviceInfoList* deviceInfoList()
override {
return &m_device_info_list; }
304 auto mem_type = ePointerMemoryType::Unregistered;
309#if HIP_VERSION_MAJOR >= 6
315 mem_type = ePointerMemoryType::Managed;
317 mem_type = ePointerMemoryType::Host;
319 mem_type = ePointerMemoryType::Device;
327 ptr, pa.devicePointer, pa.hostPointer);
332#ifdef ARCANE_HAS_ROCTX
336 void popProfilerRange()
override
338#ifdef ARCANE_HAS_ROCTX
345 void fillDevices(
bool is_verbose);
349 Int64 m_nb_kernel_launched = 0;
350 bool m_is_verbose =
false;
357void HipRunnerRuntime::
358fillDevices(
bool is_verbose)
362 std::ostream&
omain = std::cout;
364 omain <<
"ArcaneHIP: Initialize Arcane HIP runtime nb_available_device=" <<
nb_device <<
"\n";
367 std::ostream& o =
ostr.stream();
375 o <<
"\nDevice " << i <<
" name=" <<
dp.name <<
"\n";
376 o <<
" computeCapability = " <<
dp.major <<
"." <<
dp.minor <<
"\n";
377 o <<
" totalGlobalMem = " <<
dp.totalGlobalMem <<
"\n";
378 o <<
" sharedMemPerBlock = " <<
dp.sharedMemPerBlock <<
"\n";
379 o <<
" regsPerBlock = " <<
dp.regsPerBlock <<
"\n";
380 o <<
" warpSize = " <<
dp.warpSize <<
"\n";
381 o <<
" memPitch = " <<
dp.memPitch <<
"\n";
382 o <<
" maxThreadsPerBlock = " <<
dp.maxThreadsPerBlock <<
"\n";
383 o <<
" totalConstMem = " <<
dp.totalConstMem <<
"\n";
384 o <<
" clockRate = " <<
dp.clockRate <<
"\n";
386 o <<
" multiProcessorCount = " <<
dp.multiProcessorCount <<
"\n";
387 o <<
" kernelExecTimeoutEnabled = " <<
dp.kernelExecTimeoutEnabled <<
"\n";
388 o <<
" integrated = " <<
dp.integrated <<
"\n";
389 o <<
" canMapHostMemory = " <<
dp.canMapHostMemory <<
"\n";
390 o <<
" computeMode = " <<
dp.computeMode <<
"\n";
391 o <<
" maxThreadsDim = " <<
dp.maxThreadsDim[0] <<
" " <<
dp.maxThreadsDim[1]
392 <<
" " <<
dp.maxThreadsDim[2] <<
"\n";
393 o <<
" maxGridSize = " <<
dp.maxGridSize[0] <<
" " <<
dp.maxGridSize[1]
394 <<
" " <<
dp.maxGridSize[2] <<
"\n";
399 omain << description;
446extern "C" ARCANE_EXPORT
void
450 using namespace Arcane::Accelerator::Hip;
451 Arcane::Accelerator::impl::setUsingHIPRuntime(
true);
455 mrm->setIsAccelerator(
true);
#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.
bool isHost() const
Indique si l'instance est associée à l'hôte.
Int32 asInt32() const
Valeur numérique du device.
Information sur un device.
void copy(ConstMemoryView from, eMemoryRessource from_mem, MutableMemoryView to, eMemoryRessource to_mem, const RunQueue *queue) override
Copie les données de from vers to avec la queue queue.
void notifyBeginLaunchKernel(impl::RunCommandImpl &c) override
Notification avant le lancement de la commande.
bool _barrierNoException() override
Barrière sans exception. Retourne true en cas d'erreur.
void barrier() override
Bloque jusqu'à ce que toutes les actions associées à cette file soient terminées.
void notifyEndLaunchKernel(impl::RunCommandImpl &) override
Notification de fin de lancement de la commande.
void prefetchMemory(const MemoryPrefetchArgs &args) override
Effectue un pré-chargement d'une zone mémoire.
void * _internalImpl() override
Pointeur sur la structure interne dépendante de l'implémentation.
void copyMemory(const MemoryCopyArgs &args) override
Effectue une copie entre deux zones mémoire.
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 initialiser le runtime accélérateur.
Informations pour créer une RunQueue.
File d'exécution pour un accélérateur.
bool isAsync() const
Indique si la file d'exécution est asynchrone.
void copyMemory(const MemoryCopyArgs &args) const
Copie des informations entre deux zones mémoires.
Interface d'une liste de devices.
Interface de l'implémentation d'un évènement.
Interface d'un flux d'exécution pour une RunQueue.
Interface du runtime associé à une RunQueue.
Implémentation d'une commande pour accélérateur.
Interface pour les copies mémoire avec support des accélérateurs.
Partie interne à Arcane de 'IMemoryRessourceMng'.
virtual IMemoryRessourceMngInternal * _internal()=0
Interface interne.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Flot de sortie lié à une String.
Chaîne de caractères unicode.
eMemoryAdvice
Conseils pour la gestion mémoire.
@ AccessedByHost
Indique que la zone mémoire est accédée par l'hôte.
@ PreferredLocationDevice
Privilégié le positionnement de la mémoire sur l'accélérateur.
@ MostlyRead
Indique que la zone mémoire est principalement en lecture seule.
@ PreferredLocationHost
Privilégié le positionnement de la mémoire sur l'hôte.
@ AccessedByDevice
Indique que la zone mémoire est accédée par l'accélérateur.
eExecutionPolicy
Politique d'exécution pour un Runner.
@ HIP
Politique d'exécution utilisant l'environnement HIP.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eMemoryRessource
Liste des ressources mémoire disponibles.
@ HostPinned
Alloue sur l'hôte.
@ UnifiedMemory
Alloue en utilisant la mémoire unifiée.
@ Device
Alloue sur le device.
Espace de nom de Arccore.
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.