Arcane  v3.16.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AcceleratorCoreGlobal.h
Aller à la documentation de ce fichier.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* AcceleratorCoreGlobal.h (C) 2000-2025 */
9/* */
10/* Déclarations générales pour le support des accélérateurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_ACCELERATORCOREGLOBAL_H
13#define ARCANE_ACCELERATOR_CORE_ACCELERATORCOREGLOBAL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include <iosfwd>
20
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30#ifdef ARCANE_COMPONENT_arcane_accelerator_core
31#define ARCANE_ACCELERATOR_CORE_EXPORT ARCANE_EXPORT
32#else
33#define ARCANE_ACCELERATOR_CORE_EXPORT ARCANE_IMPORT
34#endif
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38
39namespace Arcane::Accelerator
40{
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
44
45class IAcceleratorMng;
46class Runner;
47class RunQueue;
48class RunQueuePool;
49class RunCommand;
50class RunQueueEvent;
53class MemoryCopyArgs;
55class DeviceId;
56class DeviceInfo;
58class ProfileRegion;
59class IDeviceInfoList;
61class ViewBuildInfo;
62class RunnerInternal;
63enum class eMemoryAdvice;
64
65namespace impl
66{
67 class KernelLaunchArgs;
69 class IRunnerRuntime;
70 // typedef pour compatibilité avec anciennes versions (octobre 2022)
71 using IRunQueueRuntime = IRunnerRuntime;
72 class IRunQueueStream;
73 class RunCommandImpl;
75 class ReduceMemoryImpl;
76 class RunQueueImpl;
79 class RunnerImpl;
81 class NativeStream;
82 class CudaUtils;
83 class HipUtils;
84 class SyclUtils;
85} // namespace impl
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
107
109extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
110std::ostream&
111operator<<(std::ostream& o, eExecutionPolicy exec_policy);
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
122{
130 Atomic ARCANE_DEPRECATED_REASON("Y2025: Use eDeviceReducePolicy::Grid instead") = 1,
133};
134
135/*---------------------------------------------------------------------------*/
136/*---------------------------------------------------------------------------*/
141enum class eRunQueuePriority : int
142{
146 High = -100,
148 Low = 100
149};
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
153
156{
157 //NOTE: Les valeurs sont équivalentes à cudaMemoryType. Si on
158 // change ces valeurs il faut changer la fonction correspondante
159 // dans le runtime (getPointerAttribute()).
160 Unregistered = 0,
161 Host = 1,
162 Device = 2,
163 Managed = 3
164};
165
167extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
168std::ostream&
169operator<<(std::ostream& o, ePointerMemoryType mem_type);
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
182{
186 No = 1,
188 Yes = 2
189};
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
195inline bool
197{
198 return exec_policy == eExecutionPolicy::CUDA || exec_policy == eExecutionPolicy::HIP || exec_policy == eExecutionPolicy::SYCL;
199}
200
201/*---------------------------------------------------------------------------*/
202/*---------------------------------------------------------------------------*/
210extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
211getPointerAccessibility(RunQueue* queue, const void* ptr, PointerAttribute* ptr_attr = nullptr);
212
220extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
221getPointerAccessibility(Runner* runner, const void* ptr, PointerAttribute* ptr_attr = nullptr);
222
229extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
230getPointerAccessibility(eExecutionPolicy policy, const void* ptr, PointerAttribute* ptr_attr = nullptr);
231
233template <typename T> inline ePointerAccessibility
234getPointerAccessibility(T& queue_or_runner_or_policy, const void* ptr, PointerAttribute* ptr_attr = nullptr)
235{
236 return getPointerAccessibility(&queue_or_runner_or_policy, ptr, ptr_attr);
237}
238
239/*---------------------------------------------------------------------------*/
240/*---------------------------------------------------------------------------*/
241
242} // namespace Arcane::Accelerator
243
244/*---------------------------------------------------------------------------*/
245/*---------------------------------------------------------------------------*/
246
247namespace Arcane::Accelerator::impl
248{
250
256extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
257arcaneCheckPointerIsAccessible(const RunQueue* queue, const void* ptr,
258 const char* name, const TraceInfo& ti);
259
265extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
266arcaneCheckPointerIsAccessible(const Runner* runner, const void* ptr,
267 const char* name, const TraceInfo& ti);
268
274extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
275arcaneCheckPointerIsAccessible(eExecutionPolicy policy, const void* ptr,
276 const char* name, const TraceInfo& ti);
277
278inline void
279arcaneCheckPointerIsAccessible(const RunQueue& queue, const void* ptr,
280 const char* name, const TraceInfo& ti)
281{
282 arcaneCheckPointerIsAccessible(&queue, ptr, name, ti);
283}
284
285inline void
286arcaneCheckPointerIsAccessible(const Runner& runner, const void* ptr,
287 const char* name, const TraceInfo& ti)
288{
289 arcaneCheckPointerIsAccessible(&runner, ptr, name, ti);
290}
291
292} // namespace Arcane::Accelerator::impl
293
294/*---------------------------------------------------------------------------*/
295/*---------------------------------------------------------------------------*/
301#define ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS(queue_or_runner_or_policy, ptr) \
302 ::Arcane::Accelerator::impl::arcaneCheckPointerIsAccessible((queue_or_runner_or_policy), (ptr), #ptr, A_FUNCINFO)
303
304/*---------------------------------------------------------------------------*/
305/*---------------------------------------------------------------------------*/
306
307#ifdef ARCANE_CHECK
309#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr) \
310 ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS((queue_or_runner_or_policy), (ptr))
311#else
313#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr)
314#endif
315
316/*---------------------------------------------------------------------------*/
317/*---------------------------------------------------------------------------*/
318
319#endif
void arcaneCheckPointerIsAccessible(const RunQueue *queue, const void *ptr, const char *name, const TraceInfo &ti)
Vérifie si ptr est accessible pour une exécution sur queue.
Definition RunQueue.cc:403
Déclarations des types utilisés dans Arcane.
Identifiant d'un composant du système.
Definition DeviceId.h:33
Information sur un device.
Definition DeviceInfo.h:32
Information mémoire d'un accélérateur.
Interface du gestionnaire des accélérateurs.
Interface d'une liste de devices.
Arguments pour la copie mémoire.
Definition Memory.h:63
Arguments pour le préfetching mémoire.
Definition Memory.h:125
Informations sur une adresse mémoire.
Région pour le profiling.
Gestion d'une commande sur accélérateur.
Informations pour créer une RunQueue.
Evènement pour une file d'exécution.
Collection de RunQueue.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:68
Informations pour construire une vue pour les données sur accélérateur.
Interface de la gestion mémoire pour les réductions.
Interface de l'implémentation d'un évènement.
Interface d'un flux d'exécution pour une RunQueue.
Interface du runtime associé à un accélérateur.
Arguments pour lancer un kernel.
Type opaque pour encapsuler une 'stream' native.
Implémentation d'une commande pour accélérateur.
Object temporaire pour conserver les informations d'exécution d'une commande et regrouper les tests.
File d'exécution pour accélérateur.
Classe statique fournissant des fonctions internes à Arcane.
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.
eDeviceReducePolicy
Politique des opératations de réduction sur les accélérateurs.
@ Grid
Utilise un noyau de calcul avec une synchronisations entre les blocs.
@ Atomic
Utilise des opérations atomiques entre les blocs.
ePointerAccessibility
Informations d'accessibilité d'une adresse mémoire.
eMemoryAdvice
Conseils pour la gestion mémoire.
Definition Memory.h:36
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.
eRunQueuePriority
Niveaux de priorité prédéfinis pour les files d'exécution sur les accélérateurs.
@ Low
Une valeur arbitraire positive pour définir une priorité faible.
@ High
Une valeur arbitraire négative pour définir une priorité élevée.
@ Default
Utilise 0 comme valeur par défaut.
bool isAcceleratorPolicy(eExecutionPolicy exec_policy)
Indique si exec_policy correspond à un accélérateur.