10 #ifndef vtk_m_cont_openmp_internal_RuntimeDeviceConfigurationOpenMP_h
11 #define vtk_m_cont_openmp_internal_RuntimeDeviceConfigurationOpenMP_h
18 VTKM_THIRDPARTY_PRE_INCLUDE
20 VTKM_THIRDPARTY_POST_INCLUDE
30 class RuntimeDeviceConfiguration<
vtkm::cont::DeviceAdapterTagOpenMP>
31 :
public vtkm::cont::internal::RuntimeDeviceConfigurationBase
34 RuntimeDeviceConfiguration<vtkm::cont::DeviceAdapterTagOpenMP>()
35 : HardwareMaxThreads(InitializeHardwareMaxThreads())
36 , CurrentNumThreads(this->HardwareMaxThreads)
42 return vtkm::cont::DeviceAdapterTagOpenMP{};
45 VTKM_CONT virtual RuntimeDeviceConfigReturnCode SetThreads(
const vtkm::Id& value)
override final
47 if (omp_in_parallel())
50 return RuntimeDeviceConfigReturnCode::NOT_APPLIED;
54 if (value > this->HardwareMaxThreads)
57 "OpenMP: You may be oversubscribing your CPU cores: "
58 <<
"process threads available: " << this->HardwareMaxThreads
59 <<
", requested threads: " << value);
61 this->CurrentNumThreads = value;
62 omp_set_num_threads(this->CurrentNumThreads);
66 this->CurrentNumThreads = this->HardwareMaxThreads;
67 omp_set_num_threads(this->CurrentNumThreads);
69 return RuntimeDeviceConfigReturnCode::SUCCESS;
72 VTKM_CONT virtual RuntimeDeviceConfigReturnCode GetThreads(
vtkm::Id& value)
const override final
74 value = this->CurrentNumThreads;
75 return RuntimeDeviceConfigReturnCode::SUCCESS;
78 VTKM_CONT virtual RuntimeDeviceConfigReturnCode GetMaxThreads(
79 vtkm::Id& value)
const override final
81 value = this->HardwareMaxThreads;
82 return RuntimeDeviceConfigReturnCode::SUCCESS;
90 if (omp_in_parallel())
92 count = omp_get_num_threads();
112 #endif //vtk_m_cont_openmp_internal_RuntimeDeviceConfigurationOpenMP_h