12#ifndef ARCANE_ACCELERATOR_PARTITIONER_H
13#define ARCANE_ACCELERATOR_PARTITIONER_H
17#include "arcane/utils/ArrayView.h"
18#include "arcane/utils/FatalErrorException.h"
19#include "arcane/utils/NumArray.h"
21#include "arcane/accelerator/AcceleratorGlobal.h"
22#include "arcane/accelerator/core/RunQueue.h"
23#include "arcane/accelerator/CommonUtils.h"
24#include "arcane/accelerator/RunCommandLaunchInfo.h"
29namespace Arcane::Accelerator::impl
50 Int32 _nbFirstPart()
const;
75 template <
typename SelectLambda,
typename InputIterator,
typename OutputIterator>
86#if defined(ARCANE_COMPILING_CUDA)
89 cudaStream_t stream = impl::CudaUtils::toNativeStream(&queue);
98 ARCANE_CHECK_CUDA(::cub::DevicePartition::If(s.m_algo_storage.address(),
temp_storage_size,
101 s.m_device_nb_list1_storage.
copyToAsync(s.m_host_nb_list1_storage, queue);
104#if defined(ARCANE_COMPILING_HIP)
108 hipStream_t stream = impl::HipUtils::toNativeStream(&queue);
118 s.m_device_nb_list1_storage.
copyToAsync(s.m_host_nb_list1_storage, queue);
141 s.m_host_nb_list1_storage[0] =
nb_list1;
171#if defined(ARCANE_COMPILING_CUDA)
174 cudaStream_t stream = impl::CudaUtils::toNativeStream(&queue);
184 ARCANE_CHECK_CUDA(::cub::DevicePartition::If(s.m_algo_storage.address(),
temp_storage_size,
188 s.m_device_nb_list1_storage.
copyToAsync(s.m_host_nb_list1_storage, queue);
191#if defined(ARCANE_COMPILING_HIP)
195 hipStream_t stream = impl::HipUtils::toNativeStream(&queue);
208 s.m_device_nb_list1_storage.
copyToAsync(s.m_host_nb_list1_storage, queue);
241 s.m_host_nb_list1_storage[0] =
nb_first;
242 s.m_host_nb_list1_storage[1] =
nb_second;
292 template <
typename SelectLambda,
typename SetterLambda>
323 template <
typename InputIterator,
typename OutputIterator,
typename SelectLambda>
417 m_is_already_called =
false;
418 return _nbFirstPart();
433 m_is_already_called =
false;
439 bool m_is_already_called =
false;
445 if (m_is_already_called)
446 ARCANE_FATAL(
"apply() has already been called for this instance");
447 m_is_already_called =
true;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Algorithme générique de partitionnement d'une liste.
SmallSpan< const Int32 > nbParts()
Nombre d'éléments de la première et deuxième partie de la liste.
Int32 nbFirstPart()
Nombre d'éléments de la première partie de la liste.
void applyWithIndex(Int32 nb_value, const Setter1Lambda setter1_lambda, const Setter2Lambda setter2_lambda, const UnselectedSetterLambda &unselected_setter_lambda, const Select1Lambda &select1_lambda, const Select2Lambda &select2_lambda, const TraceInfo &trace_info=TraceInfo())
Effectue un partitionnement d'une liste en trois parties.
void applyIf(Int32 nb_value, InputIterator input_iter, OutputIterator output_iter, const SelectLambda &select_lambda, const TraceInfo &trace_info=TraceInfo())
Effectue un partitionnement d'une liste en deux parties.
void applyWithIndex(Int32 nb_value, const SetterLambda &setter_lambda, const SelectLambda &select_lambda, const TraceInfo &trace_info=TraceInfo())
Effectue un partitionnement d'une liste en deux parties.
void applyIf(Int32 nb_value, InputIterator input_iter, FirstOutputIterator first_output_iter, SecondOutputIterator second_output_iter, UnselectedIterator unselected_iter, const Select1Lambda &select1_lambda, const Select2Lambda &select2_lambda, const TraceInfo &trace_info=TraceInfo())
Effectue un partitionnement d'une liste en trois parties.
Gestion d'une commande sur accélérateur.
File d'exécution pour un accélérateur.
eExecutionPolicy executionPolicy() const
Politique d'exécution de la file.
void copyToAsync(SmallSpan< DataType > dest_ptr, const RunQueue &queue)
Copie l'instance dans dest_ptr.
Gère l'allocation interne sur le device.
Classe de base pour effectuer un filtrage.
Classe pour effectuer un partitionnement d'une liste.
void apply3(GenericPartitionerBase &s, Int32 nb_item, InputIterator input_iter, FirstOutputIterator first_output_iter, SecondOutputIterator second_output_iter, UnselectedIterator unselected_iter, const Select1Lambda &select1_lambda, const Select2Lambda &select2_lambda, const TraceInfo &trace_info=TraceInfo())
Effectue le partitionnement d'une liste en trois parties.
void apply(GenericPartitionerBase &s, Int32 nb_item, InputIterator input_iter, OutputIterator output_iter, const SelectLambda &select_lambda, const TraceInfo &trace_info=TraceInfo())
Effectue le partitionnement d'une liste en deux parties.
Object temporaire pour conserver les informations d'exécution d'une commande et regrouper les tests.
Itérateur sur une lambda pour positionner une valeur via un index.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
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.
@ 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.
std::int32_t Int32
Type entier signé sur 32 bits.