diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2017-12-13 12:48:44 +0000 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:42:33 +0000 |
commit | acacc324216f466a548a69c2d8cc6540dc2769be (patch) | |
tree | 72203bea625b1af1abc0a4ddb664aad2748fe177 /tests/validation/NEON/Convolution.cpp | |
parent | 9a33b5411fed53e2fa339957b4c0b8e31e402968 (diff) | |
download | ComputeLibrary-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.cpp | 23 |
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() |