Arcane  v3.14.10.0
Documentation utilisateur
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-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/* RunCommandMaterialEnumerate.h (C) 2000-2024 */
9/* */
10/* Helpers et macros pour exécuter une boucle sur une liste d'envcell */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_RUNCOMMANDMATERIALENUMERATE_H
13#define ARCANE_ACCELERATOR_RUNCOMMANDMATERIALENUMERATE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArcaneCxx20.h"
18
20#include "arcane/core/materials/ComponentItemVectorView.h"
21#include "arcane/core/materials/MaterialsCoreGlobal.h"
22#include "arcane/core/materials/MatItem.h"
24
25#include "arcane/accelerator/RunQueueInternal.h"
26#include "arcane/accelerator/RunCommand.h"
27#include "arcane/accelerator/RunCommandLaunchInfo.h"
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane::Accelerator::impl
33{
34
36{
37 protected:
38
42
43 protected:
44
46 : m_items(view)
47 {
48 _init();
49 }
50
51 public:
52
53 constexpr ARCCORE_HOST_DEVICE Int32 size() const { return m_nb_item; }
54
55 protected:
56
58 SmallSpan<const MatVarIndex> m_matvar_indexes;
59 SmallSpan<const Int32> m_global_cells_local_id;
60 Int32 m_nb_item = 0;
61
62 private:
63
64 void _init()
65 {
66 m_nb_item = m_items.nbItem();
67 m_matvar_indexes = m_items._matvarIndexes();
68 m_global_cells_local_id = m_items._internalLocalIds();
69 }
70};
71
72/*---------------------------------------------------------------------------*/
73/*---------------------------------------------------------------------------*/
74/*!
75 * \brief Caractéristiques d'un énumérateur d'une commande sur les matériaux/milieux.
76 *
77 * Cette classe doit être spécialisée et définit un type \a EnumeratorType
78 * qui correspond à l'énumérateur.
79 */
80template <typename MatItemType>
82
83/*---------------------------------------------------------------------------*/
84/*---------------------------------------------------------------------------*/
85/*!
86 * \brief Commande pour itérer sur les AllEnvCell.
87 */
89{
90 public:
91
96
97 public:
98
99 /*!
100 * \brief Conteneur contenant les informations nécessaires pour la commande.
101 */
103 {
104 public:
105
106 explicit Container(AllEnvCellVectorView view)
107 : m_view(view)
108 {
109 }
110
111 public:
112
113 AllEnvCellRunCommand createCommand(RunCommand& run_command) const
114 {
115 return AllEnvCellRunCommand(run_command, *this);
116 }
117
118 public:
119
120 ARCCORE_HOST_DEVICE Int32 size() const { return m_view.size(); }
121
122 //! Accesseur pour le i-ème élément de la liste
123 ARCCORE_HOST_DEVICE AllEnvCell operator[](Int32 i) const
124 {
125 return m_view[i];
126 }
127
128 private:
129
131 };
132
133 private:
134
135 // Uniquement appelable depuis 'Container'
136 explicit AllEnvCellRunCommand(RunCommand& command, const Container& items)
137 : m_command(command)
138 , m_items(items)
139 {
140 }
141
142 public:
143
144 RunCommand& m_command;
145 Container m_items;
146};
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150/*!
151 * \brief Commande pour itérer sur les EnvCell.
152 */
154{
155 public:
156
162
163 public:
164
165 /*!
166 * \brief Conteneur contenant les informations nécessaires pour la commande.
167 */
170 {
171 public:
172
173 explicit Container(IMeshEnvironment* env)
175 {
176 }
177 explicit Container(EnvCellVectorView view)
179 {
180 }
181
182 public:
183
184 EnvCellRunCommand createCommand(RunCommand& run_command) const
185 {
186 return EnvCellRunCommand(run_command, *this);
187 }
188
189 public:
190
191 //! Accesseur pour le i-ème élément de la liste
192 constexpr ARCCORE_HOST_DEVICE ComponentItemLocalId operator[](Int32 i) const
193 {
194 return { ComponentItemLocalId(m_matvar_indexes[i]) };
195 }
196 };
197
198 private:
199
200 // Uniquement appelable depuis 'Container'
201 explicit EnvCellRunCommand(RunCommand& command, const Container& items)
202 : m_command(command)
203 , m_items(items)
204 {
205 }
206
207 public:
208
209 RunCommand& m_command;
210 Container m_items;
211};
212
213/*---------------------------------------------------------------------------*/
214/*---------------------------------------------------------------------------*/
215/*!
216 * \brief Commande pour itérer sur les MatCell.
217 */
219{
220 public:
221
227
228 public:
229
230 /*!
231 * \brief Conteneur contenant les informations nécessaires pour la commande.
232 */
235 {
236 public:
237
238 explicit Container(IMeshMaterial* mat)
240 {
241 }
242 explicit Container(MatCellVectorView view)
244 {
245 }
246
247 public:
248
249 MatCellRunCommand createCommand(RunCommand& run_command) const
250 {
251 return MatCellRunCommand(run_command, *this);
252 }
253
254 public:
255
256 //! Accesseur pour le i-ème élément de la liste
257 constexpr ARCCORE_HOST_DEVICE ComponentItemLocalId operator[](Int32 i) const
258 {
259 return { ComponentItemLocalId(m_matvar_indexes[i]) };
260 }
261 };
262
263 private:
264
265 // Uniquement appelable depuis 'Container'
266 explicit MatCellRunCommand(RunCommand& command, const Container& items)
267 : m_command(command)
268 , m_items(items)
269 {
270 }
271
272 public:
273
274 RunCommand& m_command;
275 Container m_items;
276};
277
278/*---------------------------------------------------------------------------*/
279/*---------------------------------------------------------------------------*/
280/*!
281 * \brief Commande pour itérer sur les EnvCell et récupérer aussi l'information
282 * sur la maille globale associée.
283 */
285{
286 public:
287
293
294 public:
295
296 /*!
297 * \brief Classe helper pour l'accès au MatVarIndex et au CellLocalId à travers les
298 * RUNCOMMAND_MAT_ENUMERATE(EnvAndGlobalCell...
299 */
301 {
302
303 public:
304
305 //! Struct interne simple pour éviter l'usage d'un std::tuple pour l'opérateur()
306 struct Data
307 {
309 CellLocalId m_cid;
310 };
311
312 public:
313
314 constexpr ARCCORE_HOST_DEVICE Accessor(ComponentItemLocalId mvi, CellLocalId cid, Int32 index)
315 : m_internal_data{ mvi, cid }
316 , m_index(index)
317 {
318 }
319
320 /*!
321 * \brief Cet opérateur permet de renvoyer le couple [MatVarIndex, LocalCellId].
322 *
323 * L'utilisation classique est :
324 *
325 * \code
326 * cmd << RUNCOMMAND_MAT_ENUMERATE(EnvAndGlobalCell, evi, envcellsv) {
327 * auto [mvi, cid] = evi();
328 * }
329 * \endcode
330 *
331 * où evi est le type de cette classe
332 */
333 ARCCORE_HOST_DEVICE Data operator()()
334 {
335 return { m_internal_data.m_mvi, m_internal_data.m_cid };
336 }
337
338 //! Accesseur sur la partie MatVarIndex
339 ARCCORE_HOST_DEVICE ComponentItemLocalId varIndex() const { return m_internal_data.m_mvi; };
340
341 //! Accesseur sur la partie cell local id
342 ARCCORE_HOST_DEVICE CellLocalId globalCellId() const { return m_internal_data.m_cid; }
343
344 //! Index de l'itération courante
345 ARCCORE_HOST_DEVICE Int32 index() const { return m_index; }
346
347 private:
348
349 Data m_internal_data;
350 Int32 m_index = -1;
351 };
352
353 /*!
354 * \brief Conteneur contenant les informations nécessaires pour la commande.
355 */
358 {
359 public:
360
361 explicit Container(IMeshEnvironment* env)
363 {
364 }
365 explicit Container(EnvCellVectorView view)
367 {
368 }
369
370 public:
371
372 EnvAndGlobalCellRunCommand createCommand(RunCommand& run_command) const
373 {
374 return EnvAndGlobalCellRunCommand(run_command, *this);
375 }
376
377 public:
378
379 //! Accesseur pour le i-ème élément de la liste
380 constexpr ARCCORE_HOST_DEVICE Accessor operator[](Int32 i) const
381 {
382 return { ComponentItemLocalId(m_matvar_indexes[i]), CellLocalId(m_global_cells_local_id[i]), i };
383 }
384 };
385
386 private:
387
388 // Uniquement appelable depuis 'Container'
389 explicit EnvAndGlobalCellRunCommand(RunCommand& command, const Container& items)
390 : m_command(command)
391 , m_items(items)
392 {
393 }
394
395 public:
396
397 RunCommand& m_command;
398 Container m_items;
399};
400
401/*---------------------------------------------------------------------------*/
402/*---------------------------------------------------------------------------*/
403/*!
404 * \brief Commande pour itérer sur les MatCell et récupérer aussi l'information
405 * sur la maille globale associée.
406 */
408{
409 public:
410
416
417 public:
418
419 /*!
420 * \brief Classe helper pour l'accès au MatVarIndex et au CellLocalId à travers les
421 * RUNCOMMAND_MAT_ENUMERATE(EnvAndGlobalCell...
422 */
424 {
425
426 public:
427
428 //! Struct interne simple pour éviter l'usage d'un std::tuple pour l'opérateur()
429 struct Data
430 {
432 CellLocalId m_cid;
433 };
434
435 public:
436
437 constexpr ARCCORE_HOST_DEVICE Accessor(ComponentItemLocalId mvi, CellLocalId cid, Int32 index)
438 : m_internal_data{ mvi, cid }
439 , m_index(index)
440 {
441 }
442
443 /*!
444 * \brief Cet opérateur permet de renvoyer le couple [MatVarIndex, LocalCellId].
445 *
446 * L'utilisation classique est :
447 *
448 * \code
449 * cmd << RUNCOMMAND_MAT_ENUMERATE(EnvAndGlobalCell, evi, envcellsv) {
450 * auto [mvi, cid] = evi();
451 * }
452 * \endcode
453 *
454 * où evi est le type de cette classe
455 */
456 ARCCORE_HOST_DEVICE Data operator()()
457 {
458 return { m_internal_data.m_mvi, m_internal_data.m_cid };
459 }
460
461 ///! Accesseur sur la partie MatVarIndex
462 ARCCORE_HOST_DEVICE ComponentItemLocalId varIndex() const { return m_internal_data.m_mvi; };
463
464 ///! Accesseur sur la partie cell local id
465 ARCCORE_HOST_DEVICE CellLocalId globalCellId() const { return m_internal_data.m_cid; }
466
467 //! Index de l'itération courante
468 ARCCORE_HOST_DEVICE Int32 index() const { return m_index; }
469
470 private:
471
472 Data m_internal_data;
473 Int32 m_index = -1;
474 };
475
476 /*!
477 * \brief Conteneur contenant les informations nécessaires pour la commande.
478 */
481 {
482 public:
483
484 explicit Container(IMeshMaterial* env)
486 {
487 }
488 explicit Container(MatCellVectorView view)
490 {
491 }
492
493 public:
494
495 MatAndGlobalCellRunCommand createCommand(RunCommand& run_command) const
496 {
497 return MatAndGlobalCellRunCommand(run_command, *this);
498 }
499
500 public:
501
502 //! Accesseur pour le i-ème élément de la liste
503 constexpr ARCCORE_HOST_DEVICE Accessor operator[](Int32 i) const
504 {
505 return { ComponentItemLocalId(m_matvar_indexes[i]), CellLocalId(m_global_cells_local_id[i]), i };
506 }
507 };
508
509 private:
510
511 // Uniquement appelable depuis 'Container'
512 explicit MatAndGlobalCellRunCommand(RunCommand& command, const Container& items)
513 : m_command(command)
514 , m_items(items)
515 {
516 }
517
518 public:
519
520 RunCommand& m_command;
521 Container m_items;
522};
523
524/*---------------------------------------------------------------------------*/
525/*---------------------------------------------------------------------------*/
526
527//! Spécialisation pour une vue sur un milieu et la maille globale associée
528template <>
530{
531 public:
532
536
537 public:
538
539 static ContainerType createContainer(const Arcane::Materials::EnvCellVectorView& items)
540 {
541 return ContainerType{ items };
542 }
543 static ContainerType createContainer(Arcane::Materials::IMeshEnvironment* env)
544 {
545 return ContainerType{ env };
546 }
547};
548
549/*---------------------------------------------------------------------------*/
550/*---------------------------------------------------------------------------*/
551
552//! Spécialisation pour une vue sur un matériau et la maille globale associée
553template <>
555{
556 public:
557
561
562 public:
563
564 static ContainerType createContainer(const Arcane::Materials::MatCellVectorView& items)
565 {
566 return ContainerType{ items };
567 }
568 static ContainerType createContainer(Arcane::Materials::IMeshMaterial* env)
569 {
570 return ContainerType{ env };
571 }
572};
573
574/*---------------------------------------------------------------------------*/
575/*---------------------------------------------------------------------------*/
576
577//! Spécialisation pour une vue sur les AllEvnCell
578template <>
580{
581 public:
582
586
587 public:
588
589 static ContainerType createContainer(const Arcane::Materials::AllEnvCellVectorView& items)
590 {
591 return ContainerType{ items };
592 }
593};
594
595/*---------------------------------------------------------------------------*/
596/*---------------------------------------------------------------------------*/
597
598//! Spécialisation pour une vue sur un milieu.
599template <>
601{
602 public:
603
607
608 public:
609
610 static ContainerType createContainer(const Arcane::Materials::EnvCellVectorView& items)
611 {
612 return ContainerType{ items };
613 }
614 static ContainerType createContainer(Arcane::Materials::IMeshEnvironment* env)
615 {
616 return ContainerType{ env };
617 }
618};
619
620/*---------------------------------------------------------------------------*/
621/*---------------------------------------------------------------------------*/
622
623//! Spécialisation pour une vue sur un matériau
624template <>
626{
627 public:
628
632
633 public:
634
635 static ContainerType createContainer(const Arcane::Materials::MatCellVectorView& items)
636 {
637 return ContainerType{ items };
638 }
639 static ContainerType createContainer(Arcane::Materials::IMeshMaterial* mat)
640 {
641 return ContainerType{ mat };
642 }
643};
644
645/*---------------------------------------------------------------------------*/
646/*---------------------------------------------------------------------------*/
647
648#if defined(ARCANE_COMPILING_CUDA) || defined(ARCANE_COMPILING_HIP)
649/*
650 * Surcharge de la fonction de lancement de kernel pour GPU pour les ComponentItemLocalId et CellLocalId
651 */
652template <typename ContainerType, typename Lambda, typename... ReducerArgs> __global__ void
653doMatContainerGPULambda(ContainerType items, Lambda func, ReducerArgs... reducer_args)
654{
655 auto privatizer = privatize(func);
656 auto& body = privatizer.privateCopy();
657
658 Int32 i = blockDim.x * blockIdx.x + threadIdx.x;
659 if (i < items.size()) {
660 body(items[i], reducer_args...);
661 }
662 KernelReducerHelper::applyReducerArgs(i, reducer_args...);
663}
664
665#endif // ARCANE_COMPILING_CUDA || ARCANE_COMPILING_HIP
666
667/*---------------------------------------------------------------------------*/
668/*---------------------------------------------------------------------------*/
669
670#if defined(ARCANE_COMPILING_SYCL)
671
672template <typename ContainerType, typename Lambda, typename... ReducerArgs>
673class DoMatContainerSYCLLambda
674{
675 public:
676
677 void operator()(sycl::nd_item<1> x, ContainerType items, Lambda func, ReducerArgs... reducer_args) const
678 {
679 auto privatizer = privatize(func);
680 auto& body = privatizer.privateCopy();
681
682 Int32 i = static_cast<Int32>(x.get_global_id(0));
683 if (i < items.size()) {
684 body(items[i], reducer_args...);
685 }
686 KernelReducerHelper::applyReducerArgs(x, reducer_args...);
687 }
688 void operator()(sycl::id<1> x, ContainerType items, Lambda func) const
689 {
690 auto privatizer = privatize(func);
691 auto& body = privatizer.privateCopy();
692
693 Int32 i = static_cast<Int32>(x);
694 if (i < items.size()) {
695 body(items[i]);
696 }
697 }
698};
699
700#endif
701
702/*---------------------------------------------------------------------------*/
703/*---------------------------------------------------------------------------*/
704
705template <typename ContainerType, typename Lambda, typename... ReducerArgs>
706void _doMatItemsLambda(Int32 base_index, Int32 size, ContainerType items, const Lambda& func, ReducerArgs... reducer_args)
707{
708 auto privatizer = privatize(func);
709 auto& body = privatizer.privateCopy();
710
711 Int32 last_value = base_index + size;
712 for (Int32 i = base_index; i < last_value; ++i) {
713 body(items[i], reducer_args...);
714 }
716}
717
718/*---------------------------------------------------------------------------*/
719/*---------------------------------------------------------------------------*/
720
721template <typename TraitsType, typename... ReducerArgs>
723{
724 public:
725
726 using ContainerType = typename TraitsType::ContainerType;
727 using MatCommandType = typename TraitsType::MatCommandType;
728
729 public:
730
731 explicit GenericMatCommandArgs(const ContainerType& container, const ReducerArgs&... reducer_args)
732 : m_container(container)
733 , m_reducer_args(reducer_args...)
734 {}
735
736 public:
737
738 ContainerType m_container;
739 std::tuple<ReducerArgs...> m_reducer_args;
740};
741
742/*---------------------------------------------------------------------------*/
743/*---------------------------------------------------------------------------*/
744
745template <typename MatCommandType, typename... ReducerArgs>
747{
748 public:
749
750 using ContainerType = typename MatCommandType::Container;
751
752 public:
753
754 explicit GenericMatCommand(const MatCommandType& mat_command)
755 : m_mat_command(mat_command)
756 {}
757 explicit GenericMatCommand(const MatCommandType& mat_command, const std::tuple<ReducerArgs...>& reducer_args)
758 : m_mat_command(mat_command)
759 , m_reducer_args(reducer_args)
760 {}
761
762 public:
763
764 MatCommandType m_mat_command;
765 std::tuple<ReducerArgs...> m_reducer_args;
766};
767
768/*---------------------------------------------------------------------------*/
769/*---------------------------------------------------------------------------*/
770/*!
771 * \brief Applique l'énumération \a func sur la liste d'entité \a items.
772 *
773 * Le conteneur peut être issu de:
774 * - EnvAndGlobalCellRunCommand
775 * - EnvCellRunCommand
776 * - MatAndGlobalCellRunCommand
777 * - MatCellRunCommand
778 */
779template <typename ContainerType, typename Lambda, typename... ReducerArgs> void
780_applyEnvCells(RunCommand& command, ContainerType items, const Lambda& func, const ReducerArgs&... reducer_args)
781{
782 using namespace Arcane::Materials;
783 // TODO: fusionner la partie commune avec 'applyLoop'
784 Int32 vsize = items.size();
785 if (vsize == 0)
786 return;
787
788 RunCommandLaunchInfo launch_info(command, vsize);
789 const eExecutionPolicy exec_policy = launch_info.executionPolicy();
790 launch_info.computeLoopRunInfo();
791 launch_info.beginExecute();
792 switch (exec_policy) {
794 _applyKernelCUDA(launch_info, ARCANE_KERNEL_CUDA_FUNC(doMatContainerGPULambda) < ContainerType, Lambda, ReducerArgs... >, func, items, reducer_args...);
795 break;
797 _applyKernelHIP(launch_info, ARCANE_KERNEL_HIP_FUNC(doMatContainerGPULambda) < ContainerType, Lambda, ReducerArgs... >, func, items, reducer_args...);
798 break;
800 _applyKernelSYCL(launch_info, ARCANE_KERNEL_SYCL_FUNC(impl::DoMatContainerSYCLLambda) < ContainerType, Lambda, ReducerArgs... > {}, func, items, reducer_args...);
801 break;
803 _doMatItemsLambda(0, vsize, items, func, reducer_args...);
804 break;
806 arcaneParallelFor(0, vsize, launch_info.loopRunInfo(),
807 [&](Int32 begin, Int32 size) {
808 _doMatItemsLambda(begin, size, items, func, reducer_args...);
809 });
810 break;
811 default:
812 ARCANE_FATAL("Invalid execution policy '{0}'", exec_policy);
813 }
814 launch_info.endExecute();
815}
816
817/*---------------------------------------------------------------------------*/
818/*---------------------------------------------------------------------------*/
819
820template <typename MatCommandType, typename... ReducerArgs, typename Lambda>
821void operator<<(const GenericMatCommand<MatCommandType, ReducerArgs...>& c, const Lambda& func)
822{
823 if constexpr (sizeof...(ReducerArgs) > 0) {
824 std::apply([&](auto... vs) { impl::_applyEnvCells(c.m_mat_command.m_command, c.m_mat_command.m_items, func, vs...); }, c.m_reducer_args);
825 }
826 else
827 impl::_applyEnvCells(c.m_mat_command.m_command, c.m_mat_command.m_items, func);
828}
829
830template <typename MatItemType, typename MatItemContainerType, typename... ReducerArgs> auto
831makeExtendedMatItemEnumeratorLoop(const MatItemContainerType& container,
832 const ReducerArgs&... reducer_args)
833{
834 using TraitsType = RunCommandMatItemEnumeratorTraitsT<MatItemType>;
835 return GenericMatCommandArgs<TraitsType, ReducerArgs...>(TraitsType::createContainer(container), reducer_args...);
836}
837
838/*---------------------------------------------------------------------------*/
839/*---------------------------------------------------------------------------*/
840
841} // namespace Arcane::Accelerator::impl
842
843/*---------------------------------------------------------------------------*/
844/*---------------------------------------------------------------------------*/
845
846namespace Arcane::Accelerator
847{
848
849template <typename TraitsType, typename... ReducerArgs> auto
850operator<<(RunCommand& command, const impl::GenericMatCommandArgs<TraitsType, ReducerArgs...>& args)
851{
852 using MatCommandType = typename TraitsType::MatCommandType;
853 return impl::GenericMatCommand<MatCommandType, ReducerArgs...>(args.m_container.createCommand(command), args.m_reducer_args);
854}
855
856/*---------------------------------------------------------------------------*/
857/*---------------------------------------------------------------------------*/
858
859inline auto
861{
862 return impl::GenericMatCommand<impl::MatAndGlobalCellRunCommand>(view.createCommand(command));
863}
864
865/*---------------------------------------------------------------------------*/
866/*---------------------------------------------------------------------------*/
867
868inline auto
870{
871 return impl::GenericMatCommand<impl::EnvAndGlobalCellRunCommand>(view.createCommand(command));
872}
873
874/*---------------------------------------------------------------------------*/
875/*---------------------------------------------------------------------------*/
876
877inline auto
879{
880 return impl::GenericMatCommand<impl::EnvCellRunCommand>(view.createCommand(command));
881}
882
883/*---------------------------------------------------------------------------*/
884/*---------------------------------------------------------------------------*/
885
886inline auto
888{
889 return impl::GenericMatCommand<impl::MatCellRunCommand>(view.createCommand(command));
890}
891
892/*---------------------------------------------------------------------------*/
893/*---------------------------------------------------------------------------*/
894
895} // End namespace Arcane::Accelerator
896
897/*---------------------------------------------------------------------------*/
898/*---------------------------------------------------------------------------*/
899
900//! Macro pour itérer sur un matériau ou un milieu
901#define RUNCOMMAND_MAT_ENUMERATE(MatItemNameType, iter_name, env_or_mat_vector, ...) \
902 A_FUNCINFO << ::Arcane::Accelerator::impl::makeExtendedMatItemEnumeratorLoop<MatItemNameType>(env_or_mat_vector __VA_OPT__(, __VA_ARGS__)) \
903 << [=] ARCCORE_HOST_DEVICE(::Arcane::Accelerator::impl::RunCommandMatItemEnumeratorTraitsT<MatItemNameType>::EnumeratorType iter_name \
904 __VA_OPT__(ARCANE_RUNCOMMAND_REDUCER_FOR_EACH(__VA_ARGS__)))
905
906/*---------------------------------------------------------------------------*/
907/*---------------------------------------------------------------------------*/
908
909#endif
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classes, Types et macros pour gérer la concurrence.
void _applyEnvCells(RunCommand &command, ContainerType items, const Lambda &func, const ReducerArgs &... reducer_args)
Applique l'énumération func sur la liste d'entité items.
Gestion d'une commande sur accélérateur.
Conteneur contenant les informations nécessaires pour la commande.
__host__ __device__ AllEnvCell operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
Classe helper pour l'accès au MatVarIndex et au CellLocalId à travers les RUNCOMMAND_MAT_ENUMERATE(En...
__host__ __device__ Int32 index() const
Index de l'itération courante.
__host__ __device__ Data operator()()
Cet opérateur permet de renvoyer le couple [MatVarIndex, LocalCellId].
__host__ __device__ CellLocalId globalCellId() const
Accesseur sur la partie cell local id.
__host__ __device__ ComponentItemLocalId varIndex() const
Accesseur sur la partie MatVarIndex.
Conteneur contenant les informations nécessaires pour la commande.
constexpr __host__ __device__ Accessor operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
Commande pour itérer sur les EnvCell et récupérer aussi l'information sur la maille globale associée.
Conteneur contenant les informations nécessaires pour la commande.
constexpr __host__ __device__ ComponentItemLocalId operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
static ARCCORE_DEVICE void applyReducerArgs(Int32 index, ReducerArgs &... reducer_args)
Applique les fonctors des arguments additionnels.
Classe helper pour l'accès au MatVarIndex et au CellLocalId à travers les RUNCOMMAND_MAT_ENUMERATE(En...
__host__ __device__ ComponentItemLocalId varIndex() const
! Accesseur sur la partie MatVarIndex
__host__ __device__ Int32 index() const
Index de l'itération courante.
__host__ __device__ CellLocalId globalCellId() const
! Accesseur sur la partie cell local id
__host__ __device__ Data operator()()
Cet opérateur permet de renvoyer le couple [MatVarIndex, LocalCellId].
Conteneur contenant les informations nécessaires pour la commande.
constexpr __host__ __device__ Accessor operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
Commande pour itérer sur les MatCell et récupérer aussi l'information sur la maille globale associée.
Conteneur contenant les informations nécessaires pour la commande.
constexpr __host__ __device__ ComponentItemLocalId operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
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.
void computeLoopRunInfo()
Calcule la valeur de loopRunInfo()
Caractéristiques d'un énumérateur d'une commande sur les matériaux/milieux.
constexpr __host__ __device__ Integer size() const
Nombre d'éléments.
Maille arcane avec info matériaux et milieux.
Index d'un Item matériaux dans une variable.
Vue sur un vecteur sur les entités d'un composant.
Integer nbItem() const
Nombre d'entités dans la vue.
Maille arcane d'un milieu.
Vue sur un vecteur sur les entités 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.
Vue sur un vecteur sur les entités d'un matériau.
Représente un index sur les variables matériaux et milieux.
static void applyReducerArgs(ReducerArgs &... reducer_args)
Applique les fonctors des arguments additionnels.
Vue d'un tableau d'éléments de type T.
Definition Span.h:670
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.
EnvItemVectorView EnvCellVectorView
Type de la vue sur un EnvCellVector.
MatItemVectorView MatCellVectorView
Type de la vue sur un MatCellVector.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.
std::int32_t Int32
Type entier signé sur 32 bits.
Struct interne simple pour éviter l'usage d'un std::tuple pour l'opérateur()
Struct interne simple pour éviter l'usage d'un std::tuple pour l'opérateur()