From 70491420800c359ab65ecf71765aad4d912dc423 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Mon, 15 Jun 2020 12:22:59 +0300 Subject: [PATCH] TESTS: Added test for parallel LoadNetwork with accuracy check (#910) --- .../include/behavior/core_threading_tests.hpp | 69 ++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/inference-engine/tests/functional/plugin/shared/include/behavior/core_threading_tests.hpp b/inference-engine/tests/functional/plugin/shared/include/behavior/core_threading_tests.hpp index 0379767355b..063eba8302b 100644 --- a/inference-engine/tests/functional/plugin/shared/include/behavior/core_threading_tests.hpp +++ b/inference-engine/tests/functional/plugin/shared/include/behavior/core_threading_tests.hpp @@ -6,10 +6,14 @@ #include
#include #include +#include +#include +#include #include #include #include +#include #include #include #include @@ -193,7 +197,68 @@ TEST_P(CoreThreadingTestsWithIterations, smoke_LoadNetwork) { ie.SetConfig(config, deviceName); runParallel([&] () { auto value = counter++; - (void)ie.LoadNetwork(networks[(counter++) % networks.size()], deviceName); + (void)ie.LoadNetwork(networks[value % networks.size()], deviceName); + }, numIterations, numThreads); +} + +// tested function: LoadNetwork accuracy +TEST_P(CoreThreadingTestsWithIterations, smoke_LoadNetworkAccuracy) { + InferenceEngine::Core ie; + std::atomic counter{0u}; + + const FuncTestUtils::TestModel::TestModel models[] = { + FuncTestUtils::TestModel::convReluNormPoolFcModelFP32, + FuncTestUtils::TestModel::convReluNormPoolFcModelFP16 + }; + std::vector networks; + for (auto & model : models) { + networks.emplace_back(ie.ReadNetwork(model.model_xml_str, model.weights_blob)); + } + + // TODO: uncomment after fixing *-31414 + // networks.emplace_back(InferenceEngine::CNNNetwork(ngraph::builder::subgraph::make2InputSubtract())); + // networks.emplace_back(InferenceEngine::CNNNetwork(ngraph::builder::subgraph::makeMultiSingleConv())); + // networks.emplace_back(InferenceEngine::CNNNetwork(ngraph::builder::subgraph::makeSingleConv())); + // networks.emplace_back(InferenceEngine::CNNNetwork(ngraph::builder::subgraph::makeSplitConvConcat())); + // networks.emplace_back(InferenceEngine::CNNNetwork(ngraph::builder::subgraph::makeSplitMultiConvConcat())); + + ie.SetConfig(config, deviceName); + runParallel([&] () { + auto value = counter++; + auto network = networks[value % networks.size()]; + + InferenceEngine::BlobMap blobs; + for (const auto & info : network.getInputsInfo()) { + auto input = FuncTestUtils::createAndFillBlobFloatNormalDistribution( + info.second->getTensorDesc(), 0.0f, 0.2f, 7235346); + blobs[info.first] = input; + } + + auto getOutputBlob = [&](InferenceEngine::Core & core) { + auto exec = core.LoadNetwork(network, deviceName); + auto req = exec.CreateInferRequest(); + req.SetInput(blobs); + + auto info = network.getOutputsInfo(); + auto outputInfo = info.begin(); + auto blob = make_blob_with_precision(outputInfo->second->getTensorDesc()); + blob->allocate(); + req.SetBlob(outputInfo->first, blob); + + req.Infer(); + return blob; + }; + + auto outputActual = getOutputBlob(ie); + + // compare actual value using the second Core + { + InferenceEngine::Core ie2; + ie2.SetConfig(config, deviceName); + auto outputRef = getOutputBlob(ie2); + + FuncTestUtils::compareBlobs(outputActual, outputRef); + } }, numIterations, numThreads); } @@ -211,7 +276,7 @@ TEST_P(CoreThreadingTestsWithIterations, smoke_LoadNetwork_MultipleIECores) { auto value = counter++; InferenceEngine::Core ie; ie.SetConfig(config, deviceName); - auto model = models[(counter++) % models.size()]; + auto model = models[value % models.size()]; auto network = ie.ReadNetwork(model.model_xml_str, model.weights_blob); (void)ie.LoadNetwork(network, deviceName); }, numIterations, numThreads);