Arcane  v4.1.2.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 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{
245
251extern "C++" ARCCORE_COMMON_EXPORT void
252arcaneCheckPointerIsAccessible(const RunQueue* queue, const void* ptr,
253 const char* name, const TraceInfo& ti);
254
260extern "C++" ARCCORE_COMMON_EXPORT void
261arcaneCheckPointerIsAccessible(const Runner* runner, const void* ptr,
262 const char* name, const TraceInfo& ti);
263
269extern "C++" ARCCORE_COMMON_EXPORT void
270arcaneCheckPointerIsAccessible(eExecutionPolicy policy, const void* ptr,
271 const char* name, const TraceInfo& ti);
272
273inline void
274arcaneCheckPointerIsAccessible(const RunQueue& queue, const void* ptr,
275 const char* name, const TraceInfo& ti)
276{
277 arcaneCheckPointerIsAccessible(&queue, ptr, name, ti);
278}
279
280inline void
281arcaneCheckPointerIsAccessible(const Runner& runner, const void* ptr,
282 const char* name, const TraceInfo& ti)
283{
284 arcaneCheckPointerIsAccessible(&runner, ptr, name, ti);
285}
286
287} // namespace Arcane::Accelerator::Impl
288
289/*---------------------------------------------------------------------------*/
290/*---------------------------------------------------------------------------*/
296#define ARCCORE_CHECK_ACCESSIBLE_POINTER_ALWAYS(queue_or_runner_or_policy, ptr) \
297 ::Arcane::Accelerator::Impl::arcaneCheckPointerIsAccessible((queue_or_runner_or_policy), (ptr), #ptr, A_FUNCINFO)
298
299#define ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS(queue_or_runner_or_policy, ptr) \
300 ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS((queue_or_runner_or_policy), (ptr))
301
302/*---------------------------------------------------------------------------*/
303/*---------------------------------------------------------------------------*/
304
305#if defined(ARCCORE_CHECK)
306
308#define ARCCORE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr) \
309 ARCCORE_CHECK_ACCESSIBLE_POINTER_ALWAYS((queue_or_runner_or_policy), (ptr))
310
311#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr) \
312 ARCCORE_CHECK_ACCESSIBLE_POINTER((queue_or_runner_or_policy), (ptr))
313
315#else
316
318#define ARCCORE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr)
319
320#define ARCANE_CHECK_ACCESSIBLE_POINTER(queue_or_runner_or_policy, ptr)
321
322#endif
323
324/*---------------------------------------------------------------------------*/
325/*---------------------------------------------------------------------------*/
326
327#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.