Arcane  v4.1.0.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{
68 class IRunnerRuntime;
69 // typedef pour compatibilité avec anciennes versions (octobre 2022)
70 using IRunQueueRuntime = IRunnerRuntime;
71 class IRunQueueStream;
72 class RunCommandImpl;
74 class ReduceMemoryImpl;
75 class RunQueueImpl;
77 class RunnerImpl;
79} // namespace impl
80
81namespace Impl
82{
83 class KernelLaunchArgs;
85 class NativeStream;
86 class CudaUtils;
87 class HipUtils;
88 class SyclUtils;
89} // namespace Impl
90
91/*---------------------------------------------------------------------------*/
92/*---------------------------------------------------------------------------*/
111
113extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
114std::ostream&
115operator<<(std::ostream& o, eExecutionPolicy exec_policy);
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
126{
134 Atomic ARCANE_DEPRECATED_REASON("Y2025: Use eDeviceReducePolicy::Grid instead") = 1,
137};
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
145enum class eRunQueuePriority : int
146{
150 High = -100,
152 Low = 100
153};
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157
160{
161 //NOTE: Les valeurs sont équivalentes à cudaMemoryType. Si on
162 // change ces valeurs il faut changer la fonction correspondante
163 // dans le runtime (getPointerAttribute()).
164 Unregistered = 0,
165 Host = 1,
166 Device = 2,
167 Managed = 3
168};
169
171extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
172std::ostream&
173operator<<(std::ostream& o, ePointerMemoryType mem_type);
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
186{
190 No = 1,
192 Yes = 2
193};
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197
199inline bool
201{
202 return exec_policy == eExecutionPolicy::CUDA || exec_policy == eExecutionPolicy::HIP || exec_policy == eExecutionPolicy::SYCL;
203}
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
214extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
215getPointerAccessibility(RunQueue* queue, const void* ptr, PointerAttribute* ptr_attr = nullptr);
216
224extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
225getPointerAccessibility(Runner* runner, const void* ptr, PointerAttribute* ptr_attr = nullptr);
226
233extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
234getPointerAccessibility(eExecutionPolicy policy, const void* ptr, PointerAttribute* ptr_attr = nullptr);
235
237template <typename T> inline ePointerAccessibility
238getPointerAccessibility(T& queue_or_runner_or_policy, const void* ptr, PointerAttribute* ptr_attr = nullptr)
239{
240 return getPointerAccessibility(&queue_or_runner_or_policy, ptr, ptr_attr);
241}
242
243/*---------------------------------------------------------------------------*/
244/*---------------------------------------------------------------------------*/
245
246} // namespace Arcane::Accelerator
247
248/*---------------------------------------------------------------------------*/
249/*---------------------------------------------------------------------------*/
250
251namespace Arcane::Accelerator::impl
252{
254
260extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
261arcaneCheckPointerIsAccessible(const RunQueue* queue, const void* ptr,
262 const char* name, const TraceInfo& ti);
263
269extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
270arcaneCheckPointerIsAccessible(const Runner* runner, const void* ptr,
271 const char* name, const TraceInfo& ti);
272
278extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
279arcaneCheckPointerIsAccessible(eExecutionPolicy policy, const void* ptr,
280 const char* name, const TraceInfo& ti);
281
282inline void
283arcaneCheckPointerIsAccessible(const RunQueue& queue, const void* ptr,
284 const char* name, const TraceInfo& ti)
285{
286 arcaneCheckPointerIsAccessible(&queue, ptr, name, ti);
287}
288
289inline void
290arcaneCheckPointerIsAccessible(const Runner& runner, const void* ptr,
291 const char* name, const TraceInfo& ti)
292{
293 arcaneCheckPointerIsAccessible(&runner, ptr, name, ti);
294}
295
296} // namespace Arcane::Accelerator::impl
297
298/*---------------------------------------------------------------------------*/
299/*---------------------------------------------------------------------------*/
305#define ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS(queue_or_runner_or_policy, ptr) \
306 ::Arcane::Accelerator::impl::arcaneCheckPointerIsAccessible((queue_or_runner_or_policy), (ptr), #ptr, A_FUNCINFO)
307
308/*---------------------------------------------------------------------------*/
309/*---------------------------------------------------------------------------*/
310
311#ifdef ARCANE_CHECK
313#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr) \
314 ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS((queue_or_runner_or_policy), (ptr))
315#else
317#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr)
318#endif
319
320/*---------------------------------------------------------------------------*/
321/*---------------------------------------------------------------------------*/
322
323#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 lancer un kernel.
Type opaque pour encapsuler une 'stream' native.
Object temporaire pour conserver les informations d'exécution d'une commande et regrouper les tests.
Arguments pour la copie mémoire.
Definition Memory.h:61
Arguments pour le préfetching mémoire.
Definition Memory.h:123
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.
Évè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:67
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.
Implémentation d'une commande pour accélérateur.
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:34
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.