Arcane  v3.14.10.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-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/*---------------------------------------------------------------------------*/
80template <typename MatItemType>
82
83/*---------------------------------------------------------------------------*/
84/*---------------------------------------------------------------------------*/
89{
90 public:
91
96
97 public:
98
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
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/*---------------------------------------------------------------------------*/
154{
155 public:
156
162
163 public:
164
170 {
171 public:
172
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
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/*---------------------------------------------------------------------------*/
219{
220 public:
221
227
228 public:
229
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
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/*---------------------------------------------------------------------------*/
285{
286 public:
287
293
294 public:
295
301 {
302
303 public:
304
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
333 ARCCORE_HOST_DEVICE Data operator()()
334 {
335 return { m_internal_data.m_mvi, m_internal_data.m_cid };
336 }
337
339 ARCCORE_HOST_DEVICE ComponentItemLocalId varIndex() const { return m_internal_data.m_mvi; };
340
342 ARCCORE_HOST_DEVICE CellLocalId globalCellId() const { return m_internal_data.m_cid; }
343
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
358 {
359 public:
360
363 {
364 }
365 explicit Container(EnvCellVectorView view)
367 {
368 }
369
370 public:
371
373 {
375 }
376
377 public:
378
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/*---------------------------------------------------------------------------*/
408{
409 public:
410
416
417 public:
418
424 {
425
426 public:
427
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
456 ARCCORE_HOST_DEVICE Data operator()()
457 {
458 return { m_internal_data.m_mvi, m_internal_data.m_cid };
459 }
460
462 ARCCORE_HOST_DEVICE ComponentItemLocalId varIndex() const { return m_internal_data.m_mvi; };
463
465 ARCCORE_HOST_DEVICE CellLocalId globalCellId() const { return m_internal_data.m_cid; }
466
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
481 {
482 public:
483
484 explicit Container(IMeshMaterial* env)
486 {
487 }
488 explicit Container(MatCellVectorView view)
490 {
491 }
492
493 public:
494
496 {
498 }
499
500 public:
501
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
528template <>
530{
531 public:
532
536
537 public:
538
539 static ContainerType createContainer(const Arcane::Materials::EnvCellVectorView& items)
540 {
541 return ContainerType{ items };
542 }
544 {
545 return ContainerType{ env };
546 }
547};
548
549/*---------------------------------------------------------------------------*/
550/*---------------------------------------------------------------------------*/
551
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
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
599template <>
601{
602 public:
603
607
608 public:
609
610 static ContainerType createContainer(const Arcane::Materials::EnvCellVectorView& items)
611 {
612 return ContainerType{ items };
613 }
615 {
616 return ContainerType{ env };
617 }
618};
619
620/*---------------------------------------------------------------------------*/
621/*---------------------------------------------------------------------------*/
622
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
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 }
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>
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/*---------------------------------------------------------------------------*/
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>
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{
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
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.
ARCCORE_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...
ARCCORE_HOST_DEVICE ComponentItemLocalId varIndex() const
Accesseur sur la partie MatVarIndex.
ARCCORE_HOST_DEVICE Data operator()()
Cet opérateur permet de renvoyer le couple [MatVarIndex, LocalCellId].
ARCCORE_HOST_DEVICE CellLocalId globalCellId() const
Accesseur sur la partie cell local id.
ARCCORE_HOST_DEVICE Int32 index() const
Index de l'itération courante.
Conteneur contenant les informations nécessaires pour la commande.
constexpr ARCCORE_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 ARCCORE_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...
ARCCORE_HOST_DEVICE Int32 index() const
Index de l'itération courante.
ARCCORE_HOST_DEVICE Data operator()()
Cet opérateur permet de renvoyer le couple [MatVarIndex, LocalCellId].
ARCCORE_HOST_DEVICE ComponentItemLocalId varIndex() const
! Accesseur sur la partie MatVarIndex
ARCCORE_HOST_DEVICE CellLocalId globalCellId() const
! Accesseur sur la partie cell local id
Conteneur contenant les informations nécessaires pour la commande.
constexpr ARCCORE_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 ARCCORE_HOST_DEVICE ComponentItemLocalId operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
Object temporaire pour conserver les informations d'exécution d'une commande et regrouper les tests.
Caractéristiques d'un énumérateur d'une commande sur les matériaux/milieux.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Vue sur une liste de mailles avec infos sur les milieux.
constexpr ARCCORE_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.
ConstArrayView< Int32 > _internalLocalIds() const
Tableau des localId() des entités associées.
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.
Interface d'un matériau d'un maillage.
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.
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::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()