25 template<onHost::concepts::ThreadSpec T_ThreadSpec>
30 constexpr Serial(T_ThreadSpec threadBlocking, uint32_t numaIdx,
bool setThreadAffinity)
37 throw std::runtime_error(
"Thread block extent must be 1.");
41 void operator()(
auto const& kernelBundle,
auto const& dict)
const
44 internal::hwloc::setThreadAffinity(
m_numaIdx);
47 constexpr uint32_t simdWidth
55 auto const blockSharedMemEntry =
DictEntry{layer::shared, std::ref(blockSharedMem)};
60 auto const blockDynSharedMemEntry =
DictEntry{layer::dynShared, std::ref(blockSharedMem)};
61 auto const blockDynSharedMemBytesEntry
62 =
DictEntry{object::dynSharedMemBytes, std::ref(blockDynSharedMemBytes)};
69 Dict{blockDynSharedMemEntry, blockDynSharedMemBytesEntry});
74 Dict{blockLayerEntry, threadLayerEntry, blockSharedMemEntry, blockSyncEntry, warpSizeEntry},
82 acc[layer::shared].reset();
97 return cpu::Serial(threadSpec, numaIdx, setThreadAffinity);
#define ALPAKA_TYPEOF(...)
Get the type of instance.
Concept to check if a type is a ThreadSpec.
constexpr WarpSize warpSize
constexpr DeviceKind deviceKind
Functionality which is usable on the host CPU controller thread.
auto makeAcc(alpaka::onHost::concepts::ThreadSpec auto const &threadSpec, uint32_t numaIdx, bool setThreadAffinity)
constexpr uint32_t getDynSharedMemBytes(T_ThreadSpec spec, T_KernelBundle const &kernelBundle)
constexpr auto conditionalAppendDict(Dict< T_Entries0... > const &dict0, Dict< T_Entries1... > const &dict1)
consteval uint32_t getArchSimdWidth(concepts::Api auto const api, alpaka::concepts::DeviceKind auto const deviceType)
Get the SIMD width in bytes for an API and device kind combination.
constexpr auto joinDict(Dict< T_Entries0... > const &dict0, Dict< T_Entries1... > const &dict1)
void operator()(auto const &kernelBundle, auto const &dict) const
T_ThreadSpec m_threadBlocking
typename T_ThreadSpec::NumThreadsVecType NumThreadsVecType
constexpr Serial(T_ThreadSpec threadBlocking, uint32_t numaIdx, bool setThreadAffinity)