24 std::array<fn_type, static_cast<size_t>(DeviceType::Count)> table_{};
27 void register_kernel(DeviceType dev, fn_type f) {
28 table_[
static_cast<size_t>(dev)] = f;
31 template <
typename... Args>
32 decltype(
auto)
operator()(DeviceType dev, Args&&... args)
const {
33 fn_type f = table_[
static_cast<size_t>(dev)];
34 LMP_CHECK(f) <<
"Kernel for this backend not registered";
35 return f(std::forward<Args>(args)...);