Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
RunCommandLaunchInfo.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/* RunCommandLaunchInfo.h (C) 2000-2024 */
9/* */
10/* Informations pour l'exécution d'une 'RunCommand'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_RUNCOMMANDLAUNCHINFO_H
13#define ARCANE_ACCELERATOR_RUNCOMMANDLAUNCHINFO_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/CheckedConvert.h"
19#include "arcane/utils/Profiling.h"
20
21#include "arcane/accelerator/AcceleratorGlobal.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane::Accelerator::impl
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31/*!
32 * \internal
33 * \brief Object temporaire pour conserver les informations d'exécution d'une
34 * commande et regrouper les tests.
35 */
36class ARCANE_ACCELERATOR_EXPORT RunCommandLaunchInfo
37{
38 template <typename SyclKernel, typename Lambda, typename LambdaArgs, typename... ReducerArgs>
39 friend void _applyKernelSYCL(impl::RunCommandLaunchInfo& launch_info, SyclKernel kernel, Lambda& func,
40 const LambdaArgs& args, const ReducerArgs&... reducer_args);
41
42 public:
43
45 {
46 int nb_block_per_grid = 0;
47 int nb_thread_per_block = 0;
48 };
49
50 public:
51
52 RunCommandLaunchInfo(RunCommand& command, Int64 total_loop_size);
55 RunCommandLaunchInfo operator=(const RunCommandLaunchInfo&) = delete;
56
57 public:
58
59 eExecutionPolicy executionPolicy() const { return m_exec_policy; }
60
61 /*!
62 * \brief Indique qu'on commence l'exécution de la commande.
63 *
64 * Doit toujours être appelé avant de lancer la commande pour être
65 * sur que cette méthode est appelée en cas d'exception.
66 */
67 void beginExecute();
68
69 /*!
70 * \brief Signale la fin de l'exécution.
71 *
72 * Si la file associée à la commande est asynchrone, la commande
73 * peut continuer à s'exécuter après cet appel.
74 */
75 void endExecute();
76
77 //! Informations sur le nombre de block/thread/grille du noyau à lancer.
78 ThreadBlockInfo threadBlockInfo() const { return m_thread_block_info; }
79
80 //! Calcul les informations pour les boucles multi-thread
81 ParallelLoopOptions computeParallelLoopOptions() const;
82
83 //! Calcule la valeur de loopRunInfo()
84 void computeLoopRunInfo();
85
86 //! Informations d'exécution de la boucle
87 const ForLoopRunInfo& loopRunInfo() const { return m_loop_run_info; }
88
89 //! Taille totale de la boucle
90 Int64 totalLoopSize() const { return m_total_loop_size; }
91
92 public:
93
94 void* _internalStreamImpl();
95
96 private:
97
98 RunCommand& m_command;
99 bool m_has_exec_begun = false;
100 bool m_is_notify_end_kernel_done = false;
101 IRunnerRuntime* m_runtime = nullptr;
102 IRunQueueStream* m_queue_stream = nullptr;
103 eExecutionPolicy m_exec_policy = eExecutionPolicy::Sequential;
104 ThreadBlockInfo m_thread_block_info;
105 ForLoopRunInfo m_loop_run_info;
106 Int64 m_total_loop_size = 0;
107
108 private:
109
110 void _begin();
111 void _doEndKernelLaunch();
112 ThreadBlockInfo _computeThreadBlockInfo() const;
113
114 private:
115
116 // Pour SYCL: enregistre l'évènement associé à la dernière commande de la file
117 // \a sycl_event_ptr est de type 'sycl::event*'.
118 void _addSyclEvent(void* sycl_event_ptr);
119};
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
123
124} // End namespace Arcane::Accelerator::impl
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128
129#endif
Classes, Types et macros pour gérer la concurrence.
Gestion d'une commande sur accélérateur.
Int64 totalLoopSize() const
Taille totale de la boucle.
ThreadBlockInfo threadBlockInfo() const
Informations sur le nombre de block/thread/grille du noyau à lancer.
const ForLoopRunInfo & loopRunInfo() const
Informations d'exécution de la boucle.
Informations d'exécution d'une boucle.
Options d'exécution d'une boucle parallèle en multi-thread.
eExecutionPolicy
Politique d'exécution pour un Runner.
std::int64_t Int64
Type entier signé sur 64 bits.