From 79e442eea6b5088b59fa0319966deb7dabff83b4 Mon Sep 17 00:00:00 2001 From: Mateusz Tabaka Date: Tue, 18 Jan 2022 15:43:27 +0100 Subject: [PATCH] [VPU] Convert precisions on input/output blobs (#9115) --- src/inference/src/cnn_network_ngraph_impl.cpp | 3 +- .../myriad_plugin/myriad_infer_request.cpp | 142 +++++++++++++++--- .../single_layer_tests/comparison.cpp | 61 +++++++- .../single_layer_tests/eltwise.cpp | 3 + .../single_layer_tests/gather_elements.cpp | 9 +- .../single_layer_tests/gather_nd.cpp | 4 + .../single_layer_tests/logical.cpp | 37 +++++ .../single_layer_tests/minimum_maximum.cpp | 39 +++++ .../single_layer_tests/nonzero.cpp | 3 + .../single_layer_tests/strided_slice.cpp | 36 +++++ .../myriad/single_layer_tests/gather.cpp | 7 +- .../static_shape_broadcast.cpp | 4 + .../ov_executable_network/exec_graph_info.hpp | 4 +- .../src/single_layer/gather_elements.cpp | 1 + 14 files changed, 319 insertions(+), 34 deletions(-) diff --git a/src/inference/src/cnn_network_ngraph_impl.cpp b/src/inference/src/cnn_network_ngraph_impl.cpp index fdac3b8c8c4..7c7ad094ed4 100644 --- a/src/inference/src/cnn_network_ngraph_impl.cpp +++ b/src/inference/src/cnn_network_ngraph_impl.cpp @@ -118,7 +118,8 @@ ngraph::element::Type details::toLegacyType(const ngraph::element::Type& ngraph_ if (input) { return ngraph_type == ngraph::element::f16 ? ngraph::element::f32 : ngraph_type; } else { - if (ngraph_type == ngraph::element::i64 || ngraph_type == ngraph::element::i32) { + if (ngraph_type == ngraph::element::i64 || ngraph_type == ngraph::element::u64 || + ngraph_type == ngraph::element::i32 || ngraph_type == ngraph::element::u32) { return ngraph::element::i32; } else if (ngraph_type != ngraph::element::f32) { return ngraph::element::f32; diff --git a/src/plugins/intel_vpu/myriad_plugin/myriad_infer_request.cpp b/src/plugins/intel_vpu/myriad_plugin/myriad_infer_request.cpp index 1ffdc0a4fad..dd4f34fed64 100644 --- a/src/plugins/intel_vpu/myriad_plugin/myriad_infer_request.cpp +++ b/src/plugins/intel_vpu/myriad_plugin/myriad_infer_request.cpp @@ -26,8 +26,6 @@ using namespace vpu; using namespace vpu::MyriadPlugin; using namespace InferenceEngine; -#define MEMCPY(dst, src, bytes) std::copy_n((src), (bytes), (dst)) - MyriadInferRequest::MyriadInferRequest(GraphDesc &graphDesc, const std::vector>& inputs, const std::vector>& outputs, @@ -119,6 +117,104 @@ void MyriadInferRequest::InferImpl() { GetResult(); } +static bool needsTypeConvert(const Precision& precision) { + switch (precision) { + case Precision::FP16: + case Precision::FP32: + case Precision::I32: + return false; + case Precision::I64: + case Precision::U64: + case Precision::BOOL: + return true; + default: + return false; + } + return false; +} + +template +static void convert(const T* const src, U* dst, size_t n) { + std::transform(src, src + n, dst, [] (T i) -> U { return static_cast(i); }); +} + +static const char* const NOT_ENOUGH_INPUT_SPACE_ERR_MSG = "Not enough space available in inputBuffer. Input size is too big"; + +static void convertInput(const uint8_t* const src, uint8_t* dst, const Precision& precision, size_t size, size_t remainingSize) { + size_t numElements = 0; + // U32 -> I32 is handled in copyInput by std::copy_n, unless blob layout != vpuLayout + // then assert "Unimplemented blob transformation from precision .. to .." in ie::blob_copy fires + switch (precision) { + case Precision::I64: + numElements = size / sizeof(int64_t); + IE_ASSERT((numElements * sizeof(int32_t)) <= remainingSize) << NOT_ENOUGH_INPUT_SPACE_ERR_MSG; + convert(reinterpret_cast(src), reinterpret_cast(dst), numElements); + return; + case Precision::U64: + numElements = size / sizeof(uint64_t); + IE_ASSERT((numElements * sizeof(int32_t)) <= remainingSize) << NOT_ENOUGH_INPUT_SPACE_ERR_MSG; + convert(reinterpret_cast(src), reinterpret_cast(dst), numElements); + return; + case Precision::BOOL: + numElements = size / sizeof(bool); + IE_ASSERT((numElements * sizeof(int32_t)) <= remainingSize) << NOT_ENOUGH_INPUT_SPACE_ERR_MSG; + convert(reinterpret_cast(src), reinterpret_cast(dst), numElements); + return; + default: + return; + } +} + +static void convertOutput(const uint8_t* src, uint8_t* dst, const Precision& precision, size_t size) { + switch (precision) { + case Precision::I64: + convert(reinterpret_cast(src), reinterpret_cast(dst), size / sizeof(int64_t)); + return; + case Precision::U64: + convert(reinterpret_cast(src), reinterpret_cast(dst), size / sizeof(uint64_t)); + return; + case Precision::BOOL: + convert(reinterpret_cast(src), reinterpret_cast(dst), size / sizeof(bool)); + return; + default: + return; + } +} + +static void copyInput(const ie::Blob::Ptr& inputBlob, uint8_t* dst, size_t size, size_t remainingSize, ie::Layout layout, ie::Layout vpuLayout) { + const auto& precision = inputBlob->getTensorDesc().getPrecision(); + bool needsConvert = needsTypeConvert(precision); + if (!needsConvert) { + IE_ASSERT(size <= remainingSize) << NOT_ENOUGH_INPUT_SPACE_ERR_MSG; + if (layout != vpuLayout) { + copyBlob(inputBlob, vpuLayout, dst); + } else { + std::copy_n(inputBlob->buffer().as(), size, dst); + } + } else { + IE_ASSERT(layout == vpuLayout) << "Can't convert blob with layout not matching vpu layout"; + convertInput(inputBlob->buffer().as(), dst, precision, size, remainingSize); + } +} + +static void copyOutput(uint8_t* src, const ie::Blob::Ptr& outputBlob, const Precision& outPrec, const SizeVector& outDims, ie::Layout vpuLayout) { + bool needsConvert = needsTypeConvert(outPrec); + const auto layout = outputBlob->getTensorDesc().getLayout(); + if (!needsConvert) { + if (layout != vpuLayout) { + // TODO: TensorDesc doesn't update internal BlockingDesc and strides when setLayout is called + const auto tempTensorDesc = ie::TensorDesc{outPrec, outDims, vpuLayout}; + const auto tmpBlob = make_blob_with_precision(tempTensorDesc, src); + copyBlob(tmpBlob, outputBlob); + } else { + std::copy_n(src, outputBlob->byteSize(), outputBlob->buffer().as()); + } + } else { + IE_ASSERT(layout == vpuLayout) << "Can't convert blob with layout not matching vpu layout"; + convertOutput(src, outputBlob->buffer().as(), outPrec, outputBlob->byteSize()); + } +} + void MyriadInferRequest::InferAsync() { if (_isNetworkConstant) { return; @@ -151,21 +247,13 @@ void MyriadInferRequest::InferAsync() { const auto offset = getOffset(name); const auto byteSize = blob->byteSize(); - const auto requiredSize = vpu::checked_cast(offset) + byteSize; - IE_ASSERT(requiredSize <= inputBuffer.size()) << "MyriadInferRequest::InferAsync()\n" - << "Input offset is too big. " - << "Required size: " << requiredSize - << ", Input buffer size: " << inputBuffer.size(); - + const auto remainingSize = inputBuffer.size() - vpu::checked_cast(offset); const auto foundBlob = getNetInputInfo(name); const auto vpuLayout = foundBlob->second->getTensorDesc().getLayout(); const auto layout = blob->getTensorDesc().getLayout(); - if (layout != vpuLayout) { - copyBlob(blob, vpuLayout, &inputBuffer[offset]); - } else { - MEMCPY(&inputBuffer[offset], blob->buffer().as(), byteSize); - } + copyInput(blob, &inputBuffer[offset], byteSize, remainingSize, layout, vpuLayout); + const auto offsetShape = inputInfo.offset.find(name+"_real_shape"); if (offsetShape == inputInfo.offset.end()) { continue; @@ -182,14 +270,20 @@ void MyriadInferRequest::InferAsync() { _executor->queueInference(_graphDesc, inputBuffer.data(), _inputInfo.totalSize, nullptr, 0); } + static void copyBlobAccordingUpperBound( const Blob::Ptr& in, const Blob::Ptr& out) { - const auto inLayout = in->getTensorDesc().getLayout(); - const auto outLayout = out->getTensorDesc().getLayout(); + const auto& inDesc = in->getTensorDesc(); + const auto& outDesc = out->getTensorDesc(); + const auto inLayout = inDesc.getLayout(); + const auto outLayout = outDesc.getLayout(); - const auto& inBlockingDesc = in->getTensorDesc().getBlockingDesc(); - const auto& outBlockingDesc = out->getTensorDesc().getBlockingDesc(); + const auto& outPrec = outDesc.getPrecision(); + bool needsConvert = needsTypeConvert(outPrec); + + const auto& inBlockingDesc = inDesc.getBlockingDesc(); + const auto& outBlockingDesc = outDesc.getBlockingDesc(); const auto& inDims = inBlockingDesc.getBlockDims(); const auto& outDims = outBlockingDesc.getBlockDims(); @@ -226,7 +320,11 @@ static void copyBlobAccordingUpperBound( } if (!isGarbageLine) { // We transfer outLineByteSize bytes, so garbage data at the end of the line is not copied. - std::copy_n(inPtr + inByteOffset, outLineByteSize, outPtr + outByteOffset); + if (!needsConvert) { + std::copy_n(inPtr + inByteOffset, outLineByteSize, outPtr + outByteOffset); + } else { + convertOutput(inPtr + inByteOffset, outPtr + outByteOffset, outPrec, outLineByteSize); + } outByteOffset += outLineByteSize; } } @@ -261,7 +359,7 @@ void MyriadInferRequest::GetResult() { const auto& name = (*it).first; const auto& blob = (*it).second; - if (blob->getTensorDesc().getLayout() == getVpuLayout(name)) { + if (blob->getTensorDesc().getLayout() == getVpuLayout(name) && !needsTypeConvert(blob->getTensorDesc().getPrecision())) { _executor->getResult(_graphDesc, blob->buffer(), static_cast(blob->byteSize())); return; } @@ -324,11 +422,7 @@ void MyriadInferRequest::GetResult() { copyBlobAccordingUpperBound(tmpBlob, ieBlob); } else { - // TODO: TensorDesc doesn't update internal BlockingDesc and strides when setLayout is called - const auto tempTensorDesc = ie::TensorDesc{ieOutPrc, ieOutDims, getVpuLayout(ieBlobName)}; - const auto tmpBlob = make_blob_with_precision(tempTensorDesc, resultBuffer.data() + resultOffset(ieBlobName)); - - copyBlob(tmpBlob, ieBlob); + copyOutput(resultBuffer.data() + resultOffset(ieBlobName), ieBlob, ieOutPrc, ieOutDims, getVpuLayout(ieBlobName)); } } } diff --git a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/comparison.cpp b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/comparison.cpp index 4485bbdea68..f4dcf672928 100644 --- a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/comparison.cpp +++ b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/comparison.cpp @@ -31,10 +31,6 @@ std::vector fpTypes = { InferenceEngine::Precision::FP16, }; -std::vector intTypes = { - InferenceEngine::Precision::I32, -}; - std::vector comparisonOpTypesFpToFp = { ngraph::helpers::ComparisonTypes::EQUAL, ngraph::helpers::ComparisonTypes::NOT_EQUAL, @@ -76,4 +72,61 @@ INSTANTIATE_TEST_SUITE_P(smoke_ComparisonInt, ::testing::Values(Config{{InferenceEngine::MYRIAD_DETECT_NETWORK_BATCH, CONFIG_VALUE(NO)}})), ComparisonLayerTest::getTestCaseName); +std::vector comparisonOpsInt = { + ngraph::helpers::ComparisonTypes::EQUAL, + ngraph::helpers::ComparisonTypes::GREATER_EQUAL, +}; + +INSTANTIATE_TEST_SUITE_P(smoke_ComparisonBOOL, + ComparisonLayerTest, + ::testing::Combine( + ::testing::ValuesIn(CommonTestUtils::combineParams(inputShapes)), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::ValuesIn(comparisonOpsInt), + ::testing::Values(ngraph::helpers::InputLayerType::PARAMETER), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(Config{{InferenceEngine::MYRIAD_DETECT_NETWORK_BATCH, CONFIG_VALUE(NO)}})), + ComparisonLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_ComparisonU32, + ComparisonLayerTest, + ::testing::Combine( + ::testing::ValuesIn(CommonTestUtils::combineParams(inputShapes)), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::ValuesIn(comparisonOpsInt), + ::testing::Values(ngraph::helpers::InputLayerType::PARAMETER), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(Config{{InferenceEngine::MYRIAD_DETECT_NETWORK_BATCH, CONFIG_VALUE(NO)}})), + ComparisonLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_ComparisonI64, + ComparisonLayerTest, + ::testing::Combine( + ::testing::ValuesIn(CommonTestUtils::combineParams(inputShapes)), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::ValuesIn(comparisonOpsInt), + ::testing::Values(ngraph::helpers::InputLayerType::PARAMETER), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(Config{{InferenceEngine::MYRIAD_DETECT_NETWORK_BATCH, CONFIG_VALUE(NO)}})), + ComparisonLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_ComparisonU64, + ComparisonLayerTest, + ::testing::Combine( + ::testing::ValuesIn(CommonTestUtils::combineParams(inputShapes)), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::ValuesIn(comparisonOpsInt), + ::testing::Values(ngraph::helpers::InputLayerType::PARAMETER), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(Config{{InferenceEngine::MYRIAD_DETECT_NETWORK_BATCH, CONFIG_VALUE(NO)}})), + ComparisonLayerTest::getTestCaseName); + } // namespace diff --git a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/eltwise.cpp b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/eltwise.cpp index 05b4c4cb88d..59059c87396 100644 --- a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/eltwise.cpp +++ b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/eltwise.cpp @@ -32,6 +32,9 @@ std::vector fpTypes = { std::vector intTypes = { ov::element::i32, + ov::element::u32, + ov::element::i64, + ov::element::u64, }; std::vector opTypes = { diff --git a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/gather_elements.cpp b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/gather_elements.cpp index 55843e804bf..988e17287cf 100644 --- a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/gather_elements.cpp +++ b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/gather_elements.cpp @@ -27,10 +27,15 @@ TEST_P(GatherElementsLayerTestVPU, GatherElementsTests) { const std::vector dPrecisions = { InferenceEngine::Precision::FP32, InferenceEngine::Precision::FP16, + InferenceEngine::Precision::I32, + InferenceEngine::Precision::U32, + InferenceEngine::Precision::I64, + InferenceEngine::Precision::U64, }; const std::vector iPrecisions = { - InferenceEngine::Precision::I32 + InferenceEngine::Precision::I32, + InferenceEngine::Precision::I64, }; INSTANTIATE_TEST_SUITE_P(smoke_GatherElements1, GatherElementsLayerTestVPU, @@ -54,4 +59,4 @@ INSTANTIATE_TEST_SUITE_P(smoke_GatherElements2, GatherElementsLayerTestVPU, GatherElementsLayerTest::getTestCaseName); -} // namespace \ No newline at end of file +} // namespace diff --git a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/gather_nd.cpp b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/gather_nd.cpp index 8e7ebbc396f..f6059e4aa18 100644 --- a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/gather_nd.cpp +++ b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/gather_nd.cpp @@ -13,10 +13,14 @@ const std::vector netPrecisions = { InferenceEngine::Precision::U8, InferenceEngine::Precision::FP16, InferenceEngine::Precision::FP32, + InferenceEngine::Precision::I32, + InferenceEngine::Precision::I64, + InferenceEngine::Precision::U64, }; const std::vector indicesPrecisions = { InferenceEngine::Precision::I32, + InferenceEngine::Precision::I64, }; const std::vector layerParams = { diff --git a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/logical.cpp b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/logical.cpp index d4dd50db3e1..de40e58b739 100644 --- a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/logical.cpp +++ b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/logical.cpp @@ -96,4 +96,41 @@ INSTANTIATE_TEST_SUITE_P(smoke_EltwiseLogicalNotInt, ::testing::Values(additional_config)), LogicalLayerTest::getTestCaseName); +std::vector logicalOpTypes = { + ngraph::helpers::LogicalTypes::LOGICAL_AND, +}; + +std::vector secondInputTypes = { + ngraph::helpers::InputLayerType::CONSTANT, + ngraph::helpers::InputLayerType::PARAMETER, +}; + +const auto LogicalTestParams = ::testing::Combine( + ::testing::ValuesIn(LogicalLayerTest::combineShapes(inputShapes)), + ::testing::ValuesIn(logicalOpTypes), + ::testing::ValuesIn(secondInputTypes), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(additional_config)); + +const auto LogicalTestParamsNot = ::testing::Combine( + ::testing::ValuesIn(LogicalLayerTest::combineShapes(inputShapesNot)), + ::testing::Values(ngraph::helpers::LogicalTypes::LOGICAL_NOT), + ::testing::Values(ngraph::helpers::InputLayerType::CONSTANT), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::Values(InferenceEngine::Precision::BOOL), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(additional_config)); + +INSTANTIATE_TEST_SUITE_P(smoke_CompareWithRefs, LogicalLayerTest, LogicalTestParams, LogicalLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_CompareWithRefsNot, LogicalLayerTest, LogicalTestParamsNot, LogicalLayerTest::getTestCaseName); + } // namespace diff --git a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/minimum_maximum.cpp b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/minimum_maximum.cpp index d174e19756d..5e70c8cf0f2 100644 --- a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/minimum_maximum.cpp +++ b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/minimum_maximum.cpp @@ -46,4 +46,43 @@ INSTANTIATE_TEST_SUITE_P(smoke_maximum, MaxMinLayerTest, ::testing::Values(CommonTestUtils::DEVICE_MYRIAD)), MaxMinLayerTest::getTestCaseName); +INSTANTIATE_TEST_SUITE_P(smoke_maximumU32, MaxMinLayerTest, + ::testing::Combine( + ::testing::ValuesIn(inShapes), + ::testing::ValuesIn(opType), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::ValuesIn(inputType), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD)), + MaxMinLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_maximumI64, MaxMinLayerTest, + ::testing::Combine( + ::testing::ValuesIn(inShapes), + ::testing::ValuesIn(opType), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::ValuesIn(inputType), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD)), + MaxMinLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_maximumU64, MaxMinLayerTest, + ::testing::Combine( + ::testing::ValuesIn(inShapes), + ::testing::ValuesIn(opType), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::ValuesIn(inputType), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD)), + MaxMinLayerTest::getTestCaseName); + } // namespace diff --git a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/nonzero.cpp b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/nonzero.cpp index b418a50da73..b87fe2a192d 100644 --- a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/nonzero.cpp +++ b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/nonzero.cpp @@ -34,6 +34,9 @@ std::vector> inShapes = { const std::vector inputPrecisions = { InferenceEngine::Precision::I32, + InferenceEngine::Precision::U32, + InferenceEngine::Precision::I64, + InferenceEngine::Precision::U64, InferenceEngine::Precision::FP16, InferenceEngine::Precision::U8, }; diff --git a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/strided_slice.cpp b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/strided_slice.cpp index 33893ae4241..57df88249b8 100644 --- a/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/strided_slice.cpp +++ b/src/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/strided_slice.cpp @@ -67,4 +67,40 @@ INSTANTIATE_TEST_SUITE_P(smoke_StridedSlice_tests, StridedSliceLayerTest, ::testing::Values(getConfig())), StridedSliceLayerTest::getTestCaseName); +INSTANTIATE_TEST_SUITE_P(smoke_StridedSlice_testsU32, StridedSliceLayerTest, + ::testing::Combine( + ::testing::ValuesIn(testCases), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::Values(InferenceEngine::Precision::U32), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(getConfig())), + StridedSliceLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_StridedSlice_testsI64, StridedSliceLayerTest, + ::testing::Combine( + ::testing::ValuesIn(testCases), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::Values(InferenceEngine::Precision::I64), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(getConfig())), + StridedSliceLayerTest::getTestCaseName); + +INSTANTIATE_TEST_SUITE_P(smoke_StridedSlice_testsU64, StridedSliceLayerTest, + ::testing::Combine( + ::testing::ValuesIn(testCases), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::Values(InferenceEngine::Precision::U64), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(InferenceEngine::Layout::ANY), + ::testing::Values(CommonTestUtils::DEVICE_MYRIAD), + ::testing::Values(getConfig())), + StridedSliceLayerTest::getTestCaseName); + } // namespace diff --git a/src/tests/functional/plugin/myriad/single_layer_tests/gather.cpp b/src/tests/functional/plugin/myriad/single_layer_tests/gather.cpp index 96e245fad63..718f33697d5 100644 --- a/src/tests/functional/plugin/myriad/single_layer_tests/gather.cpp +++ b/src/tests/functional/plugin/myriad/single_layer_tests/gather.cpp @@ -47,6 +47,9 @@ const std::vector, int>> inputShapes = { const std::vector networkPrecisions = { InferenceEngine::Precision::I32, + InferenceEngine::Precision::U32, + InferenceEngine::Precision::I64, + InferenceEngine::Precision::U64, InferenceEngine::Precision::FP32, }; @@ -77,8 +80,8 @@ private: const auto& inputShape = std::get<1>(params).first; const auto& axis = std::get<1>(params).second; const auto& networkPrecision = std::get<2>(params); - const auto& inputPrecision = InferenceEngine::Precision::UNSPECIFIED; - const auto& outputPrecision = InferenceEngine::Precision::UNSPECIFIED; + const auto& inputPrecision = networkPrecision; + const auto& outputPrecision = networkPrecision; const auto& inputLayout = InferenceEngine::Layout::ANY; const auto& outputLayout = InferenceEngine::Layout::ANY; diff --git a/src/tests/functional/plugin/myriad/single_layer_tests/static_shape_broadcast.cpp b/src/tests/functional/plugin/myriad/single_layer_tests/static_shape_broadcast.cpp index a1f62c1ce1a..5d88a8d9236 100644 --- a/src/tests/functional/plugin/myriad/single_layer_tests/static_shape_broadcast.cpp +++ b/src/tests/functional/plugin/myriad/single_layer_tests/static_shape_broadcast.cpp @@ -63,6 +63,7 @@ protected: StaticShapeBroadcastParam shapes; std::tie(shapes, inPrc, targetDevice) = this->GetParam(); + outPrc = inPrc; const auto inputShape = std::get<0>(shapes); const auto targetShape = std::get<1>(shapes); @@ -122,6 +123,9 @@ std::vector broadcastParam = { std::vector broadcastPrecisions = { InferenceEngine::Precision::FP32, InferenceEngine::Precision::I32, + InferenceEngine::Precision::U32, + InferenceEngine::Precision::I64, + InferenceEngine::Precision::U64, }; INSTANTIATE_TEST_SUITE_P(smoke_accuracy, StaticShapeBroadcastLayerTest, diff --git a/src/tests/functional/plugin/shared/include/behavior/ov_executable_network/exec_graph_info.hpp b/src/tests/functional/plugin/shared/include/behavior/ov_executable_network/exec_graph_info.hpp index b550b8293b6..e6ca0e98dab 100644 --- a/src/tests/functional/plugin/shared/include/behavior/ov_executable_network/exec_graph_info.hpp +++ b/src/tests/functional/plugin/shared/include/behavior/ov_executable_network/exec_graph_info.hpp @@ -282,7 +282,9 @@ TEST_P(OVExecGraphImportExportTest, importExportedIENetwork) { EXPECT_NO_THROW(importedExecNet.output("concat_op").get_node()); const auto outputType = elementType == ngraph::element::i32 || - elementType == ngraph::element::i64 ? ngraph::element::i32 : ngraph::element::f32; + elementType == ngraph::element::u32 || + elementType == ngraph::element::i64 || + elementType == ngraph::element::u64 ? ngraph::element::i32 : ngraph::element::f32; const auto inputType = elementType == ngraph::element::f16 ? ngraph::element::Type_t::f32 : elementType; EXPECT_EQ(inputType, importedExecNet.input("param1").get_element_type()); diff --git a/src/tests/functional/shared_test_classes/src/single_layer/gather_elements.cpp b/src/tests/functional/shared_test_classes/src/single_layer/gather_elements.cpp index d559e04a53d..7be004d13a5 100644 --- a/src/tests/functional/shared_test_classes/src/single_layer/gather_elements.cpp +++ b/src/tests/functional/shared_test_classes/src/single_layer/gather_elements.cpp @@ -35,6 +35,7 @@ void GatherElementsLayerTest::SetUp() { InferenceEngine::Precision dPrecision, iPrecision; int axis; std::tie(dataShape, indicesShape, axis, dPrecision, iPrecision, targetDevice) = this->GetParam(); + outPrc = dPrecision; auto ngDPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(dPrecision); auto ngIPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(iPrecision);