12#ifndef ARCCORE_ACCELERATOR_COOPERATIVEWORKGROUPLOOPRANGE_H
13#define ARCCORE_ACCELERATOR_COOPERATIVEWORKGROUPLOOPRANGE_H
17#include "arccore/accelerator/WorkGroupLoopRange.h"
34class CooperativeHostWorkItemGrid
36 template<
typename T>
friend class CooperativeWorkGroupLoopContext;
41 explicit CooperativeHostWorkItemGrid()
56#if defined(ARCCORE_COMPILING_CUDA_OR_HIP)
64class CooperativeDeviceWorkItemGrid
76 __device__ CooperativeDeviceWorkItemGrid()
77 : m_grid_group(cooperative_groups::this_grid())
83 __device__
void barrier() { m_grid_group.sync(); }
87 cooperative_groups::grid_group m_grid_group;
105template <
typename IndexType_>
106class CooperativeWorkGroupLoopContext
118 constexpr CooperativeWorkGroupLoopContext(
Int32 loop_index,
Int32 group_index,
120 : BaseClass(loop_index, group_index, group_size, nb_active_item, total_size)
126 explicit constexpr ARCCORE_DEVICE CooperativeWorkGroupLoopContext(
Int64 total_size)
127 : BaseClass(total_size)
132#if defined(ARCCORE_DEVICE_CODE) && !defined(ARCCORE_COMPILING_SYCL)
134 __device__ CooperativeDeviceWorkItemGrid
grid()
const {
return CooperativeDeviceWorkItemGrid{}; }
146#if defined(ARCCORE_COMPILING_SYCL)
151class SyclCooperativeDeviceWorkItemGrid
157 explicit SyclCooperativeDeviceWorkItemGrid(sycl::nd_item<1> n)
169 sycl::nd_item<1> m_nd_item;
180template <
typename IndexType_>
184 friend CooperativeWorkGroupLoopRange<IndexType_>;
185 friend Impl::WorkGroupLoopContextBuilder;
190 explicit SyclCooperativeWorkGroupLoopContext(sycl::nd_item<1> nd_item,
Int64 total_size)
191 : SyclWorkGroupLoopContextBase<IndexType_>(nd_item, total_size)
198 SyclCooperativeDeviceWorkItemGrid grid()
const
200 return SyclCooperativeDeviceWorkItemGrid(this->m_nd_item);
217template <
typename IndexType_>
218class CooperativeWorkGroupLoopRange
219:
public WorkGroupLoopRangeBase<IndexType_>
224 using IndexType = IndexType_;
227 static constexpr bool isCooperativeLaunch() {
return true; }
231 CooperativeWorkGroupLoopRange() =
default;
232 explicit CooperativeWorkGroupLoopRange(IndexType total_nb_element)
233 : WorkGroupLoopRangeBase<IndexType_>(total_nb_element)
Gère une grille de WorkItem dans un CooperativeWorkGroupLoopRange pour l'hôte.
void barrier()
Bloque tant que tous les WorkItem de la grille ne sont pas arrivés ici.
Contexte d'exécution d'une commande sur un ensemble de blocs.
CooperativeHostWorkItemGrid grid() const
Groupe courant.
Intervalle d'itération d'une boucle utilisant le parallélisme hiérarchique collaboratif.
constexpr WorkGroupLoopContextBase(IndexType loop_index, Int32 group_index, Int32 group_size, Int32 nb_active_item, Int64 total_size)
Ce constructeur est utilisé dans l'implémentation hôte.
Espace de nom pour l'utilisation des accélérateurs.
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.