diff options
author | Michele Di Giorgio <michele.digiorgio@arm.com> | 2019-02-27 14:26:51 +0000 |
---|---|---|
committer | Giuseppe Rossini <giuseppe.rossini@arm.com> | 2019-04-02 12:17:12 +0000 |
commit | 881c6842eadf2d2fd4578b9f62ee6238a83cad65 (patch) | |
tree | 439a3faede9efbe359685d035d71398b80e70a50 /tests | |
parent | cafec8f19ee126b72ba2b0194bd25a5a93727980 (diff) | |
download | ComputeLibrary-881c6842eadf2d2fd4578b9f62ee6238a83cad65.tar.gz |
COMPMID-1318: Implementing Winograd 7x7 NHWC on OpenCL -- Part II
Change-Id: I036558d832c697da1fe9ea04ada0df38dc793914
Signed-off-by: giuros01 <giuseppe.rossini@arm.com>
Reviewed-on: https://review.mlplatform.org/c/923
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/datasets/ShapeDatasets.h | 96 | ||||
-rw-r--r-- | tests/validation/CL/Winograd.cpp | 23 | ||||
-rw-r--r-- | tests/validation/reference/Winograd.cpp | 1 |
3 files changed, 114 insertions, 6 deletions
diff --git a/tests/datasets/ShapeDatasets.h b/tests/datasets/ShapeDatasets.h index b6923c15c9..f3e3220fd6 100644 --- a/tests/datasets/ShapeDatasets.h +++ b/tests/datasets/ShapeDatasets.h @@ -580,6 +580,102 @@ public: } }; +/** Data set containing small 1x7 tensor shapes. */ +class Small1x7Shapes final : public ShapeDataset +{ +public: + Small1x7Shapes() + : ShapeDataset("Shape", + { + TensorShape{ 1U, 7U, 7U, 4U }, + TensorShape{ 1U, 7U, 4U, 13U }, + TensorShape{ 1U, 7U, 9U, 2U }, + TensorShape{ 1U, 7U, 3U, 5U }, + }) + { + } +}; + +/** Data set containing large 1x7 tensor shapes. */ +class Large1x7Shapes final : public ShapeDataset +{ +public: + Large1x7Shapes() + : ShapeDataset("Shape", + { + TensorShape{ 1U, 7U, 32U, 64U }, + TensorShape{ 1U, 7U, 51U, 13U }, + TensorShape{ 1U, 7U, 53U, 47U }, + TensorShape{ 1U, 7U, 128U, 384U }, + }) + { + } +}; + +/** Data set containing small 7x7 tensor shapes. */ +class Small7x7Shapes final : public ShapeDataset +{ +public: + Small7x7Shapes() + : ShapeDataset("Shape", + { + TensorShape{ 7U, 7U, 7U, 4U }, + TensorShape{ 7U, 7U, 4U, 13U }, + TensorShape{ 7U, 7U, 9U, 2U }, + TensorShape{ 7U, 7U, 3U, 5U }, + }) + { + } +}; + +/** Data set containing large 7x7 tensor shapes. */ +class Large7x7Shapes final : public ShapeDataset +{ +public: + Large7x7Shapes() + : ShapeDataset("Shape", + { + TensorShape{ 7U, 7U, 32U, 64U }, + TensorShape{ 7U, 7U, 51U, 13U }, + TensorShape{ 7U, 7U, 53U, 47U }, + TensorShape{ 7U, 7U, 128U, 384U }, + }) + { + } +}; + +/** Data set containing small 7x1 tensor shapes. */ +class Small7x1Shapes final : public ShapeDataset +{ +public: + Small7x1Shapes() + : ShapeDataset("Shape", + { + TensorShape{ 7U, 1U, 7U, 4U }, + TensorShape{ 7U, 1U, 4U, 13U }, + TensorShape{ 7U, 1U, 9U, 2U }, + TensorShape{ 7U, 1U, 3U, 5U }, + }) + { + } +}; + +/** Data set containing large 7x1 tensor shapes. */ +class Large7x1Shapes final : public ShapeDataset +{ +public: + Large7x1Shapes() + : ShapeDataset("Shape", + { + TensorShape{ 7U, 1U, 32U, 64U }, + TensorShape{ 7U, 1U, 51U, 13U }, + TensorShape{ 7U, 1U, 53U, 47U }, + TensorShape{ 7U, 1U, 128U, 384U }, + }) + { + } +}; + /** Data set containing small tensor shapes for deconvolution. */ class SmallDeconvolutionShapes final : public ShapeDataset { diff --git a/tests/validation/CL/Winograd.cpp b/tests/validation/CL/Winograd.cpp index f933a287cc..1042dd7e08 100644 --- a/tests/validation/CL/Winograd.cpp +++ b/tests/validation/CL/Winograd.cpp @@ -118,7 +118,7 @@ const auto SmallWinogradFilterTransformDatasetNCHW = framework::dataset::concat(combine(datasets::Small5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })), combine(datasets::Small1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) }))))))); -const auto SmallWinogradFilterTransformDatasetNHWC = +const auto SmallWinogradFilterTransformDatasetNHWC_F16 = framework::dataset::concat(combine(datasets::Small3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })), framework::dataset::concat(combine(datasets::Small3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })), framework::dataset::concat(combine(datasets::Small1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })), @@ -126,6 +126,11 @@ const auto SmallWinogradFilterTransformDatasetNHWC = framework::dataset::concat(combine(datasets::Small5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })), (combine(datasets::Small1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))))); +const auto SmallWinogradFilterTransformDatasetNHWC_F32 = + framework::dataset::concat(SmallWinogradFilterTransformDatasetNHWC_F16, + framework::dataset::concat(combine(datasets::Small7x7Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U) })), + framework::dataset::concat(combine(datasets::Small7x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U) })), + combine(datasets::Small1x7Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U) }))))); const auto LargeWinogradFilterTransformDatasetNCHW = framework::dataset::concat(combine(datasets::Large3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U), Size2D(4U, 4U) })), @@ -135,7 +140,7 @@ const auto LargeWinogradFilterTransformDatasetNCHW = framework::dataset::concat(combine(datasets::Large5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })), combine(datasets::Large1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) }))))))); -const auto LargeWinogradFilterTransformDatasetNHWC = +const auto LargeWinogradFilterTransformDatasetNHWC_F16 = framework::dataset::concat(combine(datasets::Large3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })), framework::dataset::concat(combine(datasets::Large3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })), framework::dataset::concat(combine(datasets::Large1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })), @@ -143,6 +148,12 @@ const auto LargeWinogradFilterTransformDatasetNHWC = framework::dataset::concat(combine(datasets::Large5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })), combine(datasets::Large1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) }))))))); +const auto LargeWinogradFilterTransformDatasetNHWC_F32 = + framework::dataset::concat(LargeWinogradFilterTransformDatasetNHWC_F16, + framework::dataset::concat(combine(datasets::Large7x7Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U) })), + framework::dataset::concat(combine(datasets::Large7x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U) })), + combine(datasets::Large1x7Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U) }))))); + // Output transform const auto SmallWinogradOutputTransformDatasetNCHW = datasets::SmallWinogradOutputTransformDatasetNCHW(); @@ -364,7 +375,7 @@ TEST_SUITE_END() // NCHW TEST_SUITE(NHWC) TEST_SUITE(FP16) FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::PRECOMMIT, - combine(combine(SmallWinogradFilterTransformDatasetNHWC, + combine(combine(SmallWinogradFilterTransformDatasetNHWC_F16, framework::dataset::make("DataLayout", { DataLayout::NHWC })), framework::dataset::make("DataType", { DataType::F16 }))) { @@ -373,7 +384,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP16, framework } FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::NIGHTLY, - combine(combine(LargeWinogradFilterTransformDatasetNHWC, + combine(combine(LargeWinogradFilterTransformDatasetNHWC_F16, framework::dataset::make("DataLayout", { DataLayout::NHWC })), framework::dataset::make("DataType", { DataType::F16 }))) { @@ -383,7 +394,7 @@ FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP16, framework TEST_SUITE_END() // FP16 TEST_SUITE(FP32) FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::PRECOMMIT, - combine(combine(SmallWinogradFilterTransformDatasetNHWC, + combine(combine(SmallWinogradFilterTransformDatasetNHWC_F32, framework::dataset::make("DataLayout", { DataLayout::NHWC })), framework::dataset::make("DataType", { DataType::F32 }))) { @@ -392,7 +403,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP32, framework } FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::NIGHTLY, - combine(combine(LargeWinogradFilterTransformDatasetNHWC, + combine(combine(LargeWinogradFilterTransformDatasetNHWC_F32, framework::dataset::make("DataLayout", { DataLayout::NHWC })), framework::dataset::make("DataType", { DataType::F32 }))) { diff --git a/tests/validation/reference/Winograd.cpp b/tests/validation/reference/Winograd.cpp index f09b2205d9..5525bc4535 100644 --- a/tests/validation/reference/Winograd.cpp +++ b/tests/validation/reference/Winograd.cpp @@ -193,6 +193,7 @@ void initialize_matrix_transform(SimpleTensor<T> &src, const Size2D &output_tile { WinogradKey(std::pair<int, int>(4, 1), std::pair<int, int>(5, 1), WinogradTransformType::FILTER), fmatrix4x4_5x5 }, { WinogradKey(std::pair<int, int>(2, 1), std::pair<int, int>(7, 1), WinogradTransformType::FILTER), fmatrix2x1_7x7 }, { WinogradKey(std::pair<int, int>(1, 2), std::pair<int, int>(1, 7), WinogradTransformType::FILTER), fmatrix2x1_7x7 }, + { WinogradKey(std::pair<int, int>(2, 2), std::pair<int, int>(7, 7), WinogradTransformType::FILTER), fmatrix2x1_7x7 }, { WinogradKey(std::pair<int, int>(1, 4), std::pair<int, int>(1, 5), WinogradTransformType::FILTER), fmatrix4x4_5x5 }, { WinogradKey(std::pair<int, int>(2, 2), std::pair<int, int>(3, 3), WinogradTransformType::OUTPUT), omatrix2x2_3x3 }, { WinogradKey(std::pair<int, int>(4, 4), std::pair<int, int>(3, 3), WinogradTransformType::OUTPUT), omatrix4x4_3x3 }, |