aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichele Di Giorgio <michele.digiorgio@arm.com>2019-02-27 14:26:51 +0000
committerGiuseppe Rossini <giuseppe.rossini@arm.com>2019-04-02 12:17:12 +0000
commit881c6842eadf2d2fd4578b9f62ee6238a83cad65 (patch)
tree439a3faede9efbe359685d035d71398b80e70a50 /tests
parentcafec8f19ee126b72ba2b0194bd25a5a93727980 (diff)
downloadComputeLibrary-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.h96
-rw-r--r--tests/validation/CL/Winograd.cpp23
-rw-r--r--tests/validation/reference/Winograd.cpp1
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 },