diff --git a/src/inference/dev_api/openvino/runtime/threading/istreams_executor.hpp b/src/inference/dev_api/openvino/runtime/threading/istreams_executor.hpp index 701a242a4e5f50..6fc8f8fdc1fdd6 100644 --- a/src/inference/dev_api/openvino/runtime/threading/istreams_executor.hpp +++ b/src/inference/dev_api/openvino/runtime/threading/istreams_executor.hpp @@ -222,7 +222,8 @@ class OPENVINO_RUNTIME_API IStreamsExecutor : virtual public ITaskExecutor { bool operator==(const Config& config) { if (_name == config._name && _streams == config._streams && _threads_per_stream == config._threads_per_stream && - _thread_preferred_core_type == config._thread_preferred_core_type) { + _thread_preferred_core_type == config._thread_preferred_core_type && + _rank == config._rank) { return true; } else { return false; diff --git a/src/inference/include/openvino/runtime/intel_cpu/properties.hpp b/src/inference/include/openvino/runtime/intel_cpu/properties.hpp index 9d63a0e078bdef..60166f157ead87 100644 --- a/src/inference/include/openvino/runtime/intel_cpu/properties.hpp +++ b/src/inference/include/openvino/runtime/intel_cpu/properties.hpp @@ -63,5 +63,17 @@ static constexpr Property denormals_optimization{"CPU_DENORMALS_OPTIMIZATI */ static constexpr Property sparse_weights_decompression_rate{"CPU_SPARSE_WEIGHTS_DECOMPRESSION_RATE"}; +/** + * @brief This property used to enable some property in functional tests. For example: testing accurcay of setting + model_distribution_policy to TENSOR_PARALLEL. + * @ingroup ov_runtime_cpu_prop_cpp_api + * + * @code + * core.set_property(ov::is_test(true)); + * core.set_property(ov::is_test(false)); + * @endcode + */ +static constexpr Property is_test{"IS_TEST"}; + } // namespace intel_cpu } // namespace ov diff --git a/src/plugins/intel_cpu/src/compiled_model.cpp b/src/plugins/intel_cpu/src/compiled_model.cpp index eaf4c1c2512803..a3cba40ba2ef99 100644 --- a/src/plugins/intel_cpu/src/compiled_model.cpp +++ b/src/plugins/intel_cpu/src/compiled_model.cpp @@ -281,6 +281,7 @@ ov::Any CompiledModel::get_property(const std::string& name) const { RO_property(ov::intel_cpu::denormals_optimization.name()), RO_property(ov::log::level.name()), RO_property(ov::intel_cpu::sparse_weights_decompression_rate.name()), + RO_property(ov::intel_cpu::is_test.name()), RO_property(ov::hint::dynamic_quantization_group_size.name()), RO_property(ov::hint::kv_cache_precision.name()), RO_property(ov::key_cache_precision.name()), @@ -361,6 +362,10 @@ ov::Any CompiledModel::get_property(const std::string& name) const { return static_cast( config.fcSparseWeiDecompressionRate); } + if (name == ov::intel_cpu::is_test) { + const auto& is_test = config.isTest; + return is_test; + } if (name == ov::hint::dynamic_quantization_group_size) { return static_cast( config.fcDynamicQuantizationGroupSize); diff --git a/src/plugins/intel_cpu/src/config.cpp b/src/plugins/intel_cpu/src/config.cpp index 71bd72d6a62363..aeb5929cc0d2c1 100644 --- a/src/plugins/intel_cpu/src/config.cpp +++ b/src/plugins/intel_cpu/src/config.cpp @@ -398,6 +398,16 @@ void Config::readProperties(const ov::AnyMap& prop, const ModelType modelType) { ov::intel_cpu::key_cache_quant_mode.name(), ". Expected only unsinged integer numbers"); } + } else if (key == ov::intel_cpu::is_test.name()) { + try { + isTest = val.as(); + } catch (ov::Exception&) { + OPENVINO_THROW("Wrong value ", + val.as(), + "for property key ", + ov::intel_cpu::is_test.name(), + ". Expected only true/false."); + } } else if (key == ov::cache_encryption_callbacks.name()) { try { const auto& encryption_callbacks = val.as(); diff --git a/src/plugins/intel_cpu/src/config.h b/src/plugins/intel_cpu/src/config.h index a21fb9dfff0ebf..de165e654ab1fc 100644 --- a/src/plugins/intel_cpu/src/config.h +++ b/src/plugins/intel_cpu/src/config.h @@ -91,6 +91,7 @@ struct Config { bool enableCpuReservation = false; ov::hint::SchedulingCoreType schedulingCoreType = ov::hint::SchedulingCoreType::ANY_CORE; std::set modelDistributionPolicy = {}; + bool isTest = false; int streamsRankLevel = 1; int numSubStreams = 0; bool enableNodeSplit = false; diff --git a/src/plugins/intel_cpu/src/cpu_streams_calculation.cpp b/src/plugins/intel_cpu/src/cpu_streams_calculation.cpp index e37b995816d70d..6ad88fd7c27147 100644 --- a/src/plugins/intel_cpu/src/cpu_streams_calculation.cpp +++ b/src/plugins/intel_cpu/src/cpu_streams_calculation.cpp @@ -48,6 +48,7 @@ std::vector> get_streams_info_table( const int input_threads, const int input_infer_requests, const int model_prefer_threads, + const bool is_test, const std::string& input_perf_hint, const std::set& hint_model_distribution_policy, const std::vector>& proc_type_table) { @@ -502,6 +503,16 @@ std::vector> get_streams_info_table( stream_table_size = streams_info_table.size(); } } + + if ((total_streams == 1) && (proc_type_table.size() == 1) && is_test && + (hint_model_distribution_policy.find(ov::hint::ModelDistributionPolicy::TENSOR_PARALLEL) != + hint_model_distribution_policy.end())) { + streams_info_table.push_back(streams_info_table[0]); + streams_info_table.push_back(streams_info_table[0]); + streams_info_table[0][THREADS_PER_STREAM] = streams_info_table[0][THREADS_PER_STREAM] * 2; + streams_info_table[1][NUMBER_OF_STREAMS] = -1; + streams_info_table[2][NUMBER_OF_STREAMS] = -1; + } } } else if (proc_type_table.size() == 1) { if (stream_info[PROC_TYPE] == ALL_PROC) { @@ -719,6 +730,7 @@ std::vector> generate_stream_info(const int streams, config.threads, config.hintNumRequests, model_prefer_threads, + config.isTest, ov::util::to_string(config.hintPerfMode), config.modelDistributionPolicy, proc_type_table); diff --git a/src/plugins/intel_cpu/src/cpu_streams_calculation.hpp b/src/plugins/intel_cpu/src/cpu_streams_calculation.hpp index 87b073230242a3..2de1856ff4a737 100644 --- a/src/plugins/intel_cpu/src/cpu_streams_calculation.hpp +++ b/src/plugins/intel_cpu/src/cpu_streams_calculation.hpp @@ -34,6 +34,8 @@ namespace ov::intel_cpu { * function. * - input "0" indicates that the function generates the optimal number of threads per stream based on * processors type information. + * @param[in] is_test is test flag mainly used with hint_llm_distribution_policy to test data accurcy of + * TENSOR_PARALLEL * @param[in] input_perf_hint is performance hint set by user via ov::hint::performance_mode or the default value. * @param[in] hint_llm_distribution_policy is the distribution policy for Large language models * @param[in] proc_type_table is currently available candidate processors. @@ -47,6 +49,7 @@ std::vector> get_streams_info_table( const int input_threads, const int input_infer_requests, const int model_prefer_threads, + const bool is_test, const std::string& input_perf_hint, const std::set& hint_llm_distribution_policy, const std::vector>& proc_type_table); diff --git a/src/plugins/intel_cpu/src/infer_request.cpp b/src/plugins/intel_cpu/src/infer_request.cpp index a6851eb5632893..8ffce5f1ee83ad 100644 --- a/src/plugins/intel_cpu/src/infer_request.cpp +++ b/src/plugins/intel_cpu/src/infer_request.cpp @@ -621,8 +621,8 @@ void SyncInferRequest::sub_streams_infer() { if (!requests.empty()) { for (const auto& output : outputs) { - auto tensor = requests[0]->get_tensor(output); - set_tensor(output, tensor); + auto tensor = get_tensor(output); + requests[0]->set_tensor(output, tensor); } for (size_t i = 0; i < requests_num; i++) { for (auto& input : inputs) { diff --git a/src/plugins/intel_cpu/src/plugin.cpp b/src/plugins/intel_cpu/src/plugin.cpp index 2a6ece0c8841aa..23660c09793fe2 100644 --- a/src/plugins/intel_cpu/src/plugin.cpp +++ b/src/plugins/intel_cpu/src/plugin.cpp @@ -445,6 +445,7 @@ ov::Any Plugin::get_ro_property(const std::string& name, [[maybe_unused]] const RW_property(ov::intel_cpu::denormals_optimization.name()), RW_property(ov::log::level.name()), RW_property(ov::intel_cpu::sparse_weights_decompression_rate.name()), + RW_property(ov::intel_cpu::is_test.name()), RW_property(ov::hint::dynamic_quantization_group_size.name()), RW_property(ov::hint::kv_cache_precision.name()), RW_property(ov::key_cache_precision.name()), @@ -511,6 +512,8 @@ ov::Any Plugin::get_ro_property(const std::string& name, [[maybe_unused]] const } else if (name == ov::intel_cpu::sparse_weights_decompression_rate) { return static_cast( engConfig.fcSparseWeiDecompressionRate); + } else if (name == ov::intel_cpu::is_test) { + return static_cast(engConfig.isTest); } else if (name == ov::execution_devices) { return decltype(ov::execution_devices)::value_type{get_device_name()}; } else if (name == ov::device::type) { diff --git a/src/plugins/intel_cpu/tests/functional/custom/behavior/ov_executable_network/properties.cpp b/src/plugins/intel_cpu/tests/functional/custom/behavior/ov_executable_network/properties.cpp index c0ae5cbe35b6ba..364e0b6e527f1a 100644 --- a/src/plugins/intel_cpu/tests/functional/custom/behavior/ov_executable_network/properties.cpp +++ b/src/plugins/intel_cpu/tests/functional/custom/behavior/ov_executable_network/properties.cpp @@ -6,6 +6,8 @@ #include +#include "common_test_utils/ov_tensor_utils.hpp" +#include "common_test_utils/subgraph_builders/matmul_bias.hpp" #include "openvino/runtime/compiled_model.hpp" #include "openvino/runtime/core.hpp" #include "openvino/runtime/intel_cpu/properties.hpp" @@ -44,6 +46,7 @@ TEST_F(OVClassConfigTestCPU, smoke_CpuExecNetworkSupportedPropertiesAreAvailable RO_property(ov::intel_cpu::denormals_optimization.name()), RO_property(ov::log::level.name()), RO_property(ov::intel_cpu::sparse_weights_decompression_rate.name()), + RO_property(ov::intel_cpu::is_test.name()), RO_property(ov::hint::dynamic_quantization_group_size.name()), RO_property(ov::hint::kv_cache_precision.name()), RO_property(ov::key_cache_precision.name()), @@ -518,4 +521,68 @@ TEST_F(OVClassConfigTestCPU, smoke_CpuExecNetworkCheckCPURuntimOptionsWithCorePr ASSERT_EQ(valueCacheType.as(), ov::element::bf16); } +TEST_F(OVClassConfigTestCPU, smoke_CpuModelDistributionPolicyTensorParallel) { + ov::Core core; + std::shared_ptr model = ov::test::utils::make_matmul_bias(); + std::set setModels = {ov::hint::ModelDistributionPolicy::TENSOR_PARALLEL}; + ov::AnyMap config = {{ov::hint::model_distribution_policy.name(), setModels}, + {ov::intel_cpu::is_test.name(), true}, + {ov::num_streams.name(), 1}, + {ov::inference_num_threads.name(), 1}}; + + core.set_property(deviceName, config); + ov::CompiledModel compiledModel = core.compile_model(model, deviceName); + + std::set model_distribution_policy_value = {}; + bool is_test = false; + OV_ASSERT_NO_THROW(model_distribution_policy_value = compiledModel.get_property(ov::hint::model_distribution_policy)); + OV_ASSERT_NO_THROW(is_test = compiledModel.get_property(ov::intel_cpu::is_test)); + ASSERT_EQ(model_distribution_policy_value, setModels); + ASSERT_EQ(is_test, true); +} + +TEST_F(OVClassConfigTestCPU, smoke_CpuModelDistributionPolicyTensorParallelAccurcay) { + ov::Core core; + std::shared_ptr model = ov::test::utils::make_matmul_bias(); + std::set setModels = {ov::hint::ModelDistributionPolicy::TENSOR_PARALLEL}; + ov::AnyMap config_model = {{ov::hint::model_distribution_policy.name(), setModels}, + {ov::intel_cpu::is_test.name(), true}, + {ov::num_streams.name(), 1}, + {ov::inference_num_threads.name(), 1}}; + + core.set_property(deviceName, config_model); + + std::map, ov::Tensor> inputs; + for (const auto& input : model->inputs()) { + auto tensor = ov::test::utils::create_and_fill_tensor_normal_distribution(input.get_element_type(), + input.get_shape(), + 0.0f, + 0.2f, + 7235346); + inputs.insert({input, tensor}); + } + + auto getOutputBlob = [&](ov::Core& core) { + auto compiled_model = core.compile_model(model, deviceName); + auto req = compiled_model.create_infer_request(); + for (const auto& input : inputs) { + req.set_tensor(input.first, input.second); + } + auto output_tensor = ov::Tensor(model->output().get_element_type(), model->output().get_shape()); + req.set_output_tensor(output_tensor); + req.infer(); + return output_tensor; + }; + + auto outputActual = getOutputBlob(core); + + { + ov::Core coreRef; + ov::AnyMap config = {{ov::num_streams.name(), 1}, {ov::inference_num_threads.name(), 1}}; + coreRef.set_property(deviceName, config); + auto outputRef = getOutputBlob(coreRef); + ov::test::utils::compare(outputActual, outputRef); + } +} + } // namespace diff --git a/src/plugins/intel_cpu/tests/functional/custom/behavior/ov_plugin/properties.cpp b/src/plugins/intel_cpu/tests/functional/custom/behavior/ov_plugin/properties.cpp index 3a5568b616ac3d..486e9ad53e2ae1 100644 --- a/src/plugins/intel_cpu/tests/functional/custom/behavior/ov_plugin/properties.cpp +++ b/src/plugins/intel_cpu/tests/functional/custom/behavior/ov_plugin/properties.cpp @@ -54,6 +54,7 @@ TEST_F(OVClassConfigTestCPU, smoke_PluginAllSupportedPropertiesAreAvailable) { RW_property(ov::intel_cpu::denormals_optimization.name()), RW_property(ov::log::level.name()), RW_property(ov::intel_cpu::sparse_weights_decompression_rate.name()), + RW_property(ov::intel_cpu::is_test.name()), RW_property(ov::hint::dynamic_quantization_group_size.name()), RW_property(ov::hint::kv_cache_precision.name()), RW_property(ov::key_cache_precision.name()), diff --git a/src/plugins/intel_cpu/tests/functional/shared_tests_instances/single_layer_tests/mat_mul.cpp b/src/plugins/intel_cpu/tests/functional/shared_tests_instances/single_layer_tests/mat_mul.cpp index 9d2410242b96e3..f424c7a02c77c0 100644 --- a/src/plugins/intel_cpu/tests/functional/shared_tests_instances/single_layer_tests/mat_mul.cpp +++ b/src/plugins/intel_cpu/tests/functional/shared_tests_instances/single_layer_tests/mat_mul.cpp @@ -99,5 +99,53 @@ INSTANTIATE_TEST_SUITE_P(smoke_MatMul_BothTranspose, MatMulLayerTest, ::testing::Values(additional_config)), MatMulLayerTest::getTestCaseName); +std::map model_distribution_config = { + {ov::hint::model_distribution_policy.name(), "TENSOR_PARALLEL"}, + {ov::intel_cpu::is_test.name(), "true"}, + {ov::num_streams.name(), "1"}, + {ov::inference_num_threads.name(), "1"}}; + +INSTANTIATE_TEST_SUITE_P(smoke_Model_Distribution_MatMul_NoTranspose, MatMulLayerTest, + ::testing::Combine( + ::testing::ValuesIn(ov::test::static_shapes_to_test_representation(input_shapes_no_transpose_static)), + ::testing::Values(std::make_pair(false, false)), + ::testing::ValuesIn(model_types), + ::testing::ValuesIn(secondary_input_types), + ::testing::Values(ov::test::utils::DEVICE_CPU), + ::testing::Values(model_distribution_config)), + MatMulLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_Model_Distribution_MatMul_FirstTranspose, MatMulLayerTest, + ::testing::Combine( + ::testing::ValuesIn(ov::test::static_shapes_to_test_representation(input_shapes_first_transpose_static)), + ::testing::Values(std::make_pair(true, false)), + ::testing::ValuesIn(model_types), + ::testing::ValuesIn(secondary_input_types), + ::testing::Values(ov::test::utils::DEVICE_CPU), + ::testing::Values(model_distribution_config)), + MatMulLayerTest::getTestCaseName); + + +INSTANTIATE_TEST_SUITE_P(smoke_Model_Distribution_MatMul_SecondTranspose, MatMulLayerTest, + ::testing::Combine( + ::testing::ValuesIn(ov::test::static_shapes_to_test_representation(input_shapes_second_transpose_static)), + ::testing::Values(std::make_pair(false, true)), + ::testing::ValuesIn(model_types), + ::testing::ValuesIn(secondary_input_types), + ::testing::Values(ov::test::utils::DEVICE_CPU), + ::testing::Values(model_distribution_config)), + MatMulLayerTest::getTestCaseName); + + +INSTANTIATE_TEST_SUITE_P(smoke_Model_Distribution_MatMul_BothTranspose, MatMulLayerTest, + ::testing::Combine( + ::testing::ValuesIn(ov::test::static_shapes_to_test_representation(input_shapes_both_transpose_static)), + ::testing::Values(std::make_pair(true, true)), + ::testing::ValuesIn(model_types), + ::testing::ValuesIn(secondary_input_types), + ::testing::Values(ov::test::utils::DEVICE_CPU), + ::testing::Values(model_distribution_config)), + MatMulLayerTest::getTestCaseName); + } // namespace diff --git a/src/plugins/intel_cpu/tests/functional/shared_tests_instances/subgraph_tests/shared_matmul_weights_decompression.cpp b/src/plugins/intel_cpu/tests/functional/shared_tests_instances/subgraph_tests/shared_matmul_weights_decompression.cpp index 3aeaa2808e5f3a..ad40cd75df763b 100644 --- a/src/plugins/intel_cpu/tests/functional/shared_tests_instances/subgraph_tests/shared_matmul_weights_decompression.cpp +++ b/src/plugins/intel_cpu/tests/functional/shared_tests_instances/subgraph_tests/shared_matmul_weights_decompression.cpp @@ -22,6 +22,7 @@ const std::vector decompression_precisions = {ov::element::f16, ov: const std::vector weights_precisions = {ov::element::u8, ov::element::u4}; const std::vector transpose_weights = {true, false}; +std::map additional_config = {}; INSTANTIATE_TEST_SUITE_P(smoke_MatMulSharedCompressedWeights, SharedMatmulWeightsDecompression, ::testing::Combine(::testing::Values(utils::DEVICE_CPU), @@ -30,7 +31,25 @@ INSTANTIATE_TEST_SUITE_P(smoke_MatMulSharedCompressedWeights, ::testing::ValuesIn(decompression_precisions), ::testing::ValuesIn(transpose_weights), ::testing::Values(DecompressionType::full), - ::testing::Values(true)), + ::testing::Values(true), + ::testing::Values(additional_config)), + SharedMatmulWeightsDecompression::getTestCaseName); + +std::map model_distribution_config = { + {ov::hint::model_distribution_policy.name(), "TENSOR_PARALLEL"}, + {ov::intel_cpu::is_test.name(), "true"}, + {ov::num_streams.name(), "1"}, + {ov::inference_num_threads.name(), "1"}}; +INSTANTIATE_TEST_SUITE_P(smoke_Model_Distribution_MatMulSharedCompressedWeights, + SharedMatmulWeightsDecompression, + ::testing::Combine(::testing::Values(utils::DEVICE_CPU), + ::testing::ValuesIn(input_shapes), + ::testing::ValuesIn(weights_precisions), + ::testing::ValuesIn(decompression_precisions), + ::testing::Values(true), + ::testing::Values(DecompressionType::full), + ::testing::Values(true), + ::testing::Values(model_distribution_config)), SharedMatmulWeightsDecompression::getTestCaseName); } // namespace diff --git a/src/plugins/intel_cpu/tests/unit/streams_info/streams_info_table_test.cpp b/src/plugins/intel_cpu/tests/unit/streams_info/streams_info_table_test.cpp index 9a6cb5988114a7..5960bf87ac17c8 100644 --- a/src/plugins/intel_cpu/tests/unit/streams_info/streams_info_table_test.cpp +++ b/src/plugins/intel_cpu/tests/unit/streams_info/streams_info_table_test.cpp @@ -38,6 +38,7 @@ class StreamsCalculationTests : public ov::test::TestsCommon, test_data.input_threads, test_data.input_infer_requests, test_data.model_prefer_threads, + true, test_data.input_perf_hint, test_data.hint_llm_distribution_policy, test_data.proc_type_table); @@ -2779,6 +2780,32 @@ StreamsCalculationTestCase _2sockets_mock_latency_51 = { {{16, 16, 0, 0, 0, -1, -1}, {8, 8, 0, 0, 0, 0, 0}, {8, 8, 0, 0, 0, 1, 1}}, {{1, ALL_PROC, 16, -1, -1}, {0, MAIN_CORE_PROC, 8, 0, 0}, {0, MAIN_CORE_PROC, 8, 1, 1}}, }; +StreamsCalculationTestCase _1sockets_mock_TP_1 = { + 1, + false, + 0, + 0, + 0, + "LATENCY", + {ov::hint::ModelDistributionPolicy::TENSOR_PARALLEL}, + {{8, 8, 0, 0, 0, 0, 0}}, + {{1, MAIN_CORE_PROC, 16, 0, 0}, + {-1, MAIN_CORE_PROC, 8, 0, 0}, + {-1, MAIN_CORE_PROC, 8, 0, 0}}, +}; +StreamsCalculationTestCase _1sockets_mock_TP_2 = { + 1, + false, + 1, + 0, + 0, + "LATENCY", + {ov::hint::ModelDistributionPolicy::TENSOR_PARALLEL}, + {{8, 8, 0, 0, 0, 0, 0}}, + {{1, MAIN_CORE_PROC, 2, 0, 0}, + {-1, MAIN_CORE_PROC, 1, 0, 0}, + {-1, MAIN_CORE_PROC, 1, 0, 0}}, +}; TEST_P(StreamsCalculationTests, StreamsCalculation) {} @@ -2986,6 +3013,8 @@ INSTANTIATE_TEST_SUITE_P(StreamsInfoTable, _1sockets_mock_latency_6, _1sockets_mock_latency_7, _1sockets_mock_latency_8, - _1sockets_mock_latency_9)); + _1sockets_mock_latency_9, + _1sockets_mock_TP_1, + _1sockets_mock_TP_2)); } // namespace diff --git a/src/plugins/intel_gpu/tests/functional/shared_tests_instances/subgraph_tests/shared_matmul_weights_decompression.cpp b/src/plugins/intel_gpu/tests/functional/shared_tests_instances/subgraph_tests/shared_matmul_weights_decompression.cpp index 233cac04ecd16a..7e7846c36b8dce 100644 --- a/src/plugins/intel_gpu/tests/functional/shared_tests_instances/subgraph_tests/shared_matmul_weights_decompression.cpp +++ b/src/plugins/intel_gpu/tests/functional/shared_tests_instances/subgraph_tests/shared_matmul_weights_decompression.cpp @@ -34,6 +34,7 @@ const std::vector decompression_precisions = {ov::element::f16, ov: const std::vector weights_precisions = {ov::element::u8, ov::element::u4}; const std::vector transpose_weights = {true, false}; +std::map additional_config = {}; INSTANTIATE_TEST_SUITE_P(smoke_MatMulSharedCompressedWeights, SharedMatmulWeightsDecompression, ::testing::Combine(::testing::Values(utils::DEVICE_GPU), @@ -42,7 +43,8 @@ INSTANTIATE_TEST_SUITE_P(smoke_MatMulSharedCompressedWeights, ::testing::ValuesIn(decompression_precisions), ::testing::ValuesIn(transpose_weights), ::testing::Values(DecompressionType::full), - ::testing::Values(true)), + ::testing::Values(true), + ::testing::Values(additional_config)), SharedMatmulWeightsDecompression::getTestCaseName); } // namespace diff --git a/src/tests/functional/shared_test_classes/include/shared_test_classes/single_op/mat_mul.hpp b/src/tests/functional/shared_test_classes/include/shared_test_classes/single_op/mat_mul.hpp index 74149ef73330ae..ed992d182ae180 100644 --- a/src/tests/functional/shared_test_classes/include/shared_test_classes/single_op/mat_mul.hpp +++ b/src/tests/functional/shared_test_classes/include/shared_test_classes/single_op/mat_mul.hpp @@ -10,6 +10,7 @@ #include "shared_test_classes/base/ov_subgraph.hpp" #include "common_test_utils/test_enums.hpp" +#include "openvino/runtime/intel_cpu/properties.hpp" namespace ov { namespace test { diff --git a/src/tests/functional/shared_test_classes/include/shared_test_classes/subgraph/shared_matmul_weights_decompression.hpp b/src/tests/functional/shared_test_classes/include/shared_test_classes/subgraph/shared_matmul_weights_decompression.hpp index f7168281006118..7e8b6bf0d31fbe 100644 --- a/src/tests/functional/shared_test_classes/include/shared_test_classes/subgraph/shared_matmul_weights_decompression.hpp +++ b/src/tests/functional/shared_test_classes/include/shared_test_classes/subgraph/shared_matmul_weights_decompression.hpp @@ -6,6 +6,7 @@ #include "shared_test_classes/base/ov_subgraph.hpp" #include "shared_test_classes/subgraph/weights_decompression_builders.hpp" +#include "openvino/runtime/intel_cpu/properties.hpp" namespace ov { namespace test { @@ -32,13 +33,15 @@ namespace test { * Matmul Matmul */ -using MatmulSharedWeightsDecompressionParams = std::tuple; // use matmul decompression implementation +using MatmulSharedWeightsDecompressionParams = + std::tuple>; // additional configeration class SharedMatmulWeightsDecompression : public testing::WithParamInterface, virtual public SubgraphBaseTest { diff --git a/src/tests/functional/shared_test_classes/src/subgraph/shared_matmul_weights_decompression.cpp b/src/tests/functional/shared_test_classes/src/subgraph/shared_matmul_weights_decompression.cpp index 3e0dcdcd7b7676..7f529475a15331 100644 --- a/src/tests/functional/shared_test_classes/src/subgraph/shared_matmul_weights_decompression.cpp +++ b/src/tests/functional/shared_test_classes/src/subgraph/shared_matmul_weights_decompression.cpp @@ -21,6 +21,7 @@ std::string SharedMatmulWeightsDecompression::getTestCaseName(testing::TestParam bool transpose; DecompressionType decompression_subtract_type; bool use_decompression_impl; + std::map additional_config; std::tie(target_device, shape_params, @@ -28,7 +29,8 @@ std::string SharedMatmulWeightsDecompression::getTestCaseName(testing::TestParam decompression_precision, transpose, decompression_subtract_type, - use_decompression_impl) = obj.param; + use_decompression_impl, + additional_config) = obj.param; std::ostringstream result; result << "device=" << target_device << "_"; @@ -37,7 +39,12 @@ std::string SharedMatmulWeightsDecompression::getTestCaseName(testing::TestParam result << "decompression_precision=" << decompression_precision << "_"; result << "transpose_weights=" << transpose << "_"; result << "decompression_subtract=" << decompression_subtract_type << "_"; - result << "use_decompression_impl=" << use_decompression_impl; + result << "use_decompression_impl=" << use_decompression_impl << "_"; + result << "config=("; + for (const auto& configEntry : additional_config) { + result << configEntry.first << ", " << configEntry.second << ";"; + } + result << ")"; return result.str(); } @@ -91,6 +98,7 @@ void SharedMatmulWeightsDecompression::SetUp() { bool transpose_weights; DecompressionType decompression_subtract_type; bool use_decompression_impl; + std::map additional_config; std::tie(targetDevice, shape_params, @@ -98,8 +106,10 @@ void SharedMatmulWeightsDecompression::SetUp() { decompression_precision, transpose_weights, decompression_subtract_type, - use_decompression_impl) = GetParam(); + use_decompression_impl, + additional_config) = GetParam(); init_input_shapes({shape_params.data_shape, shape_params.data_shape}); + configuration.insert(additional_config.begin(), additional_config.end()); ElementType netType = ov::element::f32; inType = outType = netType;