From d6f7e5e84d2f2608d2314f73c5ec43d8467e0ae8 Mon Sep 17 00:00:00 2001 From: Marcin Kusmierski Date: Fri, 14 Apr 2023 11:25:10 +0200 Subject: [PATCH] [GNA] Fix UT for adding extra segments to PWL-s after convolution (#16732) --- .../intel_gna/tests/unit/CMakeLists.txt | 2 +- .../unit/gna_extra_pwl_segments_tests.cpp | 125 +++++++++++------- 2 files changed, 79 insertions(+), 48 deletions(-) diff --git a/src/plugins/intel_gna/tests/unit/CMakeLists.txt b/src/plugins/intel_gna/tests/unit/CMakeLists.txt index 79d82533fd9..1d95ce2928a 100644 --- a/src/plugins/intel_gna/tests/unit/CMakeLists.txt +++ b/src/plugins/intel_gna/tests/unit/CMakeLists.txt @@ -14,7 +14,7 @@ endif() # TODO: fix CVS-71010 and remove BUILD_SHARED_LIBS if(NOT BUILD_SHARED_LIBS) - set(exclude_path EXCLUDED_SOURCE_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/(gna_api_stub|gna_wait_test|gna_export_import_test|gna_infer_request_test|gna_plugin_load_network_test|gna_mock_api_initializer).cpp") + set(exclude_path EXCLUDED_SOURCE_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/(gna_api_stub|gna_wait_test|gna_export_import_test|gna_infer_request_test|gna_plugin_load_network_test|gna_mock_api_initializer|gna_extra_pwl_segments_tests).cpp") endif() addIeTargetTest( diff --git a/src/plugins/intel_gna/tests/unit/gna_extra_pwl_segments_tests.cpp b/src/plugins/intel_gna/tests/unit/gna_extra_pwl_segments_tests.cpp index 144144a598f..85d447a2105 100644 --- a/src/plugins/intel_gna/tests/unit/gna_extra_pwl_segments_tests.cpp +++ b/src/plugins/intel_gna/tests/unit/gna_extra_pwl_segments_tests.cpp @@ -5,7 +5,9 @@ #include #include "any_copy.hpp" +#include "common/gna_target.hpp" #include "gna_infer_request.hpp" +#include "gna_mock_api.hpp" #include "gna_plugin.hpp" #include "ngraph_functions/builders.hpp" @@ -30,6 +32,7 @@ struct PWLExtraSegmentsParamsWithConv { ngraph::helpers::ActivationTypes activation_type; size_t expected_segments_num; bool use_pooling; + std::map config; }; const std::unordered_map kNGraphActivationMapForTests{ @@ -93,7 +96,7 @@ public: void SetUp() override; protected: - InferenceEngine::CNNNetwork cnn_network_; + InferenceEngine::CNNNetwork m_cnn_network; }; std::string GNAPWLExtraSegmentsTestFixture::getTestCaseName( @@ -103,10 +106,14 @@ std::string GNAPWLExtraSegmentsTestFixture::getTestCaseName( result << "ConvolutionType=" << params.conv_params.convolution_type << "_"; result << "ActivationType=" << params.activation_type << "_"; result << "PoolingOn=" << (params.use_pooling ? "yes" : "no"); + for (auto const& config_entry : params.config) { + result << "_config_entry=" << config_entry.first << "_" << config_entry.second; + } return result.str(); } void GNAPWLExtraSegmentsTestFixture::SetUp() { + PWLExtraSegmentsParamsWithConv tests_params; auto params = GetParam(); const auto& conv_params = params.conv_params; const auto& precision = params.precision; @@ -151,9 +158,15 @@ void GNAPWLExtraSegmentsTestFixture::SetUp() { auto function = std::make_shared(ov::ResultVector({result}), ov::ParameterVector({input}), "convolution_with_activation_exrta_segments"); - cnn_network_ = InferenceEngine::CNNNetwork(function); + m_cnn_network = InferenceEngine::CNNNetwork(function); } +const std::map configs_30 = {{"GNA_DEVICE_MODE", "GNA_SW_EXACT"}, + {"GNA_EXEC_TARGET", "GNA_TARGET_3_0"}}; + +const std::map configs_35 = {{"GNA_DEVICE_MODE", "GNA_SW_EXACT"}, + {"GNA_EXEC_TARGET", "GNA_TARGET_3_5"}}; + auto kPrecision32 = ov::element::f32; const ov::Shape kInput1D = {1, 1, 1, 8}; @@ -166,23 +179,23 @@ const std::vector kPadEnd1D = {0, 0}; const ConvolutionParameters kConvolutionParams1D = {kDnnConvolutional1dOp, kInput1D, kKernel1D, kStride1D, kDilation1D, kOutChanneldsNum1D, kPadBegin1D, kPadEnd1D}; -const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithoutPoolParams = {kConvolutionParams1D, - kPrecision32, - ngraph::helpers::ActivationTypes::Relu, - 2, - false}; -const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithPoolParams = {kConvolutionParams1D, - kPrecision32, - ngraph::helpers::ActivationTypes::Relu, - 2, - true}; -const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithoutPoolParams = - {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false}; -const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithPoolParams = {kConvolutionParams1D, - kPrecision32, - ngraph::helpers::ActivationTypes::Sigmoid, - 12, - true}; +const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithoutPoolParams_30 = + {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 2, false, configs_30}; +const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithPoolParams_30 = + {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 2, true, configs_30}; +const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithoutPoolParams_30 = + {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false, configs_30}; +const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithPoolParams_30 = + {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, true, configs_30}; + +const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithoutPoolParams_35 = + {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, false, configs_35}; +const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithPoolParams_35 = + {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, true, configs_35}; +const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithoutPoolParams_35 = + {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false, configs_35}; +const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithPoolParams_35 = + {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, true, configs_35}; const ov::Shape kInput2D = {1, 8, 20, 16}; const ov::Shape kKernel2D = {1, 1}; @@ -194,46 +207,64 @@ const std::vector kPadEnd2D = {0, 0}; const ConvolutionParameters kConvolutionParams2D = {kDnnConvolutional2dOp, kInput2D, kKernel2D, kStride2D, kDilation2D, kOutChanneldsNum2D, kPadBegin2D, kPadEnd2D}; -const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithoutPoolParams = {kConvolutionParams2D, - kPrecision32, - ngraph::helpers::ActivationTypes::Relu, - 4, - false}; -const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithPoolParams = {kConvolutionParams2D, - kPrecision32, - ngraph::helpers::ActivationTypes::Relu, - 4, - true}; -const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithoutPoolParams = - {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false}; -const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithPoolParams = {kConvolutionParams2D, - kPrecision32, - ngraph::helpers::ActivationTypes::Sigmoid, - 12, - true}; +const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithoutPoolParams_30 = + {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, false, configs_30}; +const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithPoolParams_30 = + {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, true, configs_30}; +const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithoutPoolParams_30 = + {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false, configs_30}; +const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithPoolParams_30 = + {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, true, configs_30}; + +const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithoutPoolParams_35 = + {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, false, configs_35}; +const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithPoolParams_35 = + {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, true, configs_35}; +const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithoutPoolParams_35 = + {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false, configs_35}; +const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithPoolParams_35 = + {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, true, configs_35}; INSTANTIATE_TEST_CASE_P(GNAPWLExtraSegmentsConv1DTests, GNAPWLExtraSegmentsTestFixture, - ::testing::Values(kConvolution1DReluWithoutPoolParams, - kConvolution1DReluWithPoolParams, - kConvolution1DSigmoidWithoutPoolParams, - kConvolution1DSigmoidWithPoolParams), + ::testing::Values(kConvolution1DReluWithoutPoolParams_30, + kConvolution1DReluWithPoolParams_30, + kConvolution1DSigmoidWithoutPoolParams_30, + kConvolution1DSigmoidWithPoolParams_30, + kConvolution1DReluWithoutPoolParams_35, + kConvolution1DReluWithPoolParams_35, + kConvolution1DSigmoidWithoutPoolParams_35, + kConvolution1DSigmoidWithPoolParams_35), GNAPWLExtraSegmentsTestFixture::getTestCaseName); INSTANTIATE_TEST_CASE_P(GNAPWLExtraSegmentsConv2DTests, GNAPWLExtraSegmentsTestFixture, - ::testing::Values(kConvolution2DReluWithoutPoolParams, - kConvolution2DReluWithPoolParams, - kConvolution2DSigmoidWithoutPoolParams, - kConvolution2DSigmoidWithPoolParams), + ::testing::Values(kConvolution2DReluWithoutPoolParams_30, + kConvolution2DReluWithPoolParams_30, + kConvolution2DSigmoidWithoutPoolParams_30, + kConvolution2DSigmoidWithPoolParams_30, + kConvolution2DReluWithoutPoolParams_35, + kConvolution2DReluWithPoolParams_35, + kConvolution2DSigmoidWithoutPoolParams_35, + kConvolution2DSigmoidWithPoolParams_35), GNAPWLExtraSegmentsTestFixture::getTestCaseName); TEST_P(GNAPWLExtraSegmentsTestFixture, check_number_of_segments) { auto params = GetParam(); - const ov::AnyMap& gna_config = {ov::intel_gna::execution_mode(ov::intel_gna::ExecutionMode::SW_EXACT)}; - GNAPluginForPWLExtraSegmentsTest plugin(ov::any_copy(gna_config)); + auto target_name = params.config["GNA_EXEC_TARGET"]; + auto target_device = ov::intel_gna::target::StringToDevice(target_name); + auto target_gna = ov::intel_gna::target::DeviceToGna(target_device); - EXPECT_NO_THROW(plugin.LoadNetwork(cnn_network_)); + GNACppApi enableMocks; + EXPECT_CALL(enableMocks, Gna2DeviceGetVersion(testing::_, testing::_)) + .WillOnce(testing::Invoke([=](uint32_t deviceIndex, enum Gna2DeviceVersion* deviceVersion) { + *deviceVersion = target_gna; + return Gna2StatusSuccess; + })); + + GNAPluginForPWLExtraSegmentsTest plugin(params.config); + + EXPECT_NO_THROW(plugin.LoadNetwork(m_cnn_network)); EXPECT_NO_THROW(plugin.Test(params.expected_segments_num)); }