From 48c0897b0fb2e6e110f04b81118be63967300a5f Mon Sep 17 00:00:00 2001 From: Vladimir Paramuzov Date: Mon, 5 Dec 2022 09:59:03 +0400 Subject: [PATCH] [GPU] Adjust default num streams (#14308) --- .../intel_gpu/plugin/device_config.hpp | 2 +- .../include/intel_gpu/runtime/device_info.hpp | 1 + .../intel_gpu/src/plugin/device_config.cpp | 4 ++-- src/plugins/intel_gpu/src/plugin/plugin.cpp | 20 ++++++++++++++----- .../intel_gpu/src/runtime/ocl/ocl_device.cpp | 13 ++++++++++++ 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/plugins/intel_gpu/include/intel_gpu/plugin/device_config.hpp b/src/plugins/intel_gpu/include/intel_gpu/plugin/device_config.hpp index 94c8279df1d..1b46d891a35 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/plugin/device_config.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/plugin/device_config.hpp @@ -58,7 +58,7 @@ struct Config { uint32_t GetDefaultNStreamsForThroughputMode() const { return 2; } - void UpdateFromMap(const std::map& configMap); + void UpdateFromMap(const std::map& configMap, const cldnn::device_info& info); void adjustKeyMapValues(); static bool isNewApiProperty(std::string property); static std::string ConvertPropertyToLegacy(const std::string& key, const std::string& value); diff --git a/src/plugins/intel_gpu/include/intel_gpu/runtime/device_info.hpp b/src/plugins/intel_gpu/include/intel_gpu/runtime/device_info.hpp index fc513c6a22f..6855d1dca3f 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/runtime/device_info.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/runtime/device_info.hpp @@ -81,6 +81,7 @@ struct device_info { uint32_t num_sub_slices_per_slice; ///< Number of subslices in a slice uint32_t num_eus_per_sub_slice; ///< Number of execution units per subslice uint32_t num_threads_per_eu; ///< Number of hardware threads per execution unit + uint32_t num_ccs; ///< Number of compute command streamers device_uuid uuid; ///< UUID of the gpu device }; diff --git a/src/plugins/intel_gpu/src/plugin/device_config.cpp b/src/plugins/intel_gpu/src/plugin/device_config.cpp index 550b80e6553..d70f2480f85 100644 --- a/src/plugins/intel_gpu/src/plugin/device_config.cpp +++ b/src/plugins/intel_gpu/src/plugin/device_config.cpp @@ -61,7 +61,7 @@ static int getNumberOfCores(const IStreamsExecutor::Config::PreferredCoreType co } IE_SUPPRESS_DEPRECATED_START -void Config::UpdateFromMap(const std::map& configMap) { +void Config::UpdateFromMap(const std::map& configMap, const cldnn::device_info& info) { OV_ITT_SCOPED_TASK(itt::domains::intel_gpu_plugin, "Config::UpdateFromMap"); for (auto& kvp : configMap) { std::string key = kvp.first; @@ -250,7 +250,7 @@ void Config::UpdateFromMap(const std::map& configMap) } else if (key.compare(PluginConfigParams::KEY_GPU_THROUGHPUT_STREAMS) == 0 || key == ov::num_streams) { if (val.compare(PluginConfigParams::GPU_THROUGHPUT_AUTO) == 0 || val.compare(ov::util::to_string(ov::streams::AUTO)) == 0) { - throughput_streams = GetDefaultNStreamsForThroughputMode(); + throughput_streams = std::max(GetDefaultNStreamsForThroughputMode(), info.num_ccs); } else { int val_i; try { diff --git a/src/plugins/intel_gpu/src/plugin/plugin.cpp b/src/plugins/intel_gpu/src/plugin/plugin.cpp index c432b09cf66..87cf5736080 100644 --- a/src/plugins/intel_gpu/src/plugin/plugin.cpp +++ b/src/plugins/intel_gpu/src/plugin/plugin.cpp @@ -196,7 +196,7 @@ void Plugin::UpdateConfig(Config& conf, const InferenceEngine::CNNNetwork &netwo OV_ITT_SCOPED_TASK(itt::domains::intel_gpu_plugin, "Plugin::UpdateConfig"); auto device_info = GetDeviceInfo(params); conf.enableInt8 = device_info.supports_imad || device_info.supports_immad; - conf.UpdateFromMap(params); + conf.UpdateFromMap(params, device_info); if (conf.enableDynamicBatch) { conf.max_dynamic_batch = static_cast(network.getBatchSize()); } @@ -357,17 +357,27 @@ void Plugin::SetConfig(const std::map &config) { config.find(CLDNNConfigParams::KEY_CLDNN_PLUGIN_THROTTLE) != config.end() || config.find(ov::intel_gpu::hint::queue_throttle.name()) != config.end(); std::string device_id; + cldnn::device_info device_info = device_map.begin()->second->get_info(); if (config.find(PluginConfigInternalParams::KEY_CONFIG_DEVICE_ID) != config.end()) { device_id = config.at(PluginConfigInternalParams::KEY_CONFIG_DEVICE_ID); - _impl->m_configs.GetConfig(device_id).UpdateFromMap(config); + if (!device_id.empty() && device_map.find(device_id) != device_map.end()) { + device_info = device_map.at(device_id)->get_info(); + } + _impl->m_configs.GetConfig(device_id).UpdateFromMap(config, device_info); } else { device_id = GetDeviceIDFromConfig(config); if (!device_id.empty()) { + if (device_map.find(device_id) != device_map.end()) { + device_info = device_map.at(device_id)->get_info(); + } _impl->m_configs.SetDefaultDeviceID(device_id); - _impl->m_configs.GetConfig(device_id).UpdateFromMap(config); + _impl->m_configs.GetConfig(device_id).UpdateFromMap(config, device_info); } else { for (auto& conf : _impl->m_configs) { - conf.second.UpdateFromMap(config); + if (device_map.find(conf.first) != device_map.end()) { + device_info = device_map.at(conf.first)->get_info(); + } + conf.second.UpdateFromMap(config, device_info); } } } @@ -835,7 +845,7 @@ Parameter Plugin::GetMetric(const std::string& name, const std::map qfprops = device.getInfo(); + for (cl_uint q = 0; q < qfprops.size(); q++) { + if (qfprops[q].capabilities == CL_QUEUE_DEFAULT_CAPABILITIES_INTEL && qfprops[q].count > num_queues) { + num_queues = qfprops[q].count; + } + } + info.num_ccs = std::max(num_queues, info.num_ccs); + } + return info; }