Arcane  v3.14.10.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-2024 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-2024 */
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 * \warning API en cours de définition.
39 */
40class ARCANE_ACCELERATOR_CORE_EXPORT RunCommand
41{
42 friend impl::IReduceMemoryImpl* impl::internalGetOrCreateReduceMemoryImpl(RunCommand* command);
44 friend impl::RunQueueImpl;
45 friend class ViewBuildInfo;
46
47 friend RunCommand makeCommand(const RunQueue& run_queue);
48 friend RunCommand makeCommand(const RunQueue* run_queue);
49
50 public:
51
53
54 protected:
55
56 explicit RunCommand(const RunQueue& run_queue);
57
58 public:
59
60 RunCommand(const RunCommand&) = delete;
61 RunCommand& operator=(const RunCommand&) = delete;
62
63 public:
64
65 /*!
66 * \brief Positionne le informations de trace.
67 *
68 * Ces informations sont utilisées pour les traces ou pour le débug.
69 * Les macros RUNCOMMAND_LOOP ou RUNCOMMAND_ENUMERATE appellent
70 * automatiquement cette méthode.
71 */
72 RunCommand& addTraceInfo(const TraceInfo& ti);
73
74 /*!
75 * \brief Positionne le nom du noyau.
76 *
77 * Ce nom est utilisé pour les traces ou pour le débug.
78 */
79 RunCommand& addKernelName(const String& v);
80
81 /*!
82 * \brief Positionne le nombre de thread par bloc pour les accélérateurs.
83 *
84 * Si la valeur \a v est nulle, le choix par défaut est utilisé.
85 * Si la valeur \a v est positive, sa valeur minimale valide dépend
86 * de l'accélérateur. En général c'est au moins 32.
87 */
88 RunCommand& addNbThreadPerBlock(Int32 v);
89
90 //! Informations pour les traces
91 const TraceInfo& traceInfo() const;
92
93 //! Nom du noyau
94 const String& kernelName() const;
95
96 /*
97 * \brief Nombre de threads par bloc ou 0 pour la valeur par défaut.
98 *
99 * Cette valeur est utilisée uniquement si on s'exécute sur accélérateur.
100 */
101 Int32 nbThreadPerBlock() const;
102
103 //! Positionne la configuration des boucles multi-thread
104 void setParallelLoopOptions(const ParallelLoopOptions& opt);
105
106 //! Configuration des boucles multi-thread
107 const ParallelLoopOptions& parallelLoopOptions() const;
108
109 //! Affichage des informations de la commande
110 friend ARCANE_ACCELERATOR_CORE_EXPORT RunCommand&
111 operator<<(RunCommand& command, const TraceInfo& trace_info);
112
113 private:
114
115 // Pour RunCommandLaunchInfo
116 void _internalNotifyBeginLaunchKernel();
117 void _internalNotifyEndLaunchKernel();
118 void _internalNotifyBeginLaunchKernelSyclEvent(void* sycl_event_ptr);
119 ForLoopOneExecStat* _internalCommandExecStat();
120
121 private:
122
123 //! \internal
124 RunQueue _internalQueue() const;
125 impl::RunQueueImpl* _internalQueueImpl() const;
126 static impl::RunCommandImpl* _internalCreateImpl(impl::RunQueueImpl* queue);
127 static void _internalDestroyImpl(impl::RunCommandImpl* p);
128
129 private:
130
131 void _allocateReduceMemory(Int32 nb_grid);
132
133 private:
134
135 //RunQueue m_run_queue;
136 impl::RunCommandImpl* m_p;
137};
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142} // End namespace Arcane::Accelerator
143
144/*---------------------------------------------------------------------------*/
145/*---------------------------------------------------------------------------*/
146
147#endif
Gestion d'une commande sur accélérateur.
File d'exécution pour un accélérateur.
Informations pour construire une vue pour les données sur accélérateur.
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.
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.