18 #ifndef viskores_cont_tbb_internal_RuntimeDeviceConfigurationTBB_h
19 #define viskores_cont_tbb_internal_RuntimeDeviceConfigurationTBB_h
25 #if TBB_VERSION_MAJOR >= 2020
26 #define TBB_PREVIEW_GLOBAL_CONTROL
27 #include <tbb/global_control.h>
28 #include <tbb/task_arena.h>
44 class RuntimeDeviceConfiguration<
viskores::cont::DeviceAdapterTagTBB>
45 :
public viskores::cont::internal::RuntimeDeviceConfigurationBase
49 RuntimeDeviceConfiguration<viskores::cont::DeviceAdapterTagTBB>()
51 #if TBB_VERSION_MAJOR >= 2020
52 HardwareMaxThreads(::tbb::task_arena{}.max_concurrency())
55 HardwareMaxThreads(::tbb::task_scheduler_init::default_num_threads())
58 CurrentNumThreads(this->HardwareMaxThreads)
69 this->CurrentNumThreads = value > 0 ? value : this->HardwareMaxThreads;
70 #if TBB_VERSION_MAJOR >= 2020
71 GlobalControl.reset(new ::tbb::global_control(::tbb::global_control::max_allowed_parallelism,
72 this->CurrentNumThreads));
74 TaskSchedulerInit.reset(
75 new ::tbb::task_scheduler_init(
static_cast<int>(this->CurrentNumThreads)));
77 return RuntimeDeviceConfigReturnCode::SUCCESS;
82 #if TBB_VERSION_MAJOR >= 2020
83 value = ::tbb::global_control::active_value(::tbb::global_control::max_allowed_parallelism);
85 value = this->CurrentNumThreads;
87 return RuntimeDeviceConfigReturnCode::SUCCESS;
92 value = this->HardwareMaxThreads;
93 return RuntimeDeviceConfigReturnCode::SUCCESS;
97 #if TBB_VERSION_MAJOR >= 2020
98 std::unique_ptr<::tbb::global_control> GlobalControl;
100 std::unique_ptr<::tbb::task_scheduler_init> TaskSchedulerInit;
109 #endif //viskores_cont_tbb_internal_RuntimeDeviceConfigurationTBB_h