Arcane  v3.14.11.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-2024 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-2024 */
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;
51class AcceleratorRuntimeInitialisationInfo;
52class RunQueueBuildInfo;
53class MemoryCopyArgs;
54class MemoryPrefetchArgs;
55class DeviceId;
56class DeviceInfo;
57class ProfileRegion;
58class IDeviceInfoList;
59class PointerAttribute;
60class ViewBuildInfo;
61class RunnerInternal;
62enum class eMemoryAdvice;
63
64namespace impl
65{
66 class KernelLaunchArgs;
67 class RuntimeStaticInfo;
68 class IRunnerRuntime;
69 // typedef pour compatibilité avec anciennes versions (octobre 2022)
70 using IRunQueueRuntime = IRunnerRuntime;
71 class IRunQueueStream;
72 class RunCommandImpl;
73 class IReduceMemoryImpl;
74 class ReduceMemoryImpl;
75 class RunQueueImpl;
76 class IRunQueueEventImpl;
77 class RunCommandLaunchInfo;
78 class RunnerImpl;
79 class RunQueueImplStack;
80} // namespace impl
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
88{
90 None,
94 Thread,
96 CUDA,
98 HIP,
100 SYCL
101};
102
104extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
105std::ostream&
106operator<<(std::ostream& o, eExecutionPolicy exec_policy);
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
114{
116 Atomic = 1,
118 Grid = 2
119};
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
127enum class eRunQueuePriority : int
128{
130 Default = 0,
132 High = -100,
134 Low = 100
135};
136
137/*---------------------------------------------------------------------------*/
138/*---------------------------------------------------------------------------*/
139
142{
143 //NOTE: Les valeurs sont équivalentes à cudaMemoryType. Si on
144 // change ces valeurs il faut changer la fonction correspondante
145 // dans le runtime (getPointerAttribute()).
146 Unregistered = 0,
147 Host = 1,
148 Device = 2,
149 Managed = 3
150};
151
153extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT
154std::ostream&
155operator<<(std::ostream& o, ePointerMemoryType mem_type);
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
168{
170 Unknown = 0,
172 No = 1,
174 Yes = 2
175};
176
177/*---------------------------------------------------------------------------*/
178/*---------------------------------------------------------------------------*/
179
181inline bool
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
196extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
197getPointerAccessibility(RunQueue* queue, const void* ptr, PointerAttribute* ptr_attr = nullptr);
198
206extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
207getPointerAccessibility(Runner* runner, const void* ptr, PointerAttribute* ptr_attr = nullptr);
208
215extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT ePointerAccessibility
217
219template <typename T> inline ePointerAccessibility
224
225/*---------------------------------------------------------------------------*/
226/*---------------------------------------------------------------------------*/
227
228} // namespace Arcane::Accelerator
229
230/*---------------------------------------------------------------------------*/
231/*---------------------------------------------------------------------------*/
232
233namespace Arcane::Accelerator::impl
234{
236
242extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
243arcaneCheckPointerIsAccessible(const RunQueue* queue, const void* ptr,
244 const char* name, const TraceInfo& ti);
245
251extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
252arcaneCheckPointerIsAccessible(const Runner* runner, const void* ptr,
253 const char* name, const TraceInfo& ti);
254
260extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT void
261arcaneCheckPointerIsAccessible(eExecutionPolicy policy, const void* ptr,
262 const char* name, const TraceInfo& ti);
263
264inline void
265arcaneCheckPointerIsAccessible(const RunQueue& queue, const void* ptr,
266 const char* name, const TraceInfo& ti)
267{
268 arcaneCheckPointerIsAccessible(&queue, ptr, name, ti);
269}
270
271inline void
272arcaneCheckPointerIsAccessible(const Runner& runner, const void* ptr,
273 const char* name, const TraceInfo& ti)
274{
275 arcaneCheckPointerIsAccessible(&runner, ptr, name, ti);
276}
277
278} // namespace Arcane::Accelerator::impl
279
280/*---------------------------------------------------------------------------*/
281/*---------------------------------------------------------------------------*/
287#define ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS(queue_or_runner_or_policy, ptr) \
288 ::Arcane::Accelerator::impl::arcaneCheckPointerIsAccessible((queue_or_runner_or_policy), (ptr), #ptr, A_FUNCINFO)
289
290/*---------------------------------------------------------------------------*/
291/*---------------------------------------------------------------------------*/
292
293#ifdef ARCANE_CHECK
295#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr) \
296 ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS((queue_or_runner_or_policy), (ptr))
297#else
299#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr)
300#endif
301
302/*---------------------------------------------------------------------------*/
303/*---------------------------------------------------------------------------*/
304
305#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:373
Déclarations des types utilisés dans Arcane.
Informations sur une adresse mémoire.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:53
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
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.