[IE][VPU]: Fix NCE hang due to input dimensions exceed HW limitation (#1636)

* Fixed NCE hang due to input dimensions exceed HW limitation
* Added convolution test for big input dimensions

Signed-off-by: wenzengc <wenzeng.chen@intel.com>
This commit is contained in:
Wenzeng Chen
2020-08-26 15:38:58 +08:00
committed by GitHub
parent 07ebc2d3bd
commit 0f524b5523
2 changed files with 29 additions and 0 deletions

View File

@@ -631,6 +631,10 @@ std::vector<TilingOption> HWConvolutionTilingSearcher::selectBetterTiling() cons
const auto outputTileInitial = dirTiling.getOutputTileDims();
const auto inputTileInitial = dirTiling.getInputTileDims();
const int maxInputTileDimW = 2048;
const int maxInputTileDimH = 2048;
const int maxInputTileDimC = 2048;
auto minInputTileDimW = 64;
auto minInputTileDimH = _convolutionOptions._kernelSizeY;
if (_convolutionOptions._withPool) {
@@ -646,10 +650,15 @@ std::vector<TilingOption> HWConvolutionTilingSearcher::selectBetterTiling() cons
for (int numChannelTiles = 1; numChannelTiles <= maxNumChannelTiles; numChannelTiles++) {
const int tileSizeDimC = divUp(_convolutionOptions._inputDims[Dim::C], numChannelTiles);
if (tileSizeDimC > maxInputTileDimC)
continue;
// here split and iterate either over input tensors or over output tensors depending on the direction.
for (int numWidthTiles = 1; numWidthTiles <= maxNumWidthTiles; numWidthTiles++) {
int tileSizeDimW = divUp(splitOver[Dim::W], numWidthTiles);
if (tileSizeDimW > maxInputTileDimW)
continue;
//
// Filter-out too small SoW input tiles when loops split input tensors.
//
@@ -666,6 +675,9 @@ std::vector<TilingOption> HWConvolutionTilingSearcher::selectBetterTiling() cons
for (int numHeightTiles = 1; numHeightTiles <= maxNumHeightTiles; numHeightTiles++) {
int tileSizeDimH = divUp(splitOver[Dim::H], numHeightTiles);
if (tileSizeDimH > maxInputTileDimH)
continue;
//
// Filter-out too small SoH input tiles when loops split input tensors.
//

View File

@@ -50,6 +50,15 @@ const auto conv2DParams_AutoPadValid = ::testing::Combine(
::testing::ValuesIn(numOutCannels),
::testing::Values(ngraph::op::PadType::VALID)
);
const auto conv2DParams_BigDimensionValid = ::testing::Combine(
::testing::ValuesIn(std::vector<std::vector<size_t>>({{1, 1}})),
::testing::ValuesIn(std::vector<std::vector<size_t>>({{1, 1}})),
::testing::Values(std::vector<ptrdiff_t>({0, 0})),
::testing::Values(std::vector<ptrdiff_t>({0, 0})),
::testing::ValuesIn(std::vector<std::vector<size_t>>({{1, 1}})),
::testing::ValuesIn(std::vector<size_t>({64})),
::testing::Values(ngraph::op::PadType::VALID)
);
INSTANTIATE_TEST_CASE_P(Convolution2D_ExplicitPadding, ConvolutionLayerTest,
::testing::Combine(
@@ -66,6 +75,14 @@ INSTANTIATE_TEST_CASE_P(Convolution2D_AutoPadValid, ConvolutionLayerTest,
::testing::Values(std::vector<size_t >({1, 3, 30, 30})),
::testing::Values(CommonTestUtils::DEVICE_MYRIAD)),
ConvolutionLayerTest::getTestCaseName);
INSTANTIATE_TEST_CASE_P(Convolution2D_BigDimensionValid, ConvolutionLayerTest,
::testing::Combine(
conv2DParams_BigDimensionValid,
::testing::ValuesIn(netPrecisions),
::testing::Values(std::vector<size_t >({1, 3, 1, 2500})),
::testing::Values(CommonTestUtils::DEVICE_MYRIAD)),
ConvolutionLayerTest::getTestCaseName);
/* ============= 3D Convolution ============= */
// TODO: 3D convolution fails with sigabort
} // namespace