12#ifndef ARCANE_ACCELERATOR_GENERICREDUCER_H
13#define ARCANE_ACCELERATOR_GENERICREDUCER_H
17#include "arcane/utils/NumArray.h"
18#include "arcane/utils/FatalErrorException.h"
20#include "arcane/accelerator/core/RunQueue.h"
26namespace Arcane::Accelerator::impl
28template <
typename DataType>
29class GenericReducerIf;
35template <
typename DataType,
typename Operator>
38template <
typename DataType>
45template <
typename DataType>
52template <
typename DataType>
68template <
typename DataType>
81 DataType _reducedValue()
const
84 return m_host_reduce_storage[0];
90 if (m_host_reduce_storage.memoryRessource() !=
r)
92 m_host_reduce_storage.resize(1);
113template <
typename DataType>
121 template <
typename InputIterator,
typename ReduceOperator>
132#if defined(ARCANE_COMPILING_CUDA)
135 cudaStream_t stream = impl::CudaUtils::toNativeStream(queue);
146 s.m_device_reduce_storage.copyToAsync(s.m_host_reduce_storage, queue);
149#if defined(ARCANE_COMPILING_HIP)
152 hipStream_t stream = impl::HipUtils::toNativeStream(queue);
163 s.m_device_reduce_storage.copyToAsync(s.m_host_reduce_storage, queue);
166#if defined(ARCANE_COMPILING_SYCL)
178 s.m_host_reduce_storage[0] =
reducer.reducedValue();
187 for (Int32 i = 0; i <
nb_item; ++i) {
247template <
typename DataType>
280 template <
typename SelectLambda>
287 template <
typename SelectLambda>
294 template <
typename SelectLambda>
303 m_is_already_called =
false;
304 return this->_reducedValue();
309 bool m_is_already_called =
false;
313 template <
typename InputIterator,
typename ReduceOperator>
323 template <
typename GetterLambda,
typename ReduceOperator>
328 impl::GenericReducerBase<DataType>*
base_ptr =
this;
329 impl::GenericReducerIf<DataType>
gf;
337 if (m_is_already_called)
338 ARCANE_FATAL(
"apply() has already been called for this instance");
339 m_is_already_called =
true;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Types et fonctions pour gérer les synchronisations sur les accélérateurs.
#define RUNCOMMAND_LOOP1(iter_name, x1,...)
Boucle sur accélérateur avec arguments supplémentaires pour les réductions.
Algorithme générique de réduction sur accélérateur.
DataType reducedValue()
Valeur de la réduction.
void applyMinWithIndex(Int32 nb_value, const SelectLambda &select_lambda, const TraceInfo &trace_info=TraceInfo())
Applique une réduction 'Min' sur les valeurs sélectionnées par select_lambda.
void applyMaxWithIndex(Int32 nb_value, const SelectLambda &select_lambda, const TraceInfo &trace_info=TraceInfo())
Applique une réduction 'Max' sur les valeurs sélectionnées par select_lambda.
void applyMax(SmallSpan< const DataType > values, const TraceInfo &trace_info=TraceInfo())
Applique une réduction 'Max' sur les valeurs values.
void applyMin(SmallSpan< const DataType > values, const TraceInfo &trace_info=TraceInfo())
Applique une réduction 'Min' sur les valeurs values.
void applySum(SmallSpan< const DataType > values, const TraceInfo &trace_info=TraceInfo())
Applique une réduction 'Somme' sur les valeurs values.
void applySumWithIndex(Int32 nb_value, const SelectLambda &select_lambda, const TraceInfo &trace_info=TraceInfo())
Applique une réduction 'Somme' sur les valeurs sélectionnées par select_lambda.
Gestion d'une commande sur accélérateur.
File d'exécution pour un accélérateur.
void barrier() const
Bloque tant que toutes les commandes associées à la file ne sont pas terminées.
eExecutionPolicy executionPolicy() const
Politique d'exécution de la file.
Opérateur de Scan/Reduce pour le maximum.
Opérateur de Scan/Reduce pour le minimum.
Opérateur de Scan/Reduce pour les sommes.
Référence à une instance.
Espace de nom pour l'utilisation des accélérateurs.
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
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.
eMemoryResource
Liste des ressources mémoire disponibles.