Arcane  v4.1.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
core/RunCommand.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/* RunCommand.h (C) 2000-2025 */
9/* */
10/* Gestion d'une commande sur accélérateur. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_RUNCOMMAND_H
13#define ARCANE_ACCELERATOR_CORE_RUNCOMMAND_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane::Accelerator
23{
24namespace impl
25{
26extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT IReduceMemoryImpl*
27internalGetOrCreateReduceMemoryImpl(RunCommand* command);
28}
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \brief Gestion d'une commande sur accélérateur.
34 *
35 * Une commande est associée à une file d'exécution (RunQueue) et sa durée
36 * de vie ne doit pas excéder celle de cette dernière.
37 *
38 * Une commande est une opération qui sera exécutée sur l'accélérateur
39 * associé à l'instance de RunQueue utilisé lors de l'appel à makeCommand().
40 * Sur un GPU, cela correspond à un noyau (kernel).
41 *
42 * Pour plus d'informations, se reporter à la rubrique
43 * \ref arcanedoc_parallel_accelerator_runcommand.
44 */
45class ARCANE_ACCELERATOR_CORE_EXPORT RunCommand
46{
47 friend impl::IReduceMemoryImpl* impl::internalGetOrCreateReduceMemoryImpl(RunCommand* command);
49 friend impl::RunQueueImpl;
50 friend class ViewBuildInfo;
51 template<typename T, Int32 Extent> friend class LocalMemory;
52
53 friend RunCommand makeCommand(const RunQueue& run_queue);
54 friend RunCommand makeCommand(const RunQueue* run_queue);
55
56 public:
57
58 ~RunCommand();
59
60 protected:
61
62 explicit RunCommand(const RunQueue& run_queue);
63
64 public:
65
66 RunCommand(RunCommand&& command) = delete;
67 RunCommand(const RunCommand&) = delete;
68 RunCommand& operator=(const RunCommand&) = delete;
69 RunCommand& operator=(RunCommand&&) = delete;
70
71 public:
72
73 /*!
74 * \brief Positionne le informations de trace.
75 *
76 * Ces informations sont utilisées pour les traces ou pour le débug.
77 * Les macros RUNCOMMAND_LOOP ou RUNCOMMAND_ENUMERATE appellent
78 * automatiquement cette méthode.
79 */
80 RunCommand& addTraceInfo(const TraceInfo& ti);
81
82 /*!
83 * \brief Positionne le nom du noyau.
84 *
85 * Ce nom est utilisé pour les traces ou pour le débug.
86 */
87 RunCommand& addKernelName(const String& v);
88
89 /*!
90 * \brief Positionne le nombre de thread par bloc pour les accélérateurs.
91 *
92 * Si la valeur \a v est nulle, le choix par défaut est utilisé.
93 * Si la valeur \a v est positive, sa valeur minimale valide dépend
94 * de l'accélérateur. En général c'est au moins 32.
95 */
96 RunCommand& addNbThreadPerBlock(Int32 v);
97
98 //! Informations pour les traces
99 const TraceInfo& traceInfo() const;
100
101 //! Nom du noyau
102 const String& kernelName() const;
103
104 /*
105 * \brief Nombre de threads par bloc ou 0 pour la valeur par défaut.
106 *
107 * Cette valeur est utilisée uniquement si on s'exécute sur accélérateur.
108 */
109 Int32 nbThreadPerBlock() const;
110
111 //! Positionne la configuration des boucles multi-thread
113
114 //! Configuration des boucles multi-thread
116
117 //! Affichage des informations de la commande
118 friend ARCANE_ACCELERATOR_CORE_EXPORT RunCommand&
119 operator<<(RunCommand& command, const TraceInfo& trace_info);
120
121 private:
122
123 // Pour RunCommandLaunchInfo
124 void _internalNotifyBeginLaunchKernel();
125 void _internalNotifyEndLaunchKernel();
126 void _internalNotifyBeginLaunchKernelSyclEvent(void* sycl_event_ptr);
127 ForLoopOneExecStat* _internalCommandExecStat();
128
129 private:
130
131 //! \internal
132 impl::RunQueueImpl* _internalQueueImpl() const;
133 Impl::NativeStream _internalNativeStream() const;
134 static impl::RunCommandImpl* _internalCreateImpl(impl::RunQueueImpl* queue);
135 static void _internalDestroyImpl(impl::RunCommandImpl* p);
136 Int32 _addSharedMemory(Int32 size);
137 Int32 _sharedMemory() const;
138
139 private:
140
141 void _allocateReduceMemory(Int32 nb_grid);
142
143 private:
144
145 impl::RunCommandImpl* m_p;
146};
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151} // End namespace Arcane::Accelerator
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156#endif
Type opaque pour encapsuler une 'stream' native.
const ParallelLoopOptions & parallelLoopOptions() const
Configuration des boucles multi-thread.
friend RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
void setParallelLoopOptions(const ParallelLoopOptions &opt)
Positionne la configuration des boucles multi-thread.
friend RunCommand & operator<<(RunCommand &command, const TraceInfo &trace_info)
Affichage des informations de la commande.
RunCommand & addNbThreadPerBlock(Int32 v)
Positionne le nombre de thread par bloc pour les accélérateurs.
RunCommand & addKernelName(const String &v)
Positionne le nom du noyau.
Definition RunCommand.cc:95
RunCommand & addTraceInfo(const TraceInfo &ti)
Positionne le informations de trace.
Definition RunCommand.cc:85
const TraceInfo & traceInfo() const
Informations pour les traces.
Definition RunCommand.cc:58
const String & kernelName() const
Nom du noyau.
Definition RunCommand.cc:67
File d'exécution pour un accélérateur.
Classe pour gérer le profiling d'une seule exécution d'une boucle.
Options d'exécution d'une boucle parallèle en multi-thread.
Chaîne de caractères unicode.
Espace de nom pour l'utilisation des accélérateurs.
std::int32_t Int32
Type entier signé sur 32 bits.