Arcane  v4.1.1.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-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 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} // namespace impl
75
76namespace Impl
77{
78 class KernelLaunchArgs;
80 class NativeStream;
81 class CudaUtils;
82 class HipUtils;
83 class SyclUtils;
84} // namespace Impl
85
86/*---------------------------------------------------------------------------*/
87/*---------------------------------------------------------------------------*/
106
108extern "C++" ARCCORE_COMMON_EXPORT
109std::ostream&
110operator<<(std::ostream& o, eExecutionPolicy exec_policy);
111
112/*---------------------------------------------------------------------------*/
113/*---------------------------------------------------------------------------*/
121{
129 Atomic ARCCORE_DEPRECATED_REASON("Y2025: Use eDeviceReducePolicy::Grid instead") = 1,
132};
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
140enum class eRunQueuePriority : int
141{
145 High = -100,
147 Low = 100
148};
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152
155{
156 //NOTE: Les valeurs sont équivalentes à cudaMemoryType. Si on
157 // change ces valeurs il faut changer la fonction correspondante
158 // dans le runtime (getPointerAttribute()).
159 Unregistered = 0,
160 Host = 1,
161 Device = 2,
162 Managed = 3
163};
164
166extern "C++" ARCCORE_COMMON_EXPORT
167std::ostream&
168operator<<(std::ostream& o, ePointerMemoryType mem_type);
169
170/*---------------------------------------------------------------------------*/
171/*---------------------------------------------------------------------------*/
181{
185 No = 1,
187 Yes = 2
188};
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
194inline bool
196{
197 return exec_policy == eExecutionPolicy::CUDA || exec_policy == eExecutionPolicy::HIP || exec_policy == eExecutionPolicy::SYCL;
198}
199
200/*---------------------------------------------------------------------------*/
201/*---------------------------------------------------------------------------*/
209extern "C++" ARCCORE_COMMON_EXPORT ePointerAccessibility
210getPointerAccessibility(RunQueue* queue, const void* ptr, PointerAttribute* ptr_attr = nullptr);
211
219extern "C++" ARCCORE_COMMON_EXPORT ePointerAccessibility
220getPointerAccessibility(Runner* runner, const void* ptr, PointerAttribute* ptr_attr = nullptr);
221
228extern "C++" ARCCORE_COMMON_EXPORT ePointerAccessibility
229getPointerAccessibility(eExecutionPolicy policy, const void* ptr, PointerAttribute* ptr_attr = nullptr);
230
232template <typename T> inline ePointerAccessibility
233getPointerAccessibility(T& queue_or_runner_or_policy, const void* ptr, PointerAttribute* ptr_attr = nullptr)
234{
235 return getPointerAccessibility(&queue_or_runner_or_policy, ptr, ptr_attr);
236}
237
238/*---------------------------------------------------------------------------*/
239/*---------------------------------------------------------------------------*/
240
241} // namespace Arcane::Accelerator
242
243/*---------------------------------------------------------------------------*/
244/*---------------------------------------------------------------------------*/
245
246namespace Arcane::Accelerator::impl
247{
249
255extern "C++" ARCCORE_COMMON_EXPORT void
256arcaneCheckPointerIsAccessible(const RunQueue* queue, const void* ptr,
257 const char* name, const TraceInfo& ti);
258
264extern "C++" ARCCORE_COMMON_EXPORT void
265arcaneCheckPointerIsAccessible(const Runner* runner, const void* ptr,
266 const char* name, const TraceInfo& ti);
267
273extern "C++" ARCCORE_COMMON_EXPORT void
274arcaneCheckPointerIsAccessible(eExecutionPolicy policy, const void* ptr,
275 const char* name, const TraceInfo& ti);
276
277inline void
278arcaneCheckPointerIsAccessible(const RunQueue& queue, const void* ptr,
279 const char* name, const TraceInfo& ti)
280{
281 arcaneCheckPointerIsAccessible(&queue, ptr, name, ti);
282}
283
284inline void
285arcaneCheckPointerIsAccessible(const Runner& runner, const void* ptr,
286 const char* name, const TraceInfo& ti)
287{
288 arcaneCheckPointerIsAccessible(&runner, ptr, name, ti);
289}
290
291} // namespace Arcane::Accelerator::impl
292
293/*---------------------------------------------------------------------------*/
294/*---------------------------------------------------------------------------*/
300#define ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS(queue_or_runner_or_policy, ptr) \
301 ::Arcane::Accelerator::impl::arcaneCheckPointerIsAccessible((queue_or_runner_or_policy), (ptr), #ptr, A_FUNCINFO)
302
303/*---------------------------------------------------------------------------*/
304/*---------------------------------------------------------------------------*/
305
306#ifdef ARCANE_CHECK
308#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr) \
309 ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS((queue_or_runner_or_policy), (ptr))
310#else
312#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr)
313#endif
314
315/*---------------------------------------------------------------------------*/
316/*---------------------------------------------------------------------------*/
317
318#endif
Object temporaire pour conserver les informations d'exécution d'une commande et regrouper les tests.
Gestionnaire d'exécution pour accélérateur.
Informations pour construire une vue pour les données sur accélérateur.
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.
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.
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.