Arcane  v3.14.10.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
42 public:
43
44 explicit RunCommandImpl(RunQueueImpl* queue);
46 RunCommandImpl(const RunCommandImpl&) = delete;
47 RunCommandImpl& operator=(const RunCommandImpl&) = delete;
48
49 public:
50
51 static RunCommandImpl* create(RunQueueImpl* r);
52
53 public:
54
55 const TraceInfo& traceInfo() const { return m_trace_info; }
56 const String& kernelName() const { return m_kernel_name; }
57
58 public:
59
63 impl::IReduceMemoryImpl* getOrCreateReduceMemoryImpl();
64
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
103
106
107 ForLoopOneExecStat m_loop_one_exec_stat;
108 ForLoopOneExecStat* m_loop_one_exec_stat_ptr = nullptr;
109
111 const bool m_use_accelerator = false;
112
113 private:
114
115 void _freePools();
116 void _reset();
117 void _init();
118 IRunQueueEventImpl* _createEvent();
119};
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
123
124} // namespace Arcane::Accelerator::impl
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128
129#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 notifyLaunchKernelSyclEvent(void *sycl_event_ptr)
Notification du lancement d'un kernel SYCL.
IRunQueueEventImpl * m_stop_event
Evè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
Evènements pour le début et la fin de l'exécution.
void notifyBeginLaunchKernel()
Notification du début d'exécution de la commande.
Int64 m_begin_time
Temps au lancement de la commande.
std::set< ReduceMemoryImpl * > m_active_reduce_memory_list
Liste des réductions actives.
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:120
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.