Arcane  v4.1.4.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
CommonAcceleratorGlobal.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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-2026 */
9/* */
10/* Déclarations générales pour le support des accélérateurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_COMMON_ACCELERATOR_COMMONACCELERATORCOREGLOBAL_H
13#define ARCCORE_COMMON_ACCELERATOR_COMMONACCELERATORCOREGLOBAL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/common/CommonGlobal.h"
18#include "arccore/trace/TraceGlobal.h"
19
20#include <iosfwd>
21
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34namespace Arcane::Accelerator
35{
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
39
40class IAcceleratorMng;
41class Runner;
42class RunQueue;
43class RunQueuePool;
44class RunCommand;
45class RunQueueEvent;
48class MemoryCopyArgs;
50class DeviceId;
51class DeviceInfo;
53class ProfileRegion;
54class IDeviceInfoList;
56class ViewBuildInfo;
57class RunnerInternal;
58enum class eMemoryAdvice;
59
60namespace Impl
61{
63 class IRunnerRuntime;
64 // typedef pour compatibilité avec anciennes versions (octobre 2022)
65 using IRunQueueRuntime = IRunnerRuntime;
66 class IRunQueueStream;
67 class RunCommandImpl;
69 class ReduceMemoryImpl;
70 class RunQueueImpl;
72 class RunnerImpl;
74 class KernelLaunchArgs;
76 class NativeStream;
77 class CudaUtils;
78 class HipUtils;
79 class SyclUtils;
80} // namespace Impl
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
102
104extern "C++" ARCCORE_COMMON_EXPORT
105std::ostream&
106operator<<(std::ostream& o, eExecutionPolicy exec_policy);
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
117{
125 Atomic ARCCORE_DEPRECATED_REASON("Y2025: Use eDeviceReducePolicy::Grid instead") = 1,
128};
129
130/*---------------------------------------------------------------------------*/
131/*---------------------------------------------------------------------------*/
136enum class eRunQueuePriority : int
137{
141 High = -100,
143 Low = 100
144};
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
151{
152 //NOTE: Les valeurs sont équivalentes à cudaMemoryType. Si on
153 // change ces valeurs il faut changer la fonction correspondante
154 // dans le runtime (getPointerAttribute()).
155 Unregistered = 0,
156 Host = 1,
157 Device = 2,
158 Managed = 3
159};
160
162extern "C++" ARCCORE_COMMON_EXPORT
163std::ostream&
164operator<<(std::ostream& o, ePointerMemoryType mem_type);
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
177{
181 No = 1,
183 Yes = 2
184};
185
186/*---------------------------------------------------------------------------*/
187/*---------------------------------------------------------------------------*/
188
190inline bool
192{
193 return exec_policy == eExecutionPolicy::CUDA || exec_policy == eExecutionPolicy::HIP || exec_policy == eExecutionPolicy::SYCL;
194}
195
196/*---------------------------------------------------------------------------*/
197/*---------------------------------------------------------------------------*/
205extern "C++" ARCCORE_COMMON_EXPORT ePointerAccessibility
206getPointerAccessibility(RunQueue* queue, const void* ptr, PointerAttribute* ptr_attr = nullptr);
207
215extern "C++" ARCCORE_COMMON_EXPORT ePointerAccessibility
216getPointerAccessibility(Runner* runner, const void* ptr, PointerAttribute* ptr_attr = nullptr);
217
224extern "C++" ARCCORE_COMMON_EXPORT ePointerAccessibility
225getPointerAccessibility(eExecutionPolicy policy, const void* ptr, PointerAttribute* ptr_attr = nullptr);
226
228template <typename T> inline ePointerAccessibility
229getPointerAccessibility(T& queue_or_runner_or_policy, const void* ptr, PointerAttribute* ptr_attr = nullptr)
230{
231 return getPointerAccessibility(&queue_or_runner_or_policy, ptr, ptr_attr);
232}
233
234/*---------------------------------------------------------------------------*/
235/*---------------------------------------------------------------------------*/
236
237} // namespace Arcane::Accelerator
238
239/*---------------------------------------------------------------------------*/
240/*---------------------------------------------------------------------------*/
241
242namespace Arcane::Accelerator::Impl
243{
244
250extern "C++" ARCCORE_COMMON_EXPORT void
251arcaneCheckPointerIsAccessible(const RunQueue* queue, const void* ptr,
252 const char* name, const TraceInfo& ti);
253
259extern "C++" ARCCORE_COMMON_EXPORT void
260arcaneCheckPointerIsAccessible(const Runner* runner, const void* ptr,
261 const char* name, const TraceInfo& ti);
262
268extern "C++" ARCCORE_COMMON_EXPORT void
269arcaneCheckPointerIsAccessible(eExecutionPolicy policy, const void* ptr,
270 const char* name, const TraceInfo& ti);
271
272inline void
273arcaneCheckPointerIsAccessible(const RunQueue& queue, const void* ptr,
274 const char* name, const TraceInfo& ti)
275{
276 arcaneCheckPointerIsAccessible(&queue, ptr, name, ti);
277}
278
279inline void
280arcaneCheckPointerIsAccessible(const Runner& runner, const void* ptr,
281 const char* name, const TraceInfo& ti)
282{
283 arcaneCheckPointerIsAccessible(&runner, ptr, name, ti);
284}
285
286} // namespace Arcane::Accelerator::Impl
287
288/*---------------------------------------------------------------------------*/
289/*---------------------------------------------------------------------------*/
295#define ARCCORE_CHECK_ACCESSIBLE_POINTER_ALWAYS(queue_or_runner_or_policy, ptr) \
296 ::Arcane::Accelerator::Impl::arcaneCheckPointerIsAccessible((queue_or_runner_or_policy), (ptr), #ptr, A_FUNCINFO)
297
298#define ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS(queue_or_runner_or_policy, ptr) \
299 ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS((queue_or_runner_or_policy), (ptr))
300
301/*---------------------------------------------------------------------------*/
302/*---------------------------------------------------------------------------*/
303
304#if defined(ARCCORE_CHECK)
305
307#define ARCCORE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr) \
308 ARCCORE_CHECK_ACCESSIBLE_POINTER_ALWAYS((queue_or_runner_or_policy), (ptr))
309
310#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr) \
311 ARCCORE_CHECK_ACCESSIBLE_POINTER((queue_or_runner_or_policy), (ptr))
312
314#else
315
317#define ARCCORE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr)
318
319#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr)
320
321#endif
322
323/*---------------------------------------------------------------------------*/
324/*---------------------------------------------------------------------------*/
325
326namespace Arcane::Accelerator::impl
327{
328// Pour compatibilité avec les anciennes versions de Arcane.
329// A rendre obsolète fin 2026.
331}
332
333/*---------------------------------------------------------------------------*/
334/*---------------------------------------------------------------------------*/
335
336#endif
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.
Object temporaire pour conserver les informations d'exécution d'une commande et regrouper les tests.
Classe statique fournissant des fonctions internes à Arcane.
Gestionnaire d'exécution pour accélérateur.
Informations pour construire une vue pour les données sur accélérateur.
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.
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.
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.
@ 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.