Arcane  v3.16.6.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
52 friend RunCommand makeCommand(const RunQueue& run_queue);
53 friend RunCommand makeCommand(const RunQueue* run_queue);
54
55 public:
56
57 ~RunCommand();
58
59 protected:
60
61 explicit RunCommand(const RunQueue& run_queue);
62
63 public:
64
65 RunCommand(RunCommand&& command) = delete;
66 RunCommand(const RunCommand&) = delete;
67 RunCommand& operator=(const RunCommand&) = delete;
68 RunCommand& operator=(RunCommand&&) = delete;
69
70 public:
71
72 /*!
73 * \brief Positionne le informations de trace.
74 *
75 * Ces informations sont utilisées pour les traces ou pour le débug.
76 * Les macros RUNCOMMAND_LOOP ou RUNCOMMAND_ENUMERATE appellent
77 * automatiquement cette méthode.
78 */
79 RunCommand& addTraceInfo(const TraceInfo& ti);
80
81 /*!
82 * \brief Positionne le nom du noyau.
83 *
84 * Ce nom est utilisé pour les traces ou pour le débug.
85 */
86 RunCommand& addKernelName(const String& v);
87
88 /*!
89 * \brief Positionne le nombre de thread par bloc pour les accélérateurs.
90 *
91 * Si la valeur \a v est nulle, le choix par défaut est utilisé.
92 * Si la valeur \a v est positive, sa valeur minimale valide dépend
93 * de l'accélérateur. En général c'est au moins 32.
94 */
95 RunCommand& addNbThreadPerBlock(Int32 v);
96
97 //! Informations pour les traces
98 const TraceInfo& traceInfo() const;
99
100 //! Nom du noyau
101 const String& kernelName() const;
102
103 /*
104 * \brief Nombre de threads par bloc ou 0 pour la valeur par défaut.
105 *
106 * Cette valeur est utilisée uniquement si on s'exécute sur accélérateur.
107 */
108 Int32 nbThreadPerBlock() const;
109
110 //! Positionne la configuration des boucles multi-thread
112
113 //! Configuration des boucles multi-thread
115
116 //! Affichage des informations de la commande
117 friend ARCANE_ACCELERATOR_CORE_EXPORT RunCommand&
118 operator<<(RunCommand& command, const TraceInfo& trace_info);
119
120 private:
121
122 // Pour RunCommandLaunchInfo
123 void _internalNotifyBeginLaunchKernel();
124 void _internalNotifyEndLaunchKernel();
125 void _internalNotifyBeginLaunchKernelSyclEvent(void* sycl_event_ptr);
126 ForLoopOneExecStat* _internalCommandExecStat();
127
128 private:
129
130 //! \internal
131 impl::RunQueueImpl* _internalQueueImpl() const;
132 impl::NativeStream _internalNativeStream() const;
133 static impl::RunCommandImpl* _internalCreateImpl(impl::RunQueueImpl* queue);
134 static void _internalDestroyImpl(impl::RunCommandImpl* p);
135
136 private:
137
138 void _allocateReduceMemory(Int32 nb_grid);
139
140 private:
141
142 impl::RunCommandImpl* m_p;
143};
144
145/*---------------------------------------------------------------------------*/
146/*---------------------------------------------------------------------------*/
147
148} // End namespace Arcane::Accelerator
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152
153#endif
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:93
RunCommand & addTraceInfo(const TraceInfo &ti)
Positionne le informations de trace.
Definition RunCommand.cc:83
const TraceInfo & traceInfo() const
Informations pour les traces.
Definition RunCommand.cc:56
const String & kernelName() const
Nom du noyau.
Definition RunCommand.cc:65
File d'exécution pour un accélérateur.
Type opaque pour encapsuler une 'stream' native.
Classe pour gérer le profiling d'une seule exécution d'une boucle.
Definition Profiling.h:93
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.