aboutsummaryrefslogtreecommitdiff
path: root/tests/validation/NEON/Convolution.cpp
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2017-12-13 12:48:44 +0000
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:42:33 +0000
commitacacc324216f466a548a69c2d8cc6540dc2769be (patch)
tree72203bea625b1af1abc0a4ddb664aad2748fe177 /tests/validation/NEON/Convolution.cpp
parent9a33b5411fed53e2fa339957b4c0b8e31e402968 (diff)
downloadComputeLibrary-acacc324216f466a548a69c2d8cc6540dc2769be.tar.gz
COMPMID-556: Add tolerance in CustomConvolution for NEON
NEON target multiplies convolution result with the reciprocal of scale, while the reference directly divides with scale leading to mismatches of range of 1. Increases absolute tolerance to 1 for NEON target. Change-Id: Ifb8328699479be0e0804aaf319d9c825dfb734cb Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/113084 Reviewed-by: Michalis Spyrou <michalis.spyrou@arm.com> Reviewed-by: Anthony Barbier <anthony.barbier@arm.com> Tested-by: BSG Visual Compute Jenkins server to access repositories on http://mpd-gerrit.cambridge.arm.com <bsgcomp@arm.com>
Diffstat (limited to 'tests/validation/NEON/Convolution.cpp')
-rw-r--r--tests/validation/NEON/Convolution.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/tests/validation/NEON/Convolution.cpp b/tests/validation/NEON/Convolution.cpp
index b820491e18..0fb61dcf0e 100644
--- a/tests/validation/NEON/Convolution.cpp
+++ b/tests/validation/NEON/Convolution.cpp
@@ -43,6 +43,13 @@ namespace validation
{
namespace
{
+/** Tolerance value for comparing reference's output against implementation
+ *
+ * This is due to the fact that NEON target performs multiplication with reciprocal of scale,
+ * while reference performs direct division with scale.
+ */
+constexpr AbsoluteTolerance<uint8_t> tolerance_u8(1);
+
/* Convolution3x3 */
constexpr unsigned int filter_size_3x3 = 3; /* Size of the kernel/filter in number of elements. */
constexpr BorderSize border_size_3x3(filter_size_3x3 / 2); /* Border size of the kernel/filter around its central element. */
@@ -132,7 +139,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::Datas
datasets::BorderModes()))
{
// Validate output
- validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_3x3));
+ validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_3x3), tolerance_u8);
}
FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType",
@@ -140,7 +147,7 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas
datasets::BorderModes()))
{
// Validate output
- validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_3x3));
+ validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_3x3), tolerance_u8);
}
TEST_SUITE_END() /* Custom Convolution3x3 */
@@ -197,7 +204,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::Datas
datasets::BorderModes()))
{
// Validate output
- validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_5x5));
+ validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_5x5), tolerance_u8);
}
FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType",
@@ -205,7 +212,7 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas
datasets::BorderModes()))
{
// Validate output
- validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_5x5));
+ validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_5x5), tolerance_u8);
}
TEST_SUITE_END() /* Custom Convolution 5x5 */
@@ -262,7 +269,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::Datas
datasets::BorderModes()))
{
// Validate output
- validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_7x7));
+ validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_7x7), tolerance_u8);
}
FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType",
@@ -270,7 +277,7 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas
datasets::BorderModes()))
{
// Validate output
- validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_7x7));
+ validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_7x7), tolerance_u8);
}
TEST_SUITE_END() /* Custom Convolution 7x7 */
@@ -327,7 +334,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::Datas
datasets::BorderModes()))
{
// Validate output
- validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_9x9));
+ validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_9x9), tolerance_u8);
}
FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType",
@@ -335,7 +342,7 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas
datasets::BorderModes()))
{
// Validate output
- validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_9x9));
+ validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), border_size_9x9), tolerance_u8);
}
TEST_SUITE_END() /* Custom Convolution 9x9 */
TEST_SUITE_END()