Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
internal/RunCommandImpl.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/* RunCommandImpl.h (C) 2000-2024 */
9/* */
10/* Implémentation de la gestion d'une commande sur accélérateur. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_INTERNAL_RUNCOMMANDIMPL_H
13#define ARCANE_ACCELERATOR_CORE_INTERNAL_RUNCOMMANDIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceInfo.h"
18#include "arcane/utils/ParallelLoopOptions.h"
19#include "arcane/utils/Profiling.h"
20
22
23#include <set>
24#include <stack>
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane::Accelerator::impl
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
39{
40 friend RunCommand;
41 friend RunQueueImpl;
42
43 public:
44
45 explicit RunCommandImpl(RunQueueImpl* queue);
47 RunCommandImpl(const RunCommandImpl&) = delete;
48 RunCommandImpl& operator=(const RunCommandImpl&) = delete;
49
50 public:
51
52 static RunCommandImpl* create(RunQueueImpl* r);
53
54 public:
55
56 const TraceInfo& traceInfo() const { return m_trace_info; }
57 const String& kernelName() const { return m_kernel_name; }
58
59 public:
60
64 impl::IReduceMemoryImpl* getOrCreateReduceMemoryImpl();
65 void releaseReduceMemoryImpl(ReduceMemoryImpl* p);
66 IRunQueueStream* internalStream() const;
67 RunnerImpl* runner() const;
68
69 public:
70
72
73 private:
74
75 ReduceMemoryImpl* _getOrCreateReduceMemoryImpl();
76
77 private:
78
79 RunQueueImpl* m_queue;
80 TraceInfo m_trace_info;
81 String m_kernel_name;
82 Int32 m_nb_thread_per_block = 0;
83 ParallelLoopOptions m_parallel_loop_options;
84
85 // NOTE: cette pile gère la mémoire associé à un seul runtime
86 // Si on souhaite un jour supporté plusieurs runtimes il faudra une pile
87 // par runtime. On peut éventuellement limiter cela si on est sur
88 // qu'une commande est associée à un seul type (au sens runtime) de RunQueue.
89 std::stack<ReduceMemoryImpl*> m_reduce_memory_pool;
90
92 std::set<ReduceMemoryImpl*> m_active_reduce_memory_list;
93
95 bool m_has_been_launched = false;
96
98 bool m_use_profiling = false;
99
102
107
110
111 ForLoopOneExecStat m_loop_one_exec_stat;
112 ForLoopOneExecStat* m_loop_one_exec_stat_ptr = nullptr;
113
115 const bool m_use_accelerator = false;
116
125
128
131
132 private:
133
134 void _freePools();
135 void _reset();
136 void _init();
137 IRunQueueEventImpl* _createEvent();
139};
140
141/*---------------------------------------------------------------------------*/
142/*---------------------------------------------------------------------------*/
143
144} // namespace Arcane::Accelerator::impl
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
149#endif
Gestion d'une commande sur accélérateur.
Interface de la gestion mémoire pour les réductions.
Interface de l'implémentation d'un évènement.
Interface d'un flux d'exécution pour une RunQueue.
Implémentation d'une commande pour accélérateur.
void notifyEndLaunchKernel()
Notification de la fin de lancement de la commande.
bool m_use_sequential_timer_event
Indique si on utilise les évènements séquentiels pour calculer le temps d'exécution.
void _notifyDestroyRunCommand()
Méthode appelée quand l'instance RunCommand associée est détruite.
void notifyLaunchKernelSyclEvent(void *sycl_event_ptr)
Notification du lancement d'un kernel SYCL.
IRunQueueEventImpl * m_stop_event
Évènements pour la fin de l'exécution.
bool m_has_been_launched
Indique si la commande a été lancée.
IRunQueueEventImpl * m_start_event
Évènements pour le début et la fin de l'exécution.
void notifyBeginLaunchKernel()
Notification du début d'exécution de la commande.
bool m_is_allow_reuse_command
Indique si on autorise à utiliser plusieurs fois la même commande.
Int64 m_begin_time
Temps au lancement de la commande.
bool m_may_be_put_in_pool
Indique si on peut remettre la commande dans le pool associé à la RunQueue.
bool m_has_living_run_command
Indique si une RunCommand a une référence sur cette instance.
std::set< ReduceMemoryImpl * > m_active_reduce_memory_list
Liste des réductions actives.
bool m_use_profiling
Indique si on souhaite le profiling.
void notifyEndExecuteKernel()
Notification de la fin d'exécution du noyau.
const bool m_use_accelerator
Indique si la commande s'exécute sur accélérateur.
File d'exécution pour accélérateur.
Classe pour gérer le profiling d'une seule exécution d'une boucle.
Definition Profiling.h:93
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Options d'exécution d'une boucle parallèle en multi-thread.
Chaîne de caractères unicode.
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.