24 #include <type_traits>
26 #if ALPAKA_DEBUG >= ALPAKA_DEBUG_MINIMAL
30 #ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED
35 template<
typename TDim,
typename TIdx,
typename TKernelFnObj,
typename... TArgs>
39 template<
typename TWorkDiv>
42 , m_kernelFnObj(std::move(kernelFnObj))
43 , m_args(std::forward<TArgs>(args)...)
46 Dim<std::decay_t<TWorkDiv>>::value == TDim::value,
47 "The work division and the execution task have to be of the same dimensionality!");
55 auto const gridBlockExtent = getWorkDiv<Grid, Blocks>(*
this);
56 auto const blockThreadExtent = getWorkDiv<Block, Threads>(*
this);
57 auto const threadElemExtent = getWorkDiv<Thread, Elems>(*
this);
60 auto const blockSharedMemDynSizeBytes = std::apply(
61 [&](std::decay_t<TArgs>
const&... args)
63 return getBlockSharedMemDynSizeBytes<AccCpuSerial<TDim, TIdx>>(
71 # if ALPAKA_DEBUG >= ALPAKA_DEBUG_FULL
72 std::cout << __func__ <<
" blockSharedMemDynSizeBytes: " << blockSharedMemDynSizeBytes <<
" B"
78 blockSharedMemDynSizeBytes);
80 if(blockThreadExtent.prod() !=
static_cast<TIdx
>(1u))
82 throw std::runtime_error(
"A block for the serial accelerator can only ever have one single thread!");
90 acc.m_gridBlockIdx = blockThreadIdx;
92 std::apply(m_kernelFnObj, std::tuple_cat(std::tie(acc), m_args));
100 TKernelFnObj m_kernelFnObj;
101 std::tuple<std::decay_t<TArgs>...> m_args;
107 template<
typename TDim,
typename TIdx,
typename TKernelFnObj,
typename... TArgs>
114 template<
typename TDim,
typename TIdx,
typename TKernelFnObj,
typename... TArgs>
121 template<
typename TDim,
typename TIdx,
typename TKernelFnObj,
typename... TArgs>
128 template<
typename TDim,
typename TIdx,
typename TKernelFnObj,
typename... TArgs>
135 template<
typename TDim,
typename TIdx,
typename TKernelFnObj,
typename... TArgs>
#define ALPAKA_DEBUG_MINIMAL_LOG_SCOPE
The CPU serial accelerator.
The CPU serial execution task implementation.
ALPAKA_FN_HOST TaskKernelCpuSerial(TWorkDiv &&workDiv, TKernelFnObj kernelFnObj, TArgs &&... args)
ALPAKA_FN_HOST auto operator()() const -> void
Executes the kernel function object.
A basic class holding the work division as grid block extent, block thread and thread element extent.
The alpaka accelerator library.
typename trait::DimType< T >::type Dim
The dimension type trait alias template to remove the ::type.
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto freeSharedVars(TBlockSharedMemSt &blockSharedMemSt) -> void
Frees all memory used by block shared variables.
The accelerator type trait.
The dimension getter type trait.