oneTBB support terminate tbb thread (#11972)

Change-Id: Iea618b72db193bd48bfbf0dba3586dcdb139c43f

Co-authored-by: Shen, Wanglei <wanglei.shen@intel.com>
This commit is contained in:
River Li 2022-07-05 19:11:10 +08:00 committed by GitHub
parent 82f691c38b
commit 177d977449
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,6 +9,8 @@
#if IE_THREAD == IE_THREAD_TBB || IE_THREAD == IE_THREAD_TBB_AUTO
# if (TBB_INTERFACE_VERSION < 12000)
# include <tbb/task_scheduler_init.h>
# else
# include <oneapi/tbb/global_control.h>
# endif
#endif
@ -42,6 +44,8 @@ private:
#if IE_THREAD == IE_THREAD_TBB || IE_THREAD == IE_THREAD_TBB_AUTO
# if (TBB_INTERFACE_VERSION < 12000)
std::shared_ptr<tbb::task_scheduler_init> tbbTaskScheduler = nullptr;
# else
std::shared_ptr<oneapi::tbb::task_scheduler_handle> tbbTaskScheduler = nullptr;
# endif
#endif
};
@ -56,15 +60,17 @@ void ExecutorManagerImpl::setTbbFlag(bool flag) {
std::lock_guard<std::mutex> guard(tbbMutex);
tbbTerminateFlag = flag;
#if IE_THREAD == IE_THREAD_TBB || IE_THREAD == IE_THREAD_TBB_AUTO
# if (TBB_INTERFACE_VERSION < 12000)
if (tbbTerminateFlag) {
if (!tbbTaskScheduler) {
# if (TBB_INTERFACE_VERSION < 12000)
tbbTaskScheduler = std::make_shared<tbb::task_scheduler_init>();
# else
tbbTaskScheduler = std::make_shared<oneapi::tbb::task_scheduler_handle>(tbb::attach{});
# endif
}
} else {
tbbTaskScheduler = nullptr;
}
# endif
#endif
}
@ -77,13 +83,15 @@ void ExecutorManagerImpl::resetTbb() {
std::lock_guard<std::mutex> guard(tbbMutex);
if (tbbTerminateFlag) {
#if IE_THREAD == IE_THREAD_TBB || IE_THREAD == IE_THREAD_TBB_AUTO
# if (TBB_INTERFACE_VERSION < 12000)
if (tbbTaskScheduler && tbbThreadsCreated) {
# if (TBB_INTERFACE_VERSION < 12000)
tbbTaskScheduler->terminate();
# else
tbb::finalize(*tbbTaskScheduler, std::nothrow);
# endif
}
tbbThreadsCreated = false;
tbbTaskScheduler = nullptr;
# endif
#endif
tbbTerminateFlag = false;
}