14#include "arccore/common/accelerator/internal/RuntimeLoader.h"
16#include "arccore/base/PlatformUtils.h"
17#include "arccore/base/FatalErrorException.h"
18#include "arccore/base/internal/IDynamicLibraryLoader.h"
22#include "arccore/common/internal/MemoryUtilsInternal.h"
23#include "arccore/common/accelerator/AcceleratorRuntimeInitialisationInfo.h"
24#include "arccore/common/accelerator/internal/RegisterRuntimeInfo.h"
29namespace Arcane::Accelerator::Impl
49 const String& default_runtime_name,
50 const String& library_path,
51 bool& has_accelerator)
53 has_accelerator =
false;
55 if (!init_info.isUsingAcceleratorRuntime())
57 String runtime_name = init_info.acceleratorRuntime();
58 if (runtime_name ==
"sequential")
60 if (runtime_name.
empty())
61 runtime_name = default_runtime_name;
62 if (runtime_name.
empty())
67 if (runtime_name !=
"cuda" && runtime_name !=
"hip" && runtime_name !=
"sycl")
68 ARCCORE_FATAL(
"Invalid accelerator runtime '{0}'. Only 'cuda', 'hip' or 'sycl' is allowed", runtime_name);
78 String os_dir(library_path);
79 String dll_name =
"arccore_accelerator_" + runtime_name +
"_runtime";
80 String symbol_name =
"arcaneRegisterAcceleratorRuntime" + runtime_name;
83 ARCCORE_FATAL(
"Can not found dynamic library '{0}' for using accelerator runtime", dll_name);
85 bool is_found =
false;
87 if (!is_found || !functor_addr)
88 ARCCORE_FATAL(
"Can not find symbol '{0}' in library '{1}'", symbol_name, dll_name);
90 auto my_functor =
reinterpret_cast<ArcaneAutoDetectAcceleratorFunctor
>(functor_addr);
94 if (!verbose_str.
null())
95 runtime_info.setVerbose(
true);
97 (*my_functor)(runtime_info);
98 has_accelerator =
true;
102 if (!data_allocator_str.
null()) {
111 catch (
const std::exception& ex) {
#define ARCCORE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fonctions utilitaires pour la gestion des exceptions.
ARCCORE_COMMON_EXPORT Int32 print(ITraceMng *tm, bool is_no_continue=true)
Imprime un message pour une exception inconnue.
Fonctions utilitaires de gestion mémoire.
Informations pour l'initialisation des accélérateurs.
void setAcceleratorRuntime(StringView name)
Nom du runtime utilisé (pour l'instant uniquement 'cuda', 'hip' ou 'sycl')
static int loadRuntime(AcceleratorRuntimeInitialisationInfo &init_info, const String &default_runtime_name, const String &library_path, bool &has_accelerator)
Détecte et charge la bibliothèque de gestion du runtime des accélérateurs.
Informations pour initialiser le runtime accélérateur.
Classe de base d'une exception.
Interface d'un chargeur dynamique de bibliothèque.
static IDynamicLibraryLoader * getDefault()
Service utilisé pour charger dynamiquement des bibliothèques.
Interface d'une bibliothèque dynamique.
virtual void * getSymbolAddress(const String &symbol_name, bool *is_found)=0
Retourne l'adresse du symbol de nom symbol_name.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
ARCCORE_COMMON_EXPORT void setDefaultDataMemoryResource(eMemoryResource mem_resource)
Positionne la ressource mémoire utilisée pour l'allocateur mémoire des données.
ARCCORE_COMMON_EXPORT eMemoryResource getMemoryResourceFromName(const String &name)
Retourne la ressource mémoire par son nom.
eMemoryResource
Liste des ressources mémoire disponibles.
@ Unknown
Valeur inconnue ou non initialisée.