From 378b3a2dca8820e48f933c2e25269c344c0b9905 Mon Sep 17 00:00:00 2001 From: "Wang, Yang" Date: Fri, 1 Jul 2022 10:49:20 +0800 Subject: [PATCH] Enable default performance hint as tput in AUTO (#11848) * Enable hint to tput if no property is specified for both AUTO device and target device. Signed-off-by: Wang, Yang * 1. Update logic. 2. Add test cases. Signed-off-by: Wang, Yang * Update. Signed-off-by: Wang, Yang * Update. Set hints to default for target device if no hints setting for AUTO plugin and no specific properties setting for target device. Signed-off-by: Wang, Yang --- src/plugins/auto/plugin.cpp | 8 +++++-- .../behavior/ov_plugin/core_integration.cpp | 21 +++++++++++++++++++ .../behavior/ov_plugin/core_integration.hpp | 20 ++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/plugins/auto/plugin.cpp b/src/plugins/auto/plugin.cpp index 0c559ad9503..6af1fd7291a 100644 --- a/src/plugins/auto/plugin.cpp +++ b/src/plugins/auto/plugin.cpp @@ -106,8 +106,12 @@ std::vector MultiDeviceInferencePlugin::ParseMetaDevices(cons if (!deviceIDLocal.empty()) { tconfig[PluginConfigParams::KEY_DEVICE_ID] = deviceIDLocal; } - - return GetCore()->GetSupportedConfig(deviceName, tconfig); + auto deviceConfig = GetCore()->GetSupportedConfig(deviceName, tconfig); + if (deviceConfig.find(PluginConfigParams::KEY_PERFORMANCE_HINT) == deviceConfig.end() && tconfig.find(deviceName) == tconfig.end()) { + // setting tput as the default performance mode if no hints setting for AUTO plugin and no properties specified for target device. + deviceConfig[PluginConfigParams::KEY_PERFORMANCE_HINT] = PluginConfigParams::THROUGHPUT; + } + return deviceConfig; }; auto getDefaultDeviceID = [this](std::string deviceName) -> std::string { diff --git a/src/tests/functional/plugin/cpu/shared_tests_instances/behavior/ov_plugin/core_integration.cpp b/src/tests/functional/plugin/cpu/shared_tests_instances/behavior/ov_plugin/core_integration.cpp index 42d3a0b3d5c..658f37511fe 100644 --- a/src/tests/functional/plugin/cpu/shared_tests_instances/behavior/ov_plugin/core_integration.cpp +++ b/src/tests/functional/plugin/cpu/shared_tests_instances/behavior/ov_plugin/core_integration.cpp @@ -273,4 +273,25 @@ INSTANTIATE_TEST_SUITE_P(smoke_AUTO_OVClassLoadNetworkWithSecondaryPropertiesTes INSTANTIATE_TEST_SUITE_P( smoke_OVClassLoadNetworkTest, OVClassLoadNetworkTest, ::testing::Values("CPU")); + +const std::vector default_properties = {{ov::device::priorities("CPU")}}; +const std::vector auto_default_properties = {{}}; +INSTANTIATE_TEST_SUITE_P(smoke_OVClassLoadNetworkWithDefaultPropertiesTest, + OVClassLoadNetworkWithDefaultPropertiesTest, + ::testing::Combine(::testing::Values(CommonTestUtils::DEVICE_AUTO), + ::testing::ValuesIn(default_properties))); + +INSTANTIATE_TEST_SUITE_P(smoke_AUTO_OVClassLoadNetworkWithDefaultPropertiesTest, + OVClassLoadNetworkWithDefaultPropertiesTest, + ::testing::Combine(::testing::Values("AUTO:CPU"), + ::testing::ValuesIn(auto_default_properties))); + +const std::vector default_incorrect_properties = { + {ov::device::priorities("CPU"), ov::device::properties("CPU", ov::hint::allow_auto_batching(true))}, + }; +const std::vector auto_default_incorrect_properties = {{}}; +INSTANTIATE_TEST_SUITE_P(smoke_OVClassLoadNetworkWithDefaultIncorrectPropertiesTest, + OVClassLoadNetworkWithDefaultIncorrectPropertiesTest, + ::testing::Combine(::testing::Values(CommonTestUtils::DEVICE_AUTO), + ::testing::ValuesIn(default_incorrect_properties))); } // namespace diff --git a/src/tests/functional/plugin/shared/include/behavior/ov_plugin/core_integration.hpp b/src/tests/functional/plugin/shared/include/behavior/ov_plugin/core_integration.hpp index 399ca7337b2..ecbec29d19d 100644 --- a/src/tests/functional/plugin/shared/include/behavior/ov_plugin/core_integration.hpp +++ b/src/tests/functional/plugin/shared/include/behavior/ov_plugin/core_integration.hpp @@ -101,6 +101,8 @@ using OVClassSetLogLevelConfigTest = OVClassBaseTestP; using OVClassSpecificDeviceTestSetConfig = OVClassBaseTestP; using OVClassSpecificDeviceTestGetConfig = OVClassBaseTestP; using OVClassLoadNetworkWithCorrectPropertiesTest = OVClassSetDevicePriorityConfigTest; +using OVClassLoadNetworkWithDefaultPropertiesTest = OVClassSetDevicePriorityConfigTest; +using OVClassLoadNetworkWithDefaultIncorrectPropertiesTest = OVClassSetDevicePriorityConfigTest; class OVClassSeveralDevicesTest : public OVClassNetworkTest, public ::testing::WithParamInterface> { @@ -1026,6 +1028,24 @@ TEST_P(OVClassLoadNetworkWithCorrectPropertiesTest, LoadNetworkWithCorrectProper OV_ASSERT_NO_THROW(ie.compile_model(actualNetwork, deviceName, configuration)); } +TEST_P(OVClassLoadNetworkWithDefaultPropertiesTest, LoadNetworkWithDefaultPropertiesTest) { + ov::Core ie = createCoreWithTemplate(); + ov::CompiledModel model; + OV_ASSERT_NO_THROW(model = ie.compile_model(actualNetwork, deviceName, configuration)); + ov::hint::PerformanceMode value; + OV_ASSERT_NO_THROW(value = model.get_property(ov::hint::performance_mode)); + ASSERT_EQ(value, ov::hint::PerformanceMode::THROUGHPUT); +} + +TEST_P(OVClassLoadNetworkWithDefaultIncorrectPropertiesTest, LoadNetworkWithDefaultIncorrectPropertiesTest) { + ov::Core ie = createCoreWithTemplate(); + ov::CompiledModel model; + OV_ASSERT_NO_THROW(model = ie.compile_model(actualNetwork, deviceName, configuration)); + ov::hint::PerformanceMode value; + OV_ASSERT_NO_THROW(value = model.get_property(ov::hint::performance_mode)); + ASSERT_EQ(value, ov::hint::PerformanceMode::UNDEFINED); +} + TEST_P(OVClassLoadNetworkTest, LoadNetworkWithInvalidDeviceIDThrows) { ov::Core ie = createCoreWithTemplate();