16 namespace internalCompute
18 template<concepts::Acc T_Acc>
21 constexpr alpaka::concepts::Vector<uint32_t, 1u>
auto operator()(
26 return Vec{warp::internal::getLaneIdx(acc)};
30 template<
typename T_Acc>
33 constexpr alpaka::concepts::Vector
auto operator()(
42 template<concepts::Acc T_Acc>
45 constexpr alpaka::concepts::Vector<uint32_t, 1u>
auto operator()(
50 return Vec{warp::internal::getWarpIdx(acc)};
54 template<
typename T_Acc>
57 constexpr alpaka::concepts::Vector
auto operator()(
66 template<concepts::Acc T_Acc>
69 constexpr alpaka::concepts::Vector<uint32_t, 1u>
auto operator()(
74 auto blockIdxInGrid = acc.getIdxWithin(onAcc::origin::grid, onAcc::unit::blocks);
75 auto numBlocksInGrid = acc.getExtentsOf(onAcc::origin::grid, onAcc::unit::blocks);
76 auto linearBlockIdx =
linearize(numBlocksInGrid, blockIdxInGrid);
77 return linearBlockIdx +
Vec{warp::internal::getWarpIdx(acc)};
81 template<concepts::Acc T_Acc>
84 constexpr alpaka::concepts::Vector
auto operator()(
93 template<concepts::Acc T_Acc>
100 constexpr alpaka::concepts::Vector
auto operator()(
107 using ValueType =
typename ExtentType::type;
108 constexpr uint32_t dim = ExtentType::dim();
114 template<concepts::Acc T_Acc>
117 constexpr alpaka::concepts::CVector<uint32_t>
auto operator()(
127 template<concepts::Acc T_Acc>
130 constexpr alpaka::concepts::Vector
auto operator()(
139 template<concepts::Acc T_Acc>
142 constexpr alpaka::concepts::Vector<alpaka::NotRequired, 1u>
auto operator()(
148 = acc.getExtentsOf(onAcc::origin::block, onAcc::unit::threads).product();
150 return Vec{
divCeil(linearThreadsInBlock,
static_cast<IndexType
>(T_Acc::getWarpSize()))};
154 template<concepts::Acc T_Acc>
157 constexpr alpaka::concepts::Vector
auto operator()(
166 template<concepts::Acc T_Acc>
169 constexpr alpaka::concepts::Vector<alpaka::NotRequired, 1u>
auto operator()(
174 std::integral
auto linearNumWarpsInBlock
175 = acc.getExtentsOf(onAcc::origin::block, onAcc::unit::warps).product();
176 std::integral
auto linearNumBlocks
177 = acc.getExtentsOf(onAcc::origin::grid, onAcc::unit::blocks).product();
178 return Vec{linearNumBlocks * linearNumWarpsInBlock};
182 template<concepts::Acc T_Acc>
185 constexpr alpaka::concepts::Vector
auto operator()(
194 template<concepts::Acc T_Acc>
201 constexpr alpaka::concepts::Vector
auto operator()(
207 using ValueType =
typename ExtentType::type;
208 constexpr uint32_t dim = ExtentType::dim();
#define ALPAKA_TYPEOF(...)
Get the type of instance.
constexpr auto linearThreadsInBlock
functionality which is usable on the accelerator compute device from within a kernel.
typename GetValueType< T >::type GetValueType_t
ALPAKA_FN_HOST_ACC constexpr auto divCeil(Integral a, Integral b) -> Integral
Returns the ceiling of a / b, as integer.
constexpr T_IntegralType linearize(Vec< T_IntegralType, T_dim - 1u, T_Storage > const &dim, Vec< T_IntegralType, T_dim, T_OtherStorage > const &idx)
Give the linear index of an N-dimensional index within an N-dimensional index space.
Vec< T, sizeof...(T_values), detail::CVec< T, T_values... > > CVec
A vector with compile-time known values.
ALPAKA_FN_HOST_ACC Vec(T_1, T_Args...) -> Vec< T_1, uint32_t(sizeof...(T_Args)+1u), ArrayStorage< T_1, uint32_t(sizeof...(T_Args)+1u)> >
consteval auto fillCVec()
Create and return a CVector of some length, filled with the given value.