15#if !defined(GPURECONSTRUCTIONTHREADING_H)
16#define GPURECONSTRUCTIONTHREADING_H
18#if !defined(GPUCA_GPUCODE)
22#include <oneapi/tbb.h>
28 std::unique_ptr<tbb::global_control>
control;
38#define GPUCA_TBB_KERNEL_LOOP_HOST(rec, vartype, varname, iEnd, code) \
39 for (vartype varname = get_global_id(0); varname < iEnd; varname += get_global_size(0)) { \
44#define GPUCA_TBB_KERNEL_LOOP GPUCA_TBB_KERNEL_LOOP_HOST
46#define GPUCA_TBB_KERNEL_LOOP(rec, vartype, varname, iEnd, code) \
47 if (!rec.GetProcessingSettings().inKernelParallel) { \
48 rec.mThreading->activeThreads->execute([&] { \
49 tbb::parallel_for(tbb::blocked_range<vartype>(get_global_id(0), iEnd, get_global_size(0)), [&](const tbb::blocked_range<vartype>& _r_internal) { \
50 for (vartype varname = _r_internal.begin(); varname < _r_internal.end(); varname += get_global_size(0)) { \
56 GPUCA_TBB_KERNEL_LOOP_HOST(rec, vartype, varname, iEnd, code) \
std::unique_ptr< tbb::global_control > control
std::unique_ptr< tbb::task_arena > activeThreads
std::unique_ptr< tbb::task_arena > outerThreads
std::unique_ptr< tbb::task_arena > allThreads