Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MatConcurrency.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* MatConcurrency.h (C) 2000-2021 */
9/* */
10/* Classes gérant la concurrence pour les matériaux. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MATERIALS_MATCONCURRENCY_H
13#define ARCANE_MATERIALS_MATCONCURRENCY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/utils/RangeFunctor.h"
19#include "arcane/utils/FatalErrorException.h"
20
21#include "arcane/Concurrency.h"
22
23#include "arcane/materials/MatItemEnumerator.h"
24#include "arcane/materials/ComponentItemVectorView.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane::Materials
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34/*!
35 * \brief Fonctor sur un interval d'itération instancié via une lambda fonction.
36 *
37 * Le type \a ViewType doit être choisi parmi ComponentItemVectorView,
38 * MatItemVectorView ou EnvItemVectorView.
39 */
40template<typename ViewType,typename LambdaType>
42: public IRangeFunctor
43{
44 public:
45 LambdaMatItemRangeFunctorT(ViewType items_view,const LambdaType& lambda_function)
46 : m_items(items_view), m_lambda_function(lambda_function)
47 {
48 }
49
50 public:
51
52 virtual void executeFunctor(Integer begin,Integer size)
53 {
54 ViewType sub_view(m_items._subView(begin,size));
55 m_lambda_function(sub_view);
56 }
57
58 private:
59 ViewType m_items;
60 const LambdaType& m_lambda_function;
61};
62
63/*---------------------------------------------------------------------------*/
64/*---------------------------------------------------------------------------*/
65
66} // End namespace Arcane::Materials
67
68/*---------------------------------------------------------------------------*/
69/*---------------------------------------------------------------------------*/
70
71namespace Arcane
72{
73 using namespace Materials;
74 /*!
75 * \brief Applique en concurrence la fonction lambda \a lambda_function
76 * \a instance sur la vue du composant \a items_view.
77 * \ingroup Concurrency
78 */
79 template<typename LambdaType> inline void
80 arcaneParallelForeach(const ComponentItemVectorView& items_view,const LambdaType& lambda_function)
81 {
82 LambdaMatItemRangeFunctorT<ComponentItemVectorView,LambdaType> ipf(items_view,lambda_function);
83 TaskFactory::executeParallelFor(0,items_view.nbItem(),&ipf);
84 }
85
86 /*!
87 * \brief Applique en concurrence la fonction lambda \a lambda_function
88 * \a instance sur la vue du composant \a items_view avec les options \a options.
89 * \ingroup Concurrency
90 */
91 template<typename LambdaType> inline void
92 arcaneParallelForeach(const ComponentItemVectorView& items_view,const ParallelLoopOptions& options,
93 const LambdaType& lambda_function)
94 {
95 LambdaMatItemRangeFunctorT<ComponentItemVectorView,LambdaType> ipf(items_view,lambda_function);
96 TaskFactory::executeParallelFor(0,items_view.nbItem(),options,&ipf);
97 }
98
99 /*!
100 * \brief Applique en concurrence la fonction lambda \a lambda_function
101 * \a instance sur la vue milieux \a items_view.
102 * \ingroup Concurrency
103 */
104 template<typename LambdaType> inline void
105 arcaneParallelForeach(const EnvItemVectorView& items_view,const LambdaType& lambda_function)
106 {
107 LambdaMatItemRangeFunctorT<EnvItemVectorView,LambdaType> ipf(items_view,lambda_function);
108 TaskFactory::executeParallelFor(0,items_view.nbItem(),&ipf);
109 }
110
111 /*!
112 * \brief Applique en concurrence la fonction lambda \a lambda_function
113 * \a instance sur la vue milieux \a items_view avec les options \a options.
114 * \ingroup Concurrency
115 */
116 template<typename LambdaType> inline void
117 arcaneParallelForeach(const EnvItemVectorView& items_view,const ParallelLoopOptions& options,
118 const LambdaType& lambda_function)
119 {
120 LambdaMatItemRangeFunctorT<EnvItemVectorView,LambdaType> ipf(items_view,lambda_function);
121 TaskFactory::executeParallelFor(0,items_view.nbItem(),options,&ipf);
122 }
123
124 /*!
125 * \brief Applique en concurrence la fonction lambda \a lambda_function
126 * \a instance sur la vue matériaux \a items_view.
127 * \ingroup Concurrency
128 */
129 template<typename LambdaType> inline void
130 arcaneParallelForeach(const MatItemVectorView& items_view,const LambdaType& lambda_function)
131 {
132 LambdaMatItemRangeFunctorT<MatItemVectorView,LambdaType> ipf(items_view,lambda_function);
133 TaskFactory::executeParallelFor(0,items_view.nbItem(),&ipf);
134 }
135
136 /*!
137 * \brief Applique en concurrence la fonction lambda \a lambda_function
138 * \a instance sur la vue matériaux \a items_view avec les options \a options.
139 * \ingroup Concurrency
140 */
141 template<typename LambdaType> inline void
142 arcaneParallelForeach(const MatItemVectorView& items_view,const ParallelLoopOptions& options,
143 const LambdaType& lambda_function)
144 {
145 LambdaMatItemRangeFunctorT<MatItemVectorView,LambdaType> ipf(items_view,lambda_function);
146 TaskFactory::executeParallelFor(0,items_view.nbItem(),options,&ipf);
147 }
148} // End namespace Arcane
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152
153namespace Arcane::Parallel
154{
155 using namespace Materials;
156 using namespace Arcane;
157
158 /*!
159 * \brief Applique en concurrence la fonction lambda \a lambda_function
160 * \a instance sur la vue du composant \a items_view.
161 * \ingroup Concurrency
162 */
163 template<typename LambdaType> inline void
164 Foreach(const ComponentItemVectorView& items_view,const LambdaType& lambda_function)
165 {
166 arcaneParallelForeach(items_view,lambda_function);
167 }
168
169 /*!
170 * \brief Applique en concurrence la fonction lambda \a lambda_function
171 * \a instance sur la vue du composant \a items_view avec les options \a options.
172 * \ingroup Concurrency
173 */
174 template<typename LambdaType> inline void
175 Foreach(const ComponentItemVectorView& items_view,const ParallelLoopOptions& options,
176 const LambdaType& lambda_function)
177 {
178 arcaneParallelForeach(items_view,options,lambda_function);
179 }
180
181 /*!
182 * \brief Applique en concurrence la fonction lambda \a lambda_function
183 * \a instance sur la vue milieux \a items_view.
184 * \ingroup Concurrency
185 */
186 template<typename LambdaType> inline void
187 Foreach(const EnvItemVectorView& items_view,const LambdaType& lambda_function)
188 {
189 arcaneParallelForeach(items_view,lambda_function);
190 }
191
192 /*!
193 * \brief Applique en concurrence la fonction lambda \a lambda_function
194 * \a instance sur la vue milieux \a items_view avec les options \a options.
195 * \ingroup Concurrency
196 */
197 template<typename LambdaType> inline void
198 Foreach(const EnvItemVectorView& items_view,const ParallelLoopOptions& options,
199 const LambdaType& lambda_function)
200 {
201 arcaneParallelForeach(items_view,options,lambda_function);
202 }
203
204 /*!
205 * \brief Applique en concurrence la fonction lambda \a lambda_function
206 * \a instance sur la vue matériaux \a items_view.
207 * \ingroup Concurrency
208 */
209 template<typename LambdaType> inline void
210 Foreach(const MatItemVectorView& items_view,const LambdaType& lambda_function)
211 {
212 arcaneParallelForeach(items_view,lambda_function);
213 }
214
215 /*!
216 * \brief Applique en concurrence la fonction lambda \a lambda_function
217 * \a instance sur la vue matériaux \a items_view avec les options \a options.
218 * \ingroup Concurrency
219 */
220 template<typename LambdaType> inline void
221 Foreach(const MatItemVectorView& items_view,const ParallelLoopOptions& options,
222 const LambdaType& lambda_function)
223 {
224 arcaneParallelForeach(items_view,options,lambda_function);
225 }
226
227} // End namespace Arcane::Parallel
228
229/*---------------------------------------------------------------------------*/
230/*---------------------------------------------------------------------------*/
231
232#endif
233
Déclarations des types utilisés dans Arcane.
Interface d'un fonctor sur un interval d'itération.
Vue sur un vecteur sur les entités d'un composant.
Vue sur un vecteur sur les entités d'un milieu.
Fonctor sur un interval d'itération instancié via une lambda fonction.
virtual void executeFunctor(Integer begin, Integer size)
Exécute la méthode associée.
Vue sur un vecteur sur les entités d'un matériau.
Options d'exécution d'une boucle parallèle en multi-thread.
static void executeParallelFor(Integer begin, Integer size, const ParallelLoopOptions &options, IRangeFunctor *f)
Exécute le fonctor f en concurrence.
void arcaneParallelForeach(const ItemVectorView &items_view, const ForLoopRunInfo &run_info, InstanceType *instance, void(InstanceType::*function)(ItemVectorViewT< ItemType > items))
Applique en concurrence la méthode function de l'instance instance sur la vue items_view avec les opt...
Definition Concurrency.h:54
Active toujours les traces dans les parties Arcane concernant les matériaux.
Implémentation de la concurrence.
void Foreach(const ItemVectorView &items_view, const ParallelLoopOptions &options, InstanceType *instance, void(InstanceType::*function)(ItemVectorViewT< ItemType > items))
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Ensemble des classes assurant la gestion des matériaux et des milieux.