8#include <oneapi/tbb/task_arena.h>
9#include <oneapi/tbb/task_group.h>
16namespace uni20::async::detail
20struct TbbTaskAdmissionContext
22 std::string_view scheduler;
26[[noreturn]]
inline void tbb_task_admission_failure(TbbTaskAdmissionContext context, std::string_view reason)
28 if (context.device >= 0)
30 PANIC(
"oneTBB scheduler admission failed", context.scheduler, context.device, reason);
32 PANIC(
"oneTBB scheduler admission failed", context.scheduler, reason);
39template <
typename Function>
40void enqueue_tbb_task(oneapi::tbb::task_arena& arena, oneapi::tbb::task_group& group, Function&& function,
41 TbbTaskAdmissionContext context)
noexcept
45 auto task = group.defer(std::forward<Function>(function));
46 arena.enqueue(std::move(task));
48 catch (std::exception
const& error)
50 tbb_task_admission_failure(context,
error.what());
54 tbb_task_admission_failure(context,
"unknown exception");
#define PANIC(...)
Definition trace.hpp:382