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/RunQueueInternal.h"
26#include "arcane/accelerator/RunCommand.h"
27#include "arcane/accelerator/RunCommandLaunchInfo.h"
32namespace Arcane::Accelerator::impl
53 constexpr ARCCORE_HOST_DEVICE
Int32 size()
const {
return m_nb_item; }
66 m_nb_item = m_items.
nbItem();
67 m_matvar_indexes = m_items._matvarIndexes();
80template <
typename MatItemType>
120 ARCCORE_HOST_DEVICE
Int32 size()
const {
return m_view.
size(); }
315 : m_internal_data{
mvi,
cid }
335 return { m_internal_data.m_mvi, m_internal_data.m_cid };
349 Data m_internal_data;
438 : m_internal_data{
mvi,
cid }
458 return { m_internal_data.m_mvi, m_internal_data.m_cid };
472 Data m_internal_data;
648#if defined(ARCANE_COMPILING_CUDA) || defined(ARCANE_COMPILING_HIP)
659 if (i < items.size()) {
670#if defined(ARCANE_COMPILING_SYCL)
682 Int32 i =
static_cast<Int32
>(x.get_global_id(0));
683 if (i < items.size()) {
686 KernelReducerHelper::applyReducerArgs(x, reducer_args...);
688 void operator()(sycl::id<1> x, ContainerType items, Lambda func)
const
690 auto privatizer = privatize(func);
691 auto& body = privatizer.privateCopy();
694 if (i < items.size()) {
705template <
typename ContainerType,
typename Lambda,
typename... ReducerArgs>
706void _doMatItemsLambda(
Int32 base_index,
Int32 size, ContainerType items,
const Lambda& func, ReducerArgs... reducer_args)
708 auto privatizer = privatize(func);
709 auto& body = privatizer.privateCopy();
711 Int32 last_value = base_index + size;
712 for (
Int32 i = base_index; i < last_value; ++i) {
713 body(items[i], reducer_args...);
721template <
typename TraitsType,
typename... ReducerArgs>
726 using ContainerType =
typename TraitsType::ContainerType;
727 using MatCommandType =
typename TraitsType::MatCommandType;
732 : m_container(container)
738 ContainerType m_container;
745template <
typename MatCommandType,
typename...
ReducerArgs>
750 using ContainerType =
typename MatCommandType::Container;
764 MatCommandType m_mat_command;
784 Int32 vsize = items.size();
808 _doMatItemsLambda(begin, size, items, func, reducer_args...);
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);
827 impl::_applyEnvCells(
c.m_mat_command.m_command,
c.m_mat_command.m_items,
func);
835 return GenericMatCommandArgs<TraitsType,
ReducerArgs...>(TraitsType::createContainer(container),
reducer_args...);
849template <
typename TraitsType,
typename...
ReducerArgs>
auto
850operator<<(
RunCommand& command,
const impl::GenericMatCommandArgs<TraitsType, ReducerArgs...>& args)
852 using MatCommandType =
typename TraitsType::MatCommandType;
853 return impl::GenericMatCommand<MatCommandType,
ReducerArgs...>(args.m_container.createCommand(command), args.m_reducer_args);
862 return impl::GenericMatCommand<impl::MatAndGlobalCellRunCommand>(view.createCommand(command));
871 return impl::GenericMatCommand<impl::EnvAndGlobalCellRunCommand>(view.createCommand(command));
880 return impl::GenericMatCommand<impl::EnvCellRunCommand>(view.createCommand(command));
889 return impl::GenericMatCommand<impl::MatCellRunCommand>(view.createCommand(command));
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__)))
#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.
Commande pour itérer sur les AllEnvCell.
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.
Commande pour itérer sur les EnvCell.
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.
Commande pour itérer sur les MatCell.
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.
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 milieu d'un maillage.
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()