diff options
author | Gunes Bayir <gunes.bayir@arm.com> | 2024-01-17 16:07:03 +0000 |
---|---|---|
committer | Viet-Hoa Do <viet-hoa.do@arm.com> | 2024-02-01 16:00:34 +0000 |
commit | 2b9fa593a0a172bf36a02b5cdb840c6b9b361d7c (patch) | |
tree | a4e2d5ce46443a79a0778e4960462ce3edf106ec /tests/validation/dynamic_fusion/gpu/cl/Resize.cpp | |
parent | 7ab7fca87cca8775f82b0e9efec6a40975910c17 (diff) | |
download | ComputeLibrary-2b9fa593a0a172bf36a02b5cdb840c6b9b361d7c.tar.gz |
Use the stable CKW API in the GPU dynamic fusion backend
- Refactor all kernels to work with the CKW stable API
- Add support for sub-tile in the op_load/op_store CKW operator
- Fix mismatch in resize
- Add comments in all kernels written with CKW to help developers
understand the structure of the code
- Add texture image support in depthwise convolution written with CKW
- Add support for different block sizes in depthwise convolution
- Remove the use of the dynamic fusion helper functions.
- Add support for floor in the op_unary() of CKW
Resolves: COMPMID-6708, COMPMID-6743, COMPMID-6530
Signed-off-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Signed-off-by: Gunes Bayir <gunes.bayir@arm.com>
Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Signed-off-by: Jakub Sujak <jakub.sujak@arm.com>
Change-Id: I8104ce4d04a3138a1aeb0b84940e1f1c89e76069
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/10914
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Jakub Sujak <jakub.sujak@arm.com>
Reviewed-by: Gunes Bayir <gunes.bayir@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'tests/validation/dynamic_fusion/gpu/cl/Resize.cpp')
-rw-r--r-- | tests/validation/dynamic_fusion/gpu/cl/Resize.cpp | 306 |
1 files changed, 22 insertions, 284 deletions
diff --git a/tests/validation/dynamic_fusion/gpu/cl/Resize.cpp b/tests/validation/dynamic_fusion/gpu/cl/Resize.cpp index 10915acfaa..a6bcf4ae26 100644 --- a/tests/validation/dynamic_fusion/gpu/cl/Resize.cpp +++ b/tests/validation/dynamic_fusion/gpu/cl/Resize.cpp @@ -64,10 +64,7 @@ const auto QuantizationInfoSet = framework::dataset::make("QuantizationInfo", }); /** Tolerance */ -constexpr AbsoluteTolerance<uint8_t> tolerance_q8(1); -constexpr AbsoluteTolerance<int8_t> tolerance_qs8(1); -constexpr AbsoluteTolerance<int16_t> tolerance_s16(1); -constexpr float tolerance_f32_absolute(0.001f); +constexpr float tolerance_f32_absolute(0.001f); RelativeTolerance<float> tolerance_f32(0.05); constexpr float abs_tolerance_f16(0.1f); @@ -105,26 +102,27 @@ TEST_CASE(NullPtr, framework::DatasetMode::ALL) TEST_CASE(SupportDataType, framework::DatasetMode::ALL) { - const std::map<DataType, bool> supported_data_types = { - {DataType::U8, true}, - {DataType::S8, false}, - {DataType::QSYMM8, false}, - {DataType::QASYMM8, true}, - {DataType::QASYMM8_SIGNED, true}, - {DataType::QSYMM8_PER_CHANNEL, false}, - {DataType::U16, false}, - {DataType::S16, true}, - {DataType::QSYMM16, false}, - {DataType::QASYMM16, false}, - {DataType::U32, false}, - {DataType::S32, false}, - {DataType::U64, false}, - {DataType::S64, false}, - {DataType::BFLOAT16, false}, - {DataType::F16, true}, - {DataType::F32, true}, - {DataType::F64, false}, - {DataType::SIZET, false}, + const std::map<DataType, bool> supported_data_types = + { + { DataType::U8, false }, + { DataType::S8, false }, + { DataType::QSYMM8, false }, + { DataType::QASYMM8, false }, + { DataType::QASYMM8_SIGNED, false }, + { DataType::QSYMM8_PER_CHANNEL, false }, + { DataType::U16, false }, + { DataType::S16, false }, + { DataType::QSYMM16, false }, + { DataType::QASYMM16, false }, + { DataType::U32, false }, + { DataType::S32, false }, + { DataType::U64, false }, + { DataType::S64, false }, + { DataType::BFLOAT16, false }, + { DataType::F16, true }, + { DataType::F32, true }, + { DataType::F64, false }, + { DataType::SIZET, false }, }; for (auto &kv : supported_data_types) @@ -352,266 +350,6 @@ FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners, TEST_SUITE_END() // FP16 TEST_SUITE_END() // Float -TEST_SUITE(Integer) -TEST_SUITE(U8) -const auto u8_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<uint8_t>())), - framework::dataset::make("DataType", DataType::U8)); -FIXTURE_DATA_TEST_CASE(Run, - DynamicFusionResizeFixture<uint8_t>, - framework::DatasetMode::ALL, - ASSEMBLE_DATASET_DYNAMIC_FUSION(u8_shape, ScaleSamplingPolicySet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_q8); -} -FIXTURE_DATA_TEST_CASE(RunAlignCorners, - DynamicFusionResizeFixture<uint8_t>, - framework::DatasetMode::ALL, - ASSEMBLE_DATASET_DYNAMIC_FUSION(u8_shape, ScaleAlignCornersSamplingPolicySet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_q8); -} -const auto u8_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<uint8_t>())), - framework::dataset::make("DataType", DataType::U8)); -FIXTURE_DATA_TEST_CASE(RunNightly, - DynamicFusionResizeFixture<uint8_t>, - framework::DatasetMode::NIGHTLY, - ASSEMBLE_DATASET_DYNAMIC_FUSION(u8_nightly_shape, ScaleSamplingPolicySet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_q8); -} -FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners, - DynamicFusionResizeFixture<uint8_t>, - framework::DatasetMode::NIGHTLY, - ASSEMBLE_DATASET_DYNAMIC_FUSION(u8_nightly_shape, ScaleAlignCornersSamplingPolicySet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_q8); -} -TEST_SUITE_END() // U8 - -TEST_SUITE(S16) -const auto s16_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<int16_t>())), - framework::dataset::make("DataType", DataType::S16)); -FIXTURE_DATA_TEST_CASE(Run, - DynamicFusionResizeFixture<int16_t>, - framework::DatasetMode::ALL, - ASSEMBLE_DATASET_DYNAMIC_FUSION(s16_shape, ScaleSamplingPolicySet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_s16); -} -FIXTURE_DATA_TEST_CASE(RunAlignCorners, - DynamicFusionResizeFixture<int16_t>, - framework::DatasetMode::ALL, - ASSEMBLE_DATASET_DYNAMIC_FUSION(s16_shape, ScaleAlignCornersSamplingPolicySet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_s16); -} -const auto s16_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<int16_t>())), - framework::dataset::make("DataType", DataType::S16)); -FIXTURE_DATA_TEST_CASE(RunNightly, - DynamicFusionResizeFixture<int16_t>, - framework::DatasetMode::NIGHTLY, - ASSEMBLE_DATASET_DYNAMIC_FUSION(s16_nightly_shape, ScaleSamplingPolicySet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_s16); -} -FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners, - DynamicFusionResizeFixture<int16_t>, - framework::DatasetMode::NIGHTLY, - ASSEMBLE_DATASET_DYNAMIC_FUSION(s16_nightly_shape, ScaleAlignCornersSamplingPolicySet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_s16); -} -TEST_SUITE_END() // S16 -TEST_SUITE_END() // Integer - -template <typename T> -using DynamicFusionResizeQuantizedFixture = - DynamicFusionResizeQuantizedValidationFixture<CLTensor, CLAccessor, GpuResize, T>; -TEST_SUITE(Quantized) -TEST_SUITE(QASYMM8) -const auto qasymm8_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<uint8_t>())), - framework::dataset::make("DataType", DataType::QASYMM8)); -FIXTURE_DATA_TEST_CASE(Run, - DynamicFusionResizeQuantizedFixture<uint8_t>, - framework::DatasetMode::ALL, - ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_shape, - ScaleSamplingPolicySet, - QuantizationInfoSet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_q8); -} -FIXTURE_DATA_TEST_CASE(RunAlignCorners, - DynamicFusionResizeQuantizedFixture<uint8_t>, - framework::DatasetMode::ALL, - ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_shape, - ScaleAlignCornersSamplingPolicySet, - QuantizationInfoSet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_q8); -} -const auto qasymm8_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<uint8_t>())), - framework::dataset::make("DataType", DataType::QASYMM8)); -FIXTURE_DATA_TEST_CASE(RunNightly, - DynamicFusionResizeQuantizedFixture<uint8_t>, - framework::DatasetMode::NIGHTLY, - ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_nightly_shape, - ScaleSamplingPolicySet, - QuantizationInfoSet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_q8); -} -FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners, - DynamicFusionResizeQuantizedFixture<uint8_t>, - framework::DatasetMode::NIGHTLY, - ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_nightly_shape, - ScaleAlignCornersSamplingPolicySet, - QuantizationInfoSet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_q8); -} -TEST_SUITE_END() // QASYMM8 - -TEST_SUITE(QASYMM8_SIGNED) -const auto qasymm8_signed_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<int8_t>())), - framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)); -FIXTURE_DATA_TEST_CASE(Run, - DynamicFusionResizeQuantizedFixture<int8_t>, - framework::DatasetMode::ALL, - ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_signed_shape, - ScaleSamplingPolicySet, - QuantizationInfoSet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_qs8); -} -FIXTURE_DATA_TEST_CASE(RunAlignCorners, - DynamicFusionResizeQuantizedFixture<int8_t>, - framework::DatasetMode::ALL, - ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_signed_shape, - ScaleAlignCornersSamplingPolicySet, - QuantizationInfoSet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_qs8); -} -const auto qasymm8_signed_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<int8_t>())), - framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)); -FIXTURE_DATA_TEST_CASE(RunNightly, - DynamicFusionResizeQuantizedFixture<int8_t>, - framework::DatasetMode::NIGHTLY, - ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_signed_nightly_shape, - ScaleSamplingPolicySet, - QuantizationInfoSet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_qs8); -} -FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners, - DynamicFusionResizeQuantizedFixture<int8_t>, - framework::DatasetMode::NIGHTLY, - ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_signed_nightly_shape, - ScaleAlignCornersSamplingPolicySet, - QuantizationInfoSet)) -{ - //Create valid region - TensorInfo src_info(_shape, 1, _data_type); - const ValidRegion valid_region = - calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false); - - // Validate output - validate(CLAccessor(_target), _reference, valid_region, tolerance_qs8); -} -TEST_SUITE_END() // QASYMM8_SIGNED - -TEST_SUITE_END() // Quantized - TEST_SUITE_END() // RESIZE TEST_SUITE_END() // DYNAMIC_FUSION TEST_SUITE_END() // CL |