Types et macros pour gérer les boucles sur les accélérateurs. Plus de détails...
#include "arcane/utils/ArcaneCxx20.h"
#include "arcane/accelerator/RunCommand.h"
#include "arcane/accelerator/RunQueueInternal.h"
Aller au code source de ce fichier.
Classes | |
class | Arcane::Accelerator::impl::ExtendedArrayBoundLoop< LoopBoundType, RemainingArgs > |
class | Arcane::Accelerator::ArrayBoundRunCommand< N, LoopBoundType, RemainingArgs > |
Espaces de nommage | |
namespace | Arcane |
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- | |
namespace | Arcane::Accelerator |
Espace de nom pour l'utilisation des accélérateurs. | |
Macros | |
#define | RUNCOMMAND_LOOP(iter_name, bounds) A_FUNCINFO << bounds << [=] ARCCORE_HOST_DEVICE(typename decltype(bounds)::IndexType iter_name) |
Boucle sur accélérateur. | |
#define | RUNCOMMAND_LOOPN(iter_name, N, ...) A_FUNCINFO << Arcane::ArrayBounds<typename Arcane::MDDimType<N>::DimType>(__VA_ARGS__) << [=] ARCCORE_HOST_DEVICE(Arcane::ArrayIndex<N> iter_name) |
Boucle sur accélérateur. | |
#define | RUNCOMMAND_LOOP2(iter_name, x1, x2) A_FUNCINFO << Arcane::ArrayBounds<MDDim2>(x1, x2) << [=] ARCCORE_HOST_DEVICE(Arcane::MDIndex<2> iter_name) |
Boucle sur accélérateur. | |
#define | RUNCOMMAND_LOOP3(iter_name, x1, x2, x3) A_FUNCINFO << Arcane::ArrayBounds<MDDim3>(x1, x2, x3) << [=] ARCCORE_HOST_DEVICE(Arcane::MDIndex<3> iter_name) |
Boucle sur accélérateur. | |
#define | RUNCOMMAND_LOOP4(iter_name, x1, x2, x3, x4) A_FUNCINFO << Arcane::ArrayBounds<MDDim4>(x1, x2, x3, x4) << [=] ARCCORE_HOST_DEVICE(Arcane::MDIndex<4> iter_name) |
Boucle sur accélérateur. | |
#define | RUNCOMMAND_LOOP1(iter_name, x1, ...) |
Boucle sur accélérateur avec arguments supplémentaires pour les réductions. | |
#define | RUNCOMMAND_SINGLE(...) |
Boucle sur accélérateur pour exécution avec un seul thread. | |
#define | RUNCOMMAND_LOOP1_EX(iter_name, x1, ...) RUNCOMMAND_LOOP1(iter_name, x1, __VA_ARGS__) |
Boucle sur accélérateur. | |
Fonctions | |
template<int N, template< int T, typename > class LoopBoundType, typename Lambda , typename... RemainingArgs> | |
void | Arcane::Accelerator::impl::_applyGenericLoop (RunCommand &command, LoopBoundType< N, Int32 > bounds, const Lambda &func, const RemainingArgs &... other_args) |
Applique la lambda func sur une boucle bounds. | |
template<typename ExtentType , typename... RemainingArgs> | |
auto | Arcane::Accelerator::impl::makeExtendedArrayBoundLoop (const ArrayBounds< ExtentType > &bounds, RemainingArgs... args) -> ExtendedArrayBoundLoop< ArrayBounds< ExtentType >, RemainingArgs... > |
template<typename ExtentType , typename Lambda > | |
void | Arcane::Accelerator::run (RunCommand &command, ArrayBounds< ExtentType > bounds, const Lambda &func) |
Applique la lambda func sur l'intervalle d'itération donnée par bounds. | |
template<int N, typename Lambda > | |
void | Arcane::Accelerator::run (RunCommand &command, SimpleForLoopRanges< N, Int32 > bounds, const Lambda &func) |
Applique la lambda func sur l'intervalle d'itération donnée par bounds. | |
template<int N, typename Lambda > | |
void | Arcane::Accelerator::run (RunCommand &command, ComplexForLoopRanges< N, Int32 > bounds, const Lambda &func) |
Applique la lambda func sur l'intervalle d'itération donnée par bounds. | |
template<int N, template< int T, typename > class LoopBoundType, typename Lambda , typename... RemainingArgs> | |
void | Arcane::Accelerator::runExtended (RunCommand &command, LoopBoundType< N, Int32 > bounds, const Lambda &func, const std::tuple< RemainingArgs... > &other_args) |
Applique la lambda func sur l'intervalle d'itération donnée par bounds. | |
template<typename ExtentType > | |
auto | Arcane::Accelerator::operator<< (RunCommand &command, const ArrayBounds< ExtentType > &bounds) -> ArrayBoundRunCommand< ExtentType::rank(), SimpleForLoopRanges< ExtentType::rank(), Int32 > > |
template<typename ExtentType , typename... RemainingArgs> | |
auto | Arcane::Accelerator::operator<< (RunCommand &command, const impl::ExtendedArrayBoundLoop< ExtentType, RemainingArgs... > &ex_loop) -> ArrayBoundRunCommand< 1, SimpleForLoopRanges< 1, Int32 >, RemainingArgs... > |
template<int N> | |
ArrayBoundRunCommand< N, SimpleForLoopRanges< N > > | Arcane::Accelerator::operator<< (RunCommand &command, const SimpleForLoopRanges< N, Int32 > &bounds) |
template<int N> | |
ArrayBoundRunCommand< N, ComplexForLoopRanges< N > > | Arcane::Accelerator::operator<< (RunCommand &command, const ComplexForLoopRanges< N, Int32 > &bounds) |
template<int N, template< int, typename > class ForLoopBoundType, typename Lambda , typename... RemainingArgs> | |
void | Arcane::Accelerator::operator<< (ArrayBoundRunCommand< N, ForLoopBoundType< N, Int32 >, RemainingArgs... > &&nr, const Lambda &f) |
Types et macros pour gérer les boucles sur les accélérateurs.
Définition dans le fichier RunCommandLoop.h.
#define RUNCOMMAND_LOOP | ( | iter_name, | |
bounds | |||
) | A_FUNCINFO << bounds << [=] ARCCORE_HOST_DEVICE(typename decltype(bounds)::IndexType iter_name) |
Boucle sur accélérateur.
Définition à la ligne 209 du fichier RunCommandLoop.h.
#define RUNCOMMAND_LOOP1 | ( | iter_name, | |
x1, | |||
... | |||
) |
Boucle sur accélérateur avec arguments supplémentaires pour les réductions.
Cette macro permet d'ajouter des arguments pour chaque valeur à réduire. Les arguments doivent être des instances des classes Arcane::Accelerator::ReducerSum2, Arcane::Accelerator::ReducerMax2 ou Arcane::Accelerator::ReducerMin2.
Définition à la ligne 235 du fichier RunCommandLoop.h.
#define RUNCOMMAND_LOOP1_EX | ( | iter_name, | |
x1, | |||
... | |||
) | RUNCOMMAND_LOOP1(iter_name, x1, __VA_ARGS__) |
Boucle sur accélérateur.
Définition à la ligne 251 du fichier RunCommandLoop.h.
#define RUNCOMMAND_LOOP2 | ( | iter_name, | |
x1, | |||
x2 | |||
) | A_FUNCINFO << Arcane::ArrayBounds<MDDim2>(x1, x2) << [=] ARCCORE_HOST_DEVICE(Arcane::MDIndex<2> iter_name) |
Boucle sur accélérateur.
Définition à la ligne 217 du fichier RunCommandLoop.h.
#define RUNCOMMAND_LOOP3 | ( | iter_name, | |
x1, | |||
x2, | |||
x3 | |||
) | A_FUNCINFO << Arcane::ArrayBounds<MDDim3>(x1, x2, x3) << [=] ARCCORE_HOST_DEVICE(Arcane::MDIndex<3> iter_name) |
Boucle sur accélérateur.
Définition à la ligne 221 du fichier RunCommandLoop.h.
#define RUNCOMMAND_LOOP4 | ( | iter_name, | |
x1, | |||
x2, | |||
x3, | |||
x4 | |||
) | A_FUNCINFO << Arcane::ArrayBounds<MDDim4>(x1, x2, x3, x4) << [=] ARCCORE_HOST_DEVICE(Arcane::MDIndex<4> iter_name) |
Boucle sur accélérateur.
Définition à la ligne 225 du fichier RunCommandLoop.h.
#define RUNCOMMAND_LOOPN | ( | iter_name, | |
N, | |||
... | |||
) | A_FUNCINFO << Arcane::ArrayBounds<typename Arcane::MDDimType<N>::DimType>(__VA_ARGS__) << [=] ARCCORE_HOST_DEVICE(Arcane::ArrayIndex<N> iter_name) |
Boucle sur accélérateur.
Définition à la ligne 213 du fichier RunCommandLoop.h.
#define RUNCOMMAND_SINGLE | ( | ... | ) |
Boucle sur accélérateur pour exécution avec un seul thread.
Définition à la ligne 242 du fichier RunCommandLoop.h.
void Arcane::Accelerator::impl::_applyGenericLoop | ( | RunCommand & | command, |
LoopBoundType< N, Int32 > | bounds, | ||
const Lambda & | func, | ||
const RemainingArgs &... | other_args | ||
) |
Applique la lambda func sur une boucle bounds.
N est la dimension de la boucle (actuellement 1, 2, 3 ou 4). La lambda func est appliqué à la commande command. Les arguments supplémentaires sont des fonctor supplémentaires (comme les réductions).
Définition à la ligne 38 du fichier RunCommandLoop.h.
Références Arcane::Accelerator::impl::_applyGenericLoop(), ARCANE_FATAL, Arcane::arcaneParallelFor(), Arcane::arcaneSequentialFor(), Arcane::Accelerator::CUDA, Arcane::Accelerator::HIP, Arcane::Accelerator::Sequential, Arcane::Accelerator::SYCL, et Arcane::Accelerator::Thread.
Référencé par Arcane::Accelerator::impl::_applyGenericLoop().
auto Arcane::Accelerator::impl::makeExtendedArrayBoundLoop | ( | const ArrayBounds< ExtentType > & | bounds, |
RemainingArgs... | args | ||
) | -> ExtendedArrayBoundLoop<ArrayBounds<ExtentType>, RemainingArgs...> |
Définition à la ligne 87 du fichier RunCommandLoop.h.