From: Ilya Lavrenov Date: Wed, 2 Dec 2020 13:43:06 +0000 (+0300) Subject: Restore compilaltion with tbb 2017u7 (#3007) (#3426) X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f730bf9ae9b1e7810dc047766ffc4a7f377a2091;p=platform%2Fupstream%2Fdldt.git Restore compilaltion with tbb 2017u7 (#3007) (#3426) * Restore compilaltion with tbb 2017u7 Signed-off-by: Alexander Peskov * Fix unsupported arg for tbb deterministic_reduce Signed-off-by: Alexander Peskov Co-authored-by: Alexander Zhogov Co-authored-by: Alexander Peskov Co-authored-by: Alexander Zhogov --- diff --git a/inference-engine/cmake/ie_parallel.cmake b/inference-engine/cmake/ie_parallel.cmake index de39ac7..f8988aa 100644 --- a/inference-engine/cmake/ie_parallel.cmake +++ b/inference-engine/cmake/ie_parallel.cmake @@ -7,6 +7,7 @@ function(set_ie_threading_interface_for TARGET_NAME) find_package(TBB COMPONENTS tbb tbbmalloc) set("TBB_FOUND" ${TBB_FOUND} PARENT_SCOPE) set("TBB_IMPORTED_TARGETS" ${TBB_IMPORTED_TARGETS} PARENT_SCOPE) + set("TBB_VERSION" ${TBB_VERSION} PARENT_SCOPE) if (TBB_FOUND) if (TBB_VERSION VERSION_LESS 2020) ext_message(WARNING "TBB version is less than OpenVINO recommends to use.\ diff --git a/inference-engine/include/ie_parallel.hpp b/inference-engine/include/ie_parallel.hpp index 67286f3..bc33c92 100644 --- a/inference-engine/include/ie_parallel.hpp +++ b/inference-engine/include/ie_parallel.hpp @@ -58,6 +58,15 @@ inline int parallel_get_env_threads() { } #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 @@ -186,7 +195,7 @@ void parallel_sort(I begin, I end, const F& comparator) { template 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(0, D0), input, [&](const tbb::blocked_range& r, R init) -> R { R sum = init; @@ -218,7 +227,7 @@ R parallel_sum(const T0& D0, const R& input, const F& func) { template 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(0, D0, 0, D1), input, [&](const tbb::blocked_range2d& r, R init) -> R { R sum = init; @@ -257,7 +266,7 @@ R parallel_sum2d(const T0& D0, const T1& D1, const R& input, const F& func) { template 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(0, D0, 0, D1, 0, D2), input, [&](const tbb::blocked_range3d& r, R init) -> R { R sum = init; diff --git a/inference-engine/tests/functional/inference_engine/CMakeLists.txt b/inference-engine/tests/functional/inference_engine/CMakeLists.txt index 4664302..e7b4617 100644 --- a/inference-engine/tests/functional/inference_engine/CMakeLists.txt +++ b/inference-engine/tests/functional/inference_engine/CMakeLists.txt @@ -152,6 +152,13 @@ function(ie_headers_compilation_with_custom_flags) # 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)