40 #ifdef ALPAKA_ACC_CPU_B_TBB_T_SEQ_ENABLED
44 template<
typename TDim,
typename TIdx,
typename TKernelFnObj,
typename... TArgs>
45 class TaskKernelCpuTbbBlocks;
48 template<
typename TDim,
typename TIdx>
49 class AccCpuTbbBlocks final
51 ,
public gb::IdxGbRef<TDim, TIdx>
52 ,
public bt::IdxBtZero<TDim, TIdx>
57 ,
public math::MathStdLib
58 ,
public BlockSharedMemDynMember<>
59 ,
public BlockSharedMemStMember<>
60 ,
public BlockSyncNoOp
63 # ifdef ALPAKA_DISABLE_VENDOR_RNG
64 ,
public rand::RandDefault
68 ,
public warp::WarpSingleThread
69 ,
public concepts::Implements<ConceptAcc, AccCpuTbbBlocks<TDim, TIdx>>
72 sizeof(TIdx) >=
sizeof(
int),
73 "Index type is not supported, consider using int or a larger type.");
77 template<
typename TDim2,
typename TIdx2,
typename TKernelFnObj,
typename... TArgs>
78 friend class ::alpaka::TaskKernelCpuTbbBlocks;
80 AccCpuTbbBlocks(AccCpuTbbBlocks
const&) =
delete;
81 AccCpuTbbBlocks(AccCpuTbbBlocks&&) =
delete;
82 auto operator=(AccCpuTbbBlocks
const&) -> AccCpuTbbBlocks& =
delete;
83 auto operator=(AccCpuTbbBlocks&&) -> AccCpuTbbBlocks& =
delete;
86 template<
typename TWorkDiv>
87 ALPAKA_FN_HOST AccCpuTbbBlocks(TWorkDiv
const& workDiv, std::size_t
const& blockSharedMemDynSizeBytes)
89 , gb::IdxGbRef<TDim, TIdx>(m_gridBlockIdx)
90 , BlockSharedMemDynMember<>(blockSharedMemDynSizeBytes)
91 , BlockSharedMemStMember<>(staticMemBegin(), staticMemCapacity())
92 , m_gridBlockIdx(
Vec<TDim, TIdx>::zeros())
98 Vec<TDim, TIdx>
mutable m_gridBlockIdx;
104 template<
typename TDim,
typename TIdx>
105 struct AccType<AccCpuTbbBlocks<TDim, TIdx>>
107 using type = AccCpuTbbBlocks<TDim, TIdx>;
111 template<
typename TDim,
typename TIdx>
112 struct GetAccDevProps<AccCpuTbbBlocks<TDim, TIdx>>
117 static_cast<TIdx
>(1),
125 static_cast<TIdx
>(1),
131 static_cast<size_t>(AccCpuTbbBlocks<TDim, TIdx>::staticAllocBytes()),
138 template<
typename TDim,
typename TIdx>
139 struct GetAccName<AccCpuTbbBlocks<TDim, TIdx>>
143 return "AccCpuTbbBlocks<" + std::to_string(TDim::value) +
"," + core::demangled<TIdx> +
">";
148 template<
typename TDim,
typename TIdx>
149 struct DevType<AccCpuTbbBlocks<TDim, TIdx>>
155 template<
typename TDim,
typename TIdx>
156 struct DimType<AccCpuTbbBlocks<TDim, TIdx>>
162 template<
typename TDim,
typename TIdx,
typename TWorkDiv,
typename TKernelFnObj,
typename... TArgs>
163 struct CreateTaskKernel<AccCpuTbbBlocks<TDim, TIdx>, TWorkDiv, TKernelFnObj, TArgs...>
166 TWorkDiv
const& workDiv,
167 TKernelFnObj
const& kernelFnObj,
170 return TaskKernelCpuTbbBlocks<TDim, TIdx, TKernelFnObj, TArgs...>(
173 std::forward<TArgs>(args)...);
178 template<
typename TDim,
typename TIdx>
179 struct PlatformType<AccCpuTbbBlocks<TDim, TIdx>>
181 using type = PlatformCpu;
185 template<
typename TDim,
typename TIdx>
186 struct IdxType<AccCpuTbbBlocks<TDim, TIdx>>
191 template<
typename TDim,
typename TIdx>
197 template<
typename TDim,
typename TIdx>
200 using type = alpaka::AccCpuTbbBlocks<TDim, TIdx>;
ALPAKA_NO_HOST_ACC_WARNING static constexpr ALPAKA_FN_HOST_ACC auto ones() -> Vec< TDim, TVal >
One value constructor.
ALPAKA_NO_HOST_ACC_WARNING static constexpr ALPAKA_FN_HOST_ACC auto all(TIdx const &val) -> Vec< TDim, TIdx >
Single value constructor.
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto max(T const &max_ctx, Tx const &x, Ty const &y)
Returns the larger of two arguments. NaNs are treated as missing data (between a NaN and a numeric va...
TinyMersenneTwister RandStdLib
The alpaka accelerator library.
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC WorkDivMembers(alpaka::Vec< TDim, TIdx > const &gridBlockExtent, alpaka::Vec< TDim, TIdx > const &blockThreadExtent, alpaka::Vec< TDim, TIdx > const &elemExtent) -> WorkDivMembers< TDim, TIdx >
Deduction guide for the constructor which can be called without explicit template type parameters.
ALPAKA_FN_HOST auto getAccDevProps(TDev const &dev) -> AccDevProps< Dim< TAcc >, Idx< TAcc >>
ALPAKA_FN_HOST auto createTaskKernel(TWorkDiv const &workDiv, TKernelFnObj const &kernelFnObj, TArgs &&... args)
Creates a kernel execution task.
ALPAKA_FN_HOST auto getMemBytes(TDev const &dev) -> std::size_t
Vec(TFirstIndex &&, TRestIndices &&...) -> Vec< DimInt< 1+sizeof...(TRestIndices)>, std::decay_t< TFirstIndex >>
alpaka::meta::InheritFromList< alpaka::meta::Unique< std::tuple< TGridAtomic, TBlockAtomic, TThreadAtomic, concepts::Implements< ConceptAtomicGrids, TGridAtomic >, concepts::Implements< ConceptAtomicBlocks, TBlockAtomic >, concepts::Implements< ConceptAtomicThreads, TThreadAtomic > >> > AtomicHierarchy
build a single class to inherit from different atomic implementations
typename trait::AccToTag< TAcc >::type AccToTag
maps an acc type to a tag type
typename trait::TagToAcc< TTag, TDim, TIdx >::type TagToAcc
maps a tag type to an acc type
static ALPAKA_FN_HOST auto getAccName() -> std::string