12#ifndef ARCANE_ACCELERATOR_RUNCOMMANDMATERIALENUMERATE_H
13#define ARCANE_ACCELERATOR_RUNCOMMANDMATERIALENUMERATE_H
17#include "arcane/utils/ArcaneCxx20.h"
20#include "arcane/core/materials/ComponentItemVectorView.h"
21#include "arcane/core/materials/MaterialsCoreGlobal.h"
22#include "arcane/core/materials/MatItem.h"
25#include "arcane/accelerator/KernelLauncher.h"
26#include "arcane/accelerator/RunCommand.h"
27#include "arcane/accelerator/RunCommandLaunchInfo.h"
44template <
typename ConstituentItemLocalIdType_>
74 : m_internal_data{
mvi,
cid }
99 return m_internal_data;
109 constexpr ARCCORE_HOST_DEVICE Int32
index()
const {
return m_index; }
113 Data m_internal_data;
131namespace Arcane::Accelerator::impl
165 constexpr ARCCORE_HOST_DEVICE
Int32 size()
const {
return m_view.
size(); }
188 explicit AllEnvCellRunCommand(
RunCommand& command,
const Container& items)
216 m_nb_item = m_items.
nbItem();
217 m_matvar_indexes = m_items._matvarIndexes();
223 constexpr ARCCORE_HOST_DEVICE
Int32 size()
const {
return m_nb_item; }
238template <
typename ConstituentItemLocalIdType_,
typename ContainerCreateViewType_>
282 explicit ConstituentRunCommandBase(
RunCommand& command,
const Container& items)
294using EnvCellRunCommand = ConstituentRunCommandBase<Arcane::Materials::EnvItemLocalId, Arcane::Materials::EnvCellVectorView>;
295using MatCellRunCommand = ConstituentRunCommandBase<Arcane::Materials::MatItemLocalId, Arcane::Materials::MatCellVectorView>;
302template <
typename ConstituentItemLocalIdType_,
typename ContainerCreateViewType_>
346 explicit ConstituentAndGlobalCellRunCommandBase(
RunCommand& command,
const Container& items)
361using EnvAndGlobalCellRunCommand = ConstituentAndGlobalCellRunCommandBase<Arcane::Materials::EnvItemLocalId, Arcane::Materials::EnvCellVectorView>;
362using MatAndGlobalCellRunCommand = ConstituentAndGlobalCellRunCommandBase<Arcane::Materials::MatItemLocalId, Arcane::Materials::MatCellVectorView>;
378template <
typename MatItemType>
386template <
typename CommandType_>
392 using IteratorValueType = CommandType::IteratorValueType;
393 using ContainerType = CommandType::Container;
394 using ContainerCreateViewType = CommandType::ContainerCreateViewType;
398 static ContainerType createContainer(
const ContainerCreateViewType& items)
400 return ContainerType{ items };
415 using BaseClass::createContainer;
434 using BaseClass::createContainer;
463 using BaseClass::createContainer;
484 using BaseClass::createContainer;
495#if defined(ARCANE_COMPILING_CUDA) || defined(ARCANE_COMPILING_HIP)
506 if (i < items.size()) {
517#if defined(ARCANE_COMPILING_SYCL)
529 Int32 i =
static_cast<Int32
>(x.get_global_id(0));
530 if (i < items.size()) {
533 KernelRemainingArgsHelper::applyRemainingArgs(x, remaining_args...);
536 void operator()(sycl::id<1> x, ContainerType items, Lambda func)
const
538 auto privatizer = privatize(func);
539 auto& body = privatizer.privateCopy();
542 if (i < items.size()) {
553template <
typename ContainerType,
typename Lambda,
typename... RemainingArgs>
554void _doConstituentItemsLambda(
Int32 base_index,
Int32 size, ContainerType items,
555 const Lambda& func, RemainingArgs... remaining_args)
557 auto privatizer = privatize(func);
558 auto& body = privatizer.privateCopy();
560 Int32 last_value = base_index + size;
561 for (
Int32 i = base_index; i < last_value; ++i) {
562 body(items[i], remaining_args...);
570template <
typename TraitsType,
typename... RemainingArgs>
575 using ContainerType =
typename TraitsType::ContainerType;
580 : m_container(container)
586 ContainerType m_container;
598 using ContainerType =
typename ConstituentCommandType::Container;
632 Int32 vsize = items.size();
658 _doConstituentItemsLambda(begin, size, items, func, remaining_args...);
673 if constexpr (
sizeof...(RemainingArgs) > 0) {
674 std::apply([&](
auto... vs) {
675 impl::_applyConstituentCells(
c.m_command.m_command,
c.m_command.m_items,
func, vs...);
680 impl::_applyConstituentCells(
c.m_command.m_command,
c.m_command.m_items,
func);
708template <
typename TraitsType,
typename...
RemainingArgs>
auto
709operator<<(
RunCommand& command,
const impl::GenericConstituentCommandArgs<TraitsType, RemainingArgs...>& args)
711 using CommandType =
typename TraitsType::CommandType;
713 return GenericCommandType(CommandType::create(command, args.m_container), args.m_remaining_args);
723 using CommandType = impl::MatAndGlobalCellRunCommand;
724 return impl::GenericConstituentCommand<CommandType>(CommandType::create(command, view));
734 using CommandType = impl::EnvAndGlobalCellRunCommand;
735 return impl::GenericConstituentCommand<CommandType>(CommandType::create(command, view));
745 using CommandType = impl::EnvCellRunCommand;
746 return impl::GenericConstituentCommand<CommandType>(CommandType::create(command, view));
756 using CommandType = impl::MatCellRunCommand;
757 return impl::GenericConstituentCommand<CommandType>(CommandType::create(command, view));
788#define RUNCOMMAND_MAT_ENUMERATE(ConstituentItemNameType, iter_name, env_or_mat_container, ...) \
789 A_FUNCINFO << ::Arcane::Accelerator::impl::makeExtendedConstituentItemEnumeratorLoop<ConstituentItemNameType>(env_or_mat_container __VA_OPT__(, __VA_ARGS__)) \
790 << [=] ARCCORE_HOST_DEVICE(::Arcane::Accelerator::impl::RunCommandConstituentItemEnumeratorTraitsT<ConstituentItemNameType>::IteratorValueType iter_name \
791 __VA_OPT__(ARCANE_RUNCOMMAND_REDUCER_FOR_EACH(__VA_ARGS__)))
#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.
Conteneur contenant les informations nécessaires pour la commande.
ARCCORE_HOST_DEVICE IteratorValueType operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
Commande pour itérer sur les AllEnvCell.
Conteneur contenant les informations nécessaires pour la commande.
constexpr ARCCORE_HOST_DEVICE IteratorValueType operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
Classe pour les commandes MatAndGlobalCell et EnvAndGlobalCell.
Conteneur contenant les informations nécessaires pour la commande.
constexpr ARCCORE_HOST_DEVICE IteratorValueType operator[](Int32 i) const
Accesseur pour le i-ème élément de la liste.
Commande pour itérer sur les EnvCell ou MatCell.
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.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
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.
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.
Index d'une boucle accélérateur sur les matériaux ou milieux.
constexpr ARCCORE_HOST_DEVICE ConstituentItemLocalIdType varIndex() const
Accesseur sur la partie MatVarIndex.
constexpr ARCCORE_HOST_DEVICE CellLocalId globalCellId() const
Accesseur sur la partie cell local id.
constexpr ARCCORE_HOST_DEVICE Int32 index() const
Index de l'itération courante.
constexpr ARCCORE_HOST_DEVICE Data operator()()
Cet opérateur permet de renvoyer le couple [ConstituentItemLocalIdType, CellLocalId].
Index d'un ConstituentItem dans une variable.
Maille arcane d'un milieu.
Interface d'un milieu d'un maillage.
Interface d'un matériau d'un maillage.
Représente un matériau d'une maille multi-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.
-*- 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()