Only use current thread with TBB when -nstreams=0 (#20975)

* only use current thread when -nstreams=0 with TBB

* add comments

* fix building issue

* fix comments

* only use current thread when -nstreams=0 with TBB

* add comments

* fix building issue

* fix comments
This commit is contained in:
Sun Xiaoxia 2023-12-04 13:52:52 +08:00 committed by GitHub
parent e3988cd6a8
commit 9cca05def8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 2 deletions

View File

@ -194,6 +194,11 @@ public:
int threads_per_stream,
PreferredCoreType core_type,
bool cpu_pinning);
/**
* @brief Set _streams_info_table and _cpu_reservation in cpu streams executor config when nstreams = 0,
* that is, only create one thread with TBB
*/
void set_config_zero_stream();
};
/**

View File

@ -186,7 +186,10 @@ struct CPUStreamsExecutor::Impl {
int max_threads_per_core;
StreamCreateType stream_type;
const auto org_proc_type_table = get_org_proc_type_table();
const auto stream_id = _streamId >= _impl->_config._streams ? _impl->_config._streams - 1 : _streamId;
const auto stream_id =
_impl->_config._streams == 0
? 0
: (_streamId >= _impl->_config._streams ? _impl->_config._streams - 1 : _streamId);
get_cur_stream_info(stream_id,
_impl->_config._cpu_reservation,

View File

@ -659,5 +659,22 @@ void IStreamsExecutor::Config::update_executor_config(int stream_nums,
}
}
void IStreamsExecutor::Config::set_config_zero_stream() {
std::vector<std::vector<int>> proc_type_table = get_proc_type_table();
int core_type = MAIN_CORE_PROC;
int numa_id = 0;
int socket_id = 0;
if (proc_type_table.size() > 0) {
core_type = proc_type_table[0][MAIN_CORE_PROC] > 0
? MAIN_CORE_PROC
: (proc_type_table[0][EFFICIENT_CORE_PROC] > 0 ? EFFICIENT_CORE_PROC : HYPER_THREADING_PROC);
numa_id = std::max(0, proc_type_table[0][PROC_NUMA_NODE_ID]);
socket_id = std::max(0, proc_type_table[0][PROC_SOCKET_ID]);
}
_streams_info_table.push_back({1, core_type, 1, numa_id, socket_id});
_cpu_reservation = false;
}
} // namespace threading
} // namespace ov

View File

@ -247,7 +247,7 @@ ov::Any CompiledModel::get_property(const std::string& name) const {
} else if (name == ov::optimal_number_of_infer_requests) {
const auto streams = config.streamExecutorConfig._streams;
return decltype(ov::optimal_number_of_infer_requests)::value_type(
streams); // ov::optimal_number_of_infer_requests has no negative values
streams > 0 ? streams : 1); // ov::optimal_number_of_infer_requests has no negative values
} else if (name == ov::num_streams) {
const auto streams = config.streamExecutorConfig._streams;
return decltype(ov::num_streams)::value_type(

View File

@ -330,6 +330,8 @@ void Engine::get_performance_streams(Config& config, const std::shared_ptr<ov::M
if (!((0 == config.streamExecutorConfig._streams) && config.streamExecutorConfig._streams_changed)) {
get_num_streams(streams, model, config);
} else {
config.streamExecutorConfig.set_config_zero_stream();
}
OPENVINO_SUPPRESS_DEPRECATED_START