}
#if IE_THREAD == IE_THREAD_TBB
#define PARTITIONING , tbb::static_partitioner()
+
+// The TBB version less than 2018u1 has no static_partitioner argument for
+// tbb::parallel_deterministic_reduce. So will fallback to non deterministic version.
+#if (TBB_INTERFACE_VERSION >= 10001)
+#define _TBB_REDUCE_FUNC tbb::parallel_deterministic_reduce
+#else
+#define _TBB_REDUCE_FUNC tbb::parallel_reduce
+#endif
+
#else
#define PARTITIONING
#endif
template <typename T0, typename R, typename F>
R parallel_sum(const T0& D0, const R& input, const F& func) {
#if (IE_THREAD == IE_THREAD_TBB || IE_THREAD == IE_THREAD_TBB_AUTO)
- return tbb::parallel_deterministic_reduce(
+ return _TBB_REDUCE_FUNC(
tbb::blocked_range<T0>(0, D0), input,
[&](const tbb::blocked_range<T0>& r, R init) -> R {
R sum = init;
template <typename T0, typename T1, typename R, typename F>
R parallel_sum2d(const T0& D0, const T1& D1, const R& input, const F& func) {
#if (IE_THREAD == IE_THREAD_TBB || IE_THREAD == IE_THREAD_TBB_AUTO)
- return tbb::parallel_deterministic_reduce(
+ return _TBB_REDUCE_FUNC(
tbb::blocked_range2d<T0, T1>(0, D0, 0, D1), input,
[&](const tbb::blocked_range2d<T0, T1>& r, R init) -> R {
R sum = init;
template <typename T0, typename T1, typename T2, typename R, typename F>
R parallel_sum3d(const T0& D0, const T1& D1, const T2& D2, const R& input, const F& func) {
#if (IE_THREAD == IE_THREAD_TBB || IE_THREAD == IE_THREAD_TBB_AUTO)
- return tbb::parallel_deterministic_reduce(
+ return _TBB_REDUCE_FUNC(
tbb::blocked_range3d<T0, T1, T2>(0, D0, 0, D1, 0, D2), input,
[&](const tbb::blocked_range3d<T0, T1, T2>& r, R init) -> R {
R sum = init;
# To include TBB headers as system
set_ie_threading_interface_for(${target_name})
+ # To avoid further TBB find_package action in next call of this function. Some version of TBB
+ # has an issue with cmake config which lead to fail in case of multiple call of find_package
+ # from one cmake script file.
+ set("TBB_FOUND" ${TBB_FOUND} PARENT_SCOPE)
+ set("TBB_IMPORTED_TARGETS" ${TBB_IMPORTED_TARGETS} PARENT_SCOPE)
+ set("TBB_VERSION" ${TBB_VERSION} PARENT_SCOPE)
+
set_target_properties(${target_name} PROPERTIES
CXX_STANDARD ${IE_TEST_CXX_STANDARD}
CXX_STANDARD_REQUIRED OFF)