Arcane  v4.1.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
RunCommandMaterialEnumerate.h
Aller à la documentation de ce fichier.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* RunCommandMaterialEnumerate.h (C) 2000-2025 */
9/* */
10/* Exécution d'une boucle sur une liste de constituants. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_RUNCOMMANDMATERIALENUMERATE_H
13#define ARCANE_ACCELERATOR_RUNCOMMANDMATERIALENUMERATE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/core/materials/ComponentItemVectorView.h"
19#include "arcane/core/materials/MaterialsCoreGlobal.h"
20#include "arcane/core/materials/MatItem.h"
22
23#include "arcane/accelerator/KernelLauncher.h"
24#include "arcane/accelerator/RunCommand.h"
25#include "arcane/accelerator/RunCommandLaunchInfo.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
42template <typename ConstituentItemLocalIdType_>
43class ConstituentAndGlobalCellIteratorValue
44{
45 public:
46
47 using ConstituentItemLocalIdType = ConstituentItemLocalIdType_;
48 using ComponentItemLocalId = Arcane::Materials::ComponentItemLocalId;
49 using MatVarIndex = Arcane::Materials::MatVarIndex;
50
51 public:
52
54 struct Data
55 {
56 public:
57
58 constexpr ARCCORE_HOST_DEVICE Data(ConstituentItemLocalIdType mvi, CellLocalId cid)
59 : m_mvi(mvi)
60 , m_cid(cid)
61 {}
62
63 public:
64
65 ConstituentItemLocalIdType m_mvi;
66 CellLocalId m_cid;
67 };
68
69 public:
70
71 constexpr ARCCORE_HOST_DEVICE ConstituentAndGlobalCellIteratorValue(ConstituentItemLocalIdType mvi, CellLocalId cid, Int32 index)
72 : m_internal_data{ mvi, cid }
73 , m_index(index)
74 {
75 }
76
95 constexpr ARCCORE_HOST_DEVICE Data operator()()
96 {
97 return m_internal_data;
98 }
99
101 constexpr ARCCORE_HOST_DEVICE ConstituentItemLocalIdType varIndex() const { return m_internal_data.m_mvi; };
102
104 constexpr ARCCORE_HOST_DEVICE CellLocalId globalCellId() const { return m_internal_data.m_cid; }
105
107 constexpr ARCCORE_HOST_DEVICE Int32 index() const { return m_index; }
108
109 private:
110
111 Data m_internal_data;
112 Int32 m_index = -1;
113};
114
117
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
123
124} // namespace Arcane::Materials
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128
129namespace Arcane::Accelerator::impl
130{
131
132/*---------------------------------------------------------------------------*/
133/*---------------------------------------------------------------------------*/
137class AllEnvCellRunCommand
138{
139 using AllEnvCellVectorView = Arcane::Materials::AllEnvCellVectorView;
140
141 public:
142
143 using IteratorValueType = Arcane::Materials::AllEnvCell;
144 using ContainerCreateViewType = AllEnvCellVectorView;
145
146 public:
147
151 class Container
152 {
153 public:
154
155 explicit Container(ContainerCreateViewType view)
156 : m_view(view)
157 {
158 }
159
160 public:
161 public:
162
163 constexpr ARCCORE_HOST_DEVICE Int32 size() const { return m_view.size(); }
164
166 ARCCORE_HOST_DEVICE IteratorValueType operator[](Int32 i) const
167 {
168 return m_view[i];
169 }
170
171 private:
172
173 AllEnvCellVectorView m_view;
174 };
175
176 public:
177
178 static AllEnvCellRunCommand create(RunCommand& run_command, const Container& items)
179 {
180 return AllEnvCellRunCommand(run_command, items);
181 }
182
183 private:
184
185 // Uniquement appelable depuis 'Container'
186 explicit AllEnvCellRunCommand(RunCommand& command, const Container& items)
187 : m_command(command)
188 , m_items(items)
189 {
190 }
191
192 public:
193
194 RunCommand& m_command;
195 Container m_items;
196};
197
198/*---------------------------------------------------------------------------*/
199/*---------------------------------------------------------------------------*/
200
201class ConstituentCommandContainerBase
202{
203 protected:
204
205 using ComponentItemVectorView = Arcane::Materials::ComponentItemVectorView;
206 using ComponentItemLocalId = Arcane::Materials::ComponentItemLocalId;
207 using MatVarIndex = Arcane::Materials::MatVarIndex;
208
209 protected:
210
211 explicit ConstituentCommandContainerBase(ComponentItemVectorView view)
212 : m_items(view)
213 {
214 m_nb_item = m_items.nbItem();
215 m_matvar_indexes = m_items._matvarIndexes();
216 m_global_cells_local_id = m_items._internalLocalIds();
217 }
218
219 public:
220
221 constexpr ARCCORE_HOST_DEVICE Int32 size() const { return m_nb_item; }
222
223 protected:
224
225 ComponentItemVectorView m_items;
226 SmallSpan<const MatVarIndex> m_matvar_indexes;
227 SmallSpan<const Int32> m_global_cells_local_id;
228 Int32 m_nb_item = 0;
229};
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
236template <typename ConstituentItemLocalIdType_, typename ContainerCreateViewType_>
237class ConstituentRunCommandBase
238{
239 public:
240
241 using ThatClass = ConstituentRunCommandBase<ConstituentItemLocalIdType_, ContainerCreateViewType_>;
242 using CommandType = ThatClass;
243 using IteratorValueType = ConstituentItemLocalIdType_;
244 using ContainerCreateViewType = ContainerCreateViewType_;
245
246 public:
247
251 class Container
253 {
254 public:
255
256 explicit Container(ContainerCreateViewType view)
258 {
259 }
260
261 public:
262
264 constexpr ARCCORE_HOST_DEVICE IteratorValueType operator[](Int32 i) const
265 {
266 return { ComponentItemLocalId(m_matvar_indexes[i]) };
267 }
268 };
269
270 public:
271
272 static CommandType create(RunCommand& run_command, const Container& items)
273 {
274 return CommandType(run_command, items);
275 }
276
277 private:
278
279 // Uniquement appelable depuis 'Container'
280 explicit ConstituentRunCommandBase(RunCommand& command, const Container& items)
281 : m_command(command)
282 , m_items(items)
283 {
284 }
285
286 public:
287
288 RunCommand& m_command;
289 Container m_items;
290};
291
292using EnvCellRunCommand = ConstituentRunCommandBase<Arcane::Materials::EnvItemLocalId, Arcane::Materials::EnvCellVectorView>;
293using MatCellRunCommand = ConstituentRunCommandBase<Arcane::Materials::MatItemLocalId, Arcane::Materials::MatCellVectorView>;
294
295/*---------------------------------------------------------------------------*/
296/*---------------------------------------------------------------------------*/
300template <typename ConstituentItemLocalIdType_, typename ContainerCreateViewType_>
301class ConstituentAndGlobalCellRunCommandBase
302{
303 public:
304
305 using ThatClass = ConstituentAndGlobalCellRunCommandBase<ConstituentItemLocalIdType_, ContainerCreateViewType_>;
306 using CommandType = ThatClass;
308 using ContainerCreateViewType = ContainerCreateViewType_;
309
310 public:
311
315 class Container
317 {
318 public:
319
320 explicit Container(ContainerCreateViewType view)
322 {
323 }
324
325 public:
326
328 constexpr ARCCORE_HOST_DEVICE IteratorValueType operator[](Int32 i) const
329 {
330 return { ComponentItemLocalId(m_matvar_indexes[i]), CellLocalId(m_global_cells_local_id[i]), i };
331 }
332 };
333
334 public:
335
336 static CommandType create(RunCommand& run_command, const Container& items)
337 {
338 return CommandType(run_command, items);
339 }
340
341 private:
342
343 // Uniquement appelable depuis 'Container'
344 explicit ConstituentAndGlobalCellRunCommandBase(RunCommand& command, const Container& items)
345 : m_command(command)
346 , m_items(items)
347 {
348 }
349
350 public:
351
352 RunCommand& m_command;
353 Container m_items;
354};
355
356/*---------------------------------------------------------------------------*/
357/*---------------------------------------------------------------------------*/
358
359using EnvAndGlobalCellRunCommand = ConstituentAndGlobalCellRunCommandBase<Arcane::Materials::EnvItemLocalId, Arcane::Materials::EnvCellVectorView>;
360using MatAndGlobalCellRunCommand = ConstituentAndGlobalCellRunCommandBase<Arcane::Materials::MatItemLocalId, Arcane::Materials::MatCellVectorView>;
361
362/*---------------------------------------------------------------------------*/
363/*---------------------------------------------------------------------------*/
364
365/*---------------------------------------------------------------------------*/
366/*---------------------------------------------------------------------------*/
376template <typename MatItemType>
378
379/*---------------------------------------------------------------------------*/
380/*---------------------------------------------------------------------------*/
384template <typename CommandType_>
386{
387 public:
388
389 using CommandType = CommandType_;
390 using IteratorValueType = CommandType::IteratorValueType;
391 using ContainerType = CommandType::Container;
392 using ContainerCreateViewType = CommandType::ContainerCreateViewType;
393
394 public:
395
396 static ContainerType createContainer(const ContainerCreateViewType& items)
397 {
398 return ContainerType{ items };
399 }
400};
401
402/*---------------------------------------------------------------------------*/
403/*---------------------------------------------------------------------------*/
404
406template <>
408: public RunCommandConstituentItemTraitsBaseT<EnvAndGlobalCellRunCommand>
409{
410 public:
411
413 using BaseClass::createContainer;
414
415 static ContainerType createContainer(Arcane::Materials::IMeshEnvironment* env)
416 {
417 return ContainerType{ env->envView() };
418 }
419};
420
421/*---------------------------------------------------------------------------*/
422/*---------------------------------------------------------------------------*/
423
425template <>
427: public RunCommandConstituentItemTraitsBaseT<MatAndGlobalCellRunCommand>
428{
429 public:
430
432 using BaseClass::createContainer;
433
434 static ContainerType createContainer(Arcane::Materials::IMeshMaterial* mat)
435 {
436 return ContainerType{ mat->matView() };
437 }
438};
439
440/*---------------------------------------------------------------------------*/
441/*---------------------------------------------------------------------------*/
442
444template <>
449
450/*---------------------------------------------------------------------------*/
451/*---------------------------------------------------------------------------*/
452
454template <>
456: public RunCommandConstituentItemTraitsBaseT<EnvCellRunCommand>
457{
458 public:
459
461 using BaseClass::createContainer;
462
463 public:
464
465 static ContainerType createContainer(Arcane::Materials::IMeshEnvironment* env)
466 {
467 return ContainerType(env->envView());
468 }
469};
470
471/*---------------------------------------------------------------------------*/
472/*---------------------------------------------------------------------------*/
473
475template <>
477: public RunCommandConstituentItemTraitsBaseT<MatCellRunCommand>
478{
479 public:
480
482 using BaseClass::createContainer;
483
484 static ContainerType createContainer(Arcane::Materials::IMeshMaterial* mat)
485 {
486 return ContainerType(mat->matView());
487 }
488};
489
490/*---------------------------------------------------------------------------*/
491/*---------------------------------------------------------------------------*/
492
493#if defined(ARCANE_COMPILING_CUDA) || defined(ARCANE_COMPILING_HIP)
494/*
495 * Surcharge de la fonction de lancement de kernel pour GPU pour les ComponentItemLocalId et CellLocalId
496 */
497template <typename ContainerType, typename Lambda, typename... RemainingArgs> __global__ void
498doMatContainerGPULambda(ContainerType items, Lambda func, RemainingArgs... remaining_args)
499{
500 auto privatizer = privatize(func);
501 auto& body = privatizer.privateCopy();
502
503 Int32 i = blockDim.x * blockIdx.x + threadIdx.x;
504 if (i < items.size()) {
505 body(items[i], remaining_args...);
506 }
508}
509
510#endif // ARCANE_COMPILING_CUDA || ARCANE_COMPILING_HIP
511
512/*---------------------------------------------------------------------------*/
513/*---------------------------------------------------------------------------*/
514
515#if defined(ARCANE_COMPILING_SYCL)
516
517template <typename ContainerType, typename Lambda, typename... RemainingArgs>
518class DoMatContainerSYCLLambda
519{
520 public:
521
522 void operator()(sycl::nd_item<1> x, ContainerType items, Lambda func, RemainingArgs... remaining_args) const
523 {
524 auto privatizer = privatize(func);
525 auto& body = privatizer.privateCopy();
526
527 Int32 i = static_cast<Int32>(x.get_global_id(0));
528 if (i < items.size()) {
529 body(items[i], remaining_args...);
530 }
531 KernelRemainingArgsHelper::applyRemainingArgs(x, remaining_args...);
532 }
533
534 void operator()(sycl::id<1> x, ContainerType items, Lambda func) const
535 {
536 auto privatizer = privatize(func);
537 auto& body = privatizer.privateCopy();
538
539 Int32 i = static_cast<Int32>(x);
540 if (i < items.size()) {
541 body(items[i]);
542 }
543 }
544};
545
546#endif
547
548/*---------------------------------------------------------------------------*/
549/*---------------------------------------------------------------------------*/
550
551template <typename ContainerType, typename Lambda, typename... RemainingArgs>
552void _doConstituentItemsLambda(Int32 base_index, Int32 size, ContainerType items,
553 const Lambda& func, RemainingArgs... remaining_args)
554{
555 auto privatizer = privatize(func);
556 auto& body = privatizer.privateCopy();
557
558 Int32 last_value = base_index + size;
559 for (Int32 i = base_index; i < last_value; ++i) {
560 body(items[i], remaining_args...);
561 }
563}
564
565/*---------------------------------------------------------------------------*/
566/*---------------------------------------------------------------------------*/
567
568template <typename TraitsType, typename... RemainingArgs>
569class GenericConstituentCommandArgs
570{
571 public:
572
573 using ContainerType = typename TraitsType::ContainerType;
574
575 public:
576
577 explicit GenericConstituentCommandArgs(const ContainerType& container, const RemainingArgs&... remaining_args)
578 : m_container(container)
579 , m_remaining_args(remaining_args...)
580 {}
581
582 public:
583
584 ContainerType m_container;
585 std::tuple<RemainingArgs...> m_remaining_args;
586};
587
588/*---------------------------------------------------------------------------*/
589/*---------------------------------------------------------------------------*/
590
591template <typename ConstituentCommandType, typename... RemainingArgs>
592class GenericConstituentCommand
593{
594 public:
595
596 using ContainerType = typename ConstituentCommandType::Container;
597
598 public:
599
600 explicit GenericConstituentCommand(const ConstituentCommandType& command)
601 : m_command(command)
602 {}
603 explicit GenericConstituentCommand(const ConstituentCommandType& command, const std::tuple<RemainingArgs...>& remaining_args)
604 : m_command(command)
605 , m_remaining_args(remaining_args)
606 {}
607
608 public:
609
610 ConstituentCommandType m_command;
611 std::tuple<RemainingArgs...> m_remaining_args;
612};
613
614/*---------------------------------------------------------------------------*/
615/*---------------------------------------------------------------------------*/
625template <typename ContainerType, typename Lambda, typename... RemainingArgs> void
626_applyConstituentCells(RunCommand& command, ContainerType items, const Lambda& func, const RemainingArgs&... remaining_args)
627{
628 using namespace Arcane::Materials;
629 // TODO: fusionner la partie commune avec 'applyLoop'
630 Int32 vsize = items.size();
631 if (vsize == 0)
632 return;
633
634 RunCommandLaunchInfo launch_info(command, vsize);
635 const eExecutionPolicy exec_policy = launch_info.executionPolicy();
636 launch_info.beginExecute();
637 switch (exec_policy) {
639 _applyKernelCUDA(launch_info, ARCANE_KERNEL_CUDA_FUNC(doMatContainerGPULambda) < ContainerType, Lambda, RemainingArgs... >,
640 func, items, remaining_args...);
641 break;
643 _applyKernelHIP(launch_info, ARCANE_KERNEL_HIP_FUNC(doMatContainerGPULambda) < ContainerType, Lambda, RemainingArgs... >,
644 func, items, remaining_args...);
645 break;
647 _applyKernelSYCL(launch_info, ARCANE_KERNEL_SYCL_FUNC(impl::DoMatContainerSYCLLambda) < ContainerType, Lambda, RemainingArgs... > {},
648 func, items, remaining_args...);
649 break;
651 _doConstituentItemsLambda(0, vsize, items, func, remaining_args...);
652 break;
654 arcaneParallelFor(0, vsize, launch_info.loopRunInfo(),
655 [&](Int32 begin, Int32 size) {
656 _doConstituentItemsLambda(begin, size, items, func, remaining_args...);
657 });
658 break;
659 default:
660 ARCANE_FATAL("Invalid execution policy '{0}'", exec_policy);
661 }
662 launch_info.endExecute();
663}
664
665/*---------------------------------------------------------------------------*/
666/*---------------------------------------------------------------------------*/
667
668template <typename ConstituentCommandType, typename... RemainingArgs, typename Lambda>
669void operator<<(const GenericConstituentCommand<ConstituentCommandType, RemainingArgs...>& c, const Lambda& func)
670{
671 if constexpr (sizeof...(RemainingArgs) > 0) {
672 std::apply([&](auto... vs) {
673 impl::_applyConstituentCells(c.m_command.m_command, c.m_command.m_items, func, vs...);
674 },
675 c.m_remaining_args);
676 }
677 else
678 impl::_applyConstituentCells(c.m_command.m_command, c.m_command.m_items, func);
679}
680
681/*---------------------------------------------------------------------------*/
682/*---------------------------------------------------------------------------*/
683
684template <typename ConstituentItemType, typename ConstituentItemContainerType, typename... RemainingArgs> auto
685makeExtendedConstituentItemEnumeratorLoop(const ConstituentItemContainerType& container,
686 const RemainingArgs&... remaining_args)
687{
689 return GenericConstituentCommandArgs<TraitsType, RemainingArgs...>(TraitsType::createContainer(container), remaining_args...);
690}
691
692/*---------------------------------------------------------------------------*/
693/*---------------------------------------------------------------------------*/
694
695} // namespace Arcane::Accelerator::impl
696
697/*---------------------------------------------------------------------------*/
698/*---------------------------------------------------------------------------*/
699
700namespace Arcane::Accelerator
701{
702
703/*---------------------------------------------------------------------------*/
704/*---------------------------------------------------------------------------*/
705
706template <typename TraitsType, typename... RemainingArgs> auto
708{
709 using CommandType = typename TraitsType::CommandType;
710 using GenericCommandType = impl::GenericConstituentCommand<CommandType, RemainingArgs...>;
711 return GenericCommandType(CommandType::create(command, args.m_container), args.m_remaining_args);
712}
713
714/*---------------------------------------------------------------------------*/
715/*---------------------------------------------------------------------------*/
716
717// TODO: rendre obsolète (il faut utiliser la version générique)
718inline auto
719operator<<(RunCommand& command, const impl::MatAndGlobalCellRunCommand::Container& view)
720{
721 using CommandType = impl::MatAndGlobalCellRunCommand;
722 return impl::GenericConstituentCommand<CommandType>(CommandType::create(command, view));
723}
724
725/*---------------------------------------------------------------------------*/
726/*---------------------------------------------------------------------------*/
727
728// TODO: rendre obsolète (il faut utiliser la version générique)
729inline auto
730operator<<(RunCommand& command, const impl::EnvAndGlobalCellRunCommand::Container& view)
731{
732 using CommandType = impl::EnvAndGlobalCellRunCommand;
733 return impl::GenericConstituentCommand<CommandType>(CommandType::create(command, view));
734}
735
736/*---------------------------------------------------------------------------*/
737/*---------------------------------------------------------------------------*/
738
739// TODO: rendre obsolète (il faut utiliser la version générique)
740inline auto
741operator<<(RunCommand& command, const impl::EnvCellRunCommand::Container& view)
742{
743 using CommandType = impl::EnvCellRunCommand;
744 return impl::GenericConstituentCommand<CommandType>(CommandType::create(command, view));
745}
746
747/*---------------------------------------------------------------------------*/
748/*---------------------------------------------------------------------------*/
749
750// TODO: rendre obsolète (il faut utiliser la version générique)
751inline auto
752operator<<(RunCommand& command, const impl::MatCellRunCommand::Container& view)
753{
754 using CommandType = impl::MatCellRunCommand;
755 return impl::GenericConstituentCommand<CommandType>(CommandType::create(command, view));
756}
757
758/*---------------------------------------------------------------------------*/
759/*---------------------------------------------------------------------------*/
760
761} // End namespace Arcane::Accelerator
762
763/*---------------------------------------------------------------------------*/
764/*---------------------------------------------------------------------------*/
765
786#define RUNCOMMAND_MAT_ENUMERATE(ConstituentItemNameType, iter_name, env_or_mat_container, ...) \
787 A_FUNCINFO << ::Arcane::Accelerator::impl::makeExtendedConstituentItemEnumeratorLoop<ConstituentItemNameType>(env_or_mat_container __VA_OPT__(, __VA_ARGS__)) \
788 << [=] ARCCORE_HOST_DEVICE(::Arcane::Accelerator::impl::RunCommandConstituentItemEnumeratorTraitsT<ConstituentItemNameType>::IteratorValueType iter_name \
789 __VA_OPT__(ARCANE_RUNCOMMAND_REDUCER_FOR_EACH(__VA_ARGS__)))
790
791/*---------------------------------------------------------------------------*/
792/*---------------------------------------------------------------------------*/
793
794#endif
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classes, Types et macros pour gérer la concurrence.
void _applyConstituentCells(RunCommand &command, ContainerType items, const Lambda &func, const RemainingArgs &... remaining_args)
Applique l'énumération func sur la liste d'entité items.
Gestion d'une commande sur accélérateur.
__host__ __device__ IteratorValueType operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
constexpr __host__ __device__ IteratorValueType operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
constexpr __host__ __device__ IteratorValueType operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
static ARCCORE_DEVICE void applyRemainingArgs(Int32 index, RemainingArgs &... remaining_args)
Applique les fonctors des arguments additionnels.
Caractéristiques d'un énumérateur d'une commande sur les matériaux/milieux.
Classe de base des caractéristiques des commandes sur les constituants.
Object temporaire pour conserver les informations d'exécution d'une commande et regrouper les tests.
void beginExecute()
Indique qu'on commence l'exécution de la commande.
void endExecute()
Signale la fin de l'exécution.
const ForLoopRunInfo & loopRunInfo() const
Informations d'exécution de la boucle.
Vue sur une liste de mailles avec infos sur les milieux.
Maille arcane avec info matériaux et milieux.
Vue sur un vecteur sur les entités d'un composant.
Index d'une boucle accélérateur sur les matériaux ou milieux.
constexpr __host__ __device__ Int32 index() const
Index de l'itération courante.
constexpr __host__ __device__ CellLocalId globalCellId() const
Accesseur sur la partie cell local id.
constexpr __host__ __device__ Data operator()()
Cet opérateur permet de renvoyer le couple [ConstituentItemLocalIdType, CellLocalId].
constexpr __host__ __device__ ConstituentItemLocalIdType varIndex() const
Accesseur sur la partie MatVarIndex.
Maille arcane d'un milieu.
virtual EnvItemVectorView envView() const =0
Vue associée à ce milieu.
Interface d'un matériau d'un maillage.
virtual MatItemVectorView matView() const =0
Vue associée à ce matériau.
Représente un matériau d'une maille multi-matériau.
Représente un index sur les variables matériaux et milieux.
Vue d'un tableau d'éléments de type T.
Definition Span.h:774
static void applyReducerArgs(ReducerArgs &... reducer_args)
Applique les fonctors des arguments additionnels.
void arcaneParallelFor(Integer i0, Integer size, InstanceType *itype, void(InstanceType::*lambda_function)(Integer i0, Integer size))
Applique en concurrence la fonction lambda lambda_function sur l'intervalle d'itération [i0,...
Espace de nom pour l'utilisation des accélérateurs.
std::ostream & operator<<(std::ostream &o, eExecutionPolicy exec_policy)
Affiche le nom de la politique d'exécution.
eExecutionPolicy
Politique d'exécution pour un Runner.
@ SYCL
Politique d'exécution utilisant l'environnement SYCL.
@ HIP
Politique d'exécution utilisant l'environnement HIP.
@ CUDA
Politique d'exécution utilisant l'environnement CUDA.
@ Sequential
Politique d'exécution séquentielle.
@ Thread
Politique d'exécution multi-thread.
Active toujours les traces dans les parties Arcane concernant les matériaux.
ConstituentAndGlobalCellIteratorValue< EnvItemLocalId > EnvAndGlobalCellIteratorValue
Type de la valeur de l'itérateur pour RUNCOMMAND_MAT_ENUMERATE(EnvAndGlobalCell,.....
ConstituentAndGlobalCellIteratorValue< MatItemLocalId > MatAndGlobalCellIteratorValue
Type de la valeur de l'itérateur pour RUNCOMMAND_MAT_ENUMERATE(MatAndGlobalCell,.....
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int32_t Int32
Type entier signé sur 32 bits.