From 95a6f72fbf04ecabd7d1db0d765e6773faa3df86 Mon Sep 17 00:00:00 2001 From: Sang-Hoon Park Date: Fri, 19 Jun 2020 15:31:29 +0100 Subject: COMPMID-3482: add in-place computation tests for NEPixelWiseMultiplication - Add validate tests for in-place computation - Add in-place combination to existing test cases - Nightly with LargeShapes are removed as SmallShapes dataset is giving enough size to test multiple iterations of loop (Each iteration uses 16B vector size). - CL test suite has been adjusted with dummy in-place parameter to maintain shared fixture compatibility. Change-Id: I3008691332027dcd306ffd069895e66d626c7696 Signed-off-by: Sang-Hoon Park Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/3422 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins --- tests/validation/CL/PixelWiseMultiplication.cpp | 114 ++++---- tests/validation/NEON/PixelWiseMultiplication.cpp | 300 ++++++++++----------- .../fixtures/PixelWiseMultiplicationFixture.h | 68 +++-- 3 files changed, 252 insertions(+), 230 deletions(-) (limited to 'tests') diff --git a/tests/validation/CL/PixelWiseMultiplication.cpp b/tests/validation/CL/PixelWiseMultiplication.cpp index ea686af812..68a4150411 100644 --- a/tests/validation/CL/PixelWiseMultiplication.cpp +++ b/tests/validation/CL/PixelWiseMultiplication.cpp @@ -50,6 +50,10 @@ const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 0.75f, 0.25f), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LOGISTIC, 0.75f, 0.25f) }); +// Since in-place computation on CL-side hasn't been intended to be implemented, they are not tested. +// However, this dataset is required for the shared fixture and it would make extension easier when +// CL-side also starts supporting in-place computation. +const auto InPlaceDataSet = framework::dataset::make("InPlace", { false }); } //namespace // *INDENT-OFF* // clang-format off @@ -57,13 +61,14 @@ const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo #define PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, SHAPES, DT1, DT2, SCALE, RP, ACT, VALIDATE) \ FIXTURE_DATA_TEST_CASE(TEST_NAME, CLPixelWiseMultiplication##FIXTURE, framework::DatasetMode::MODE, \ - combine(combine(combine(combine(combine(combine( \ + combine(combine(combine(combine(combine(combine(combine( \ datasets::SHAPES, \ framework::dataset::make("DataType1", DataType::DT1)), \ framework::dataset::make("DataType2", DataType::DT2)), \ framework::dataset::make("Scale", std::move(SCALE))), \ datasets::ConvertPolicies()), \ - framework::dataset::make("RoundingPolicy", RoundingPolicy::RP)), ACT)) \ + framework::dataset::make("RoundingPolicy", RoundingPolicy::RP)), ACT), \ + InPlaceDataSet)) \ { \ VALIDATE \ } @@ -143,16 +148,17 @@ using CLPixelWiseMultiplicationQSYMM16ToS32Fxture = PixelWiseMultiplicationValid TEST_SUITE(Quantized) TEST_SUITE(QASYMM8) FIXTURE_DATA_TEST_CASE(RunSmall, CLPixelWiseMultiplicationQuantizedFixture, framework::DatasetMode::PRECOMMIT, - combine(combine(combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8)), - framework::dataset::make("Scale", { 1.f, 2.f })), - framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })), - framework::dataset::make("RoundingPolicy", RoundingPolicy::TO_NEAREST_EVEN)), - framework::dataset::make("Src0QInfo", { QuantizationInfo(5.f / 255.f, 20) })), - framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 255.f, 10) })), - framework::dataset::make("OUtQInfo", { QuantizationInfo(1.f / 255.f, 5) }))) + combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), + framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), + framework::dataset::make("DataTypeOut", DataType::QASYMM8)), + framework::dataset::make("Scale", { 1.f, 2.f })), + framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })), + framework::dataset::make("RoundingPolicy", RoundingPolicy::TO_NEAREST_EVEN)), + framework::dataset::make("Src0QInfo", { QuantizationInfo(5.f / 255.f, 20) })), + framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 255.f, 10) })), + framework::dataset::make("OUtQInfo", { QuantizationInfo(1.f / 255.f, 5) })), + InPlaceDataSet)) { // Validate output validate(CLAccessor(_target), _reference, tolerance_qasymm8); @@ -161,16 +167,17 @@ TEST_SUITE_END() // QASYMM8 TEST_SUITE(QASYMM8_SIGNED) FIXTURE_DATA_TEST_CASE(RunSmall, CLPixelWiseMultiplicationQuantizedFixture, framework::DatasetMode::PRECOMMIT, - combine(combine(combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8_SIGNED)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8_SIGNED)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8_SIGNED)), - framework::dataset::make("Scale", { 1.f, 2.f })), - framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })), - framework::dataset::make("RoundingPolicy", RoundingPolicy::TO_NEAREST_EVEN)), - framework::dataset::make("Src0QInfo", { QuantizationInfo(5.f / 255.f, 20) })), - framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 255.f, 10) })), - framework::dataset::make("OUtQInfo", { QuantizationInfo(1.f / 255.f, 5) }))) + combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QASYMM8_SIGNED)), + framework::dataset::make("DataTypeIn2", DataType::QASYMM8_SIGNED)), + framework::dataset::make("DataTypeOut", DataType::QASYMM8_SIGNED)), + framework::dataset::make("Scale", { 1.f, 2.f })), + framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })), + framework::dataset::make("RoundingPolicy", RoundingPolicy::TO_NEAREST_EVEN)), + framework::dataset::make("Src0QInfo", { QuantizationInfo(5.f / 255.f, 20) })), + framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 255.f, 10) })), + framework::dataset::make("OUtQInfo", { QuantizationInfo(1.f / 255.f, 5) })), + InPlaceDataSet)) { // Validate output validate(CLAccessor(_target), _reference, tolerance_qasymm8); @@ -179,31 +186,33 @@ TEST_SUITE_END() // QASYMM8_SIGNED TEST_SUITE(QSYMM16) FIXTURE_DATA_TEST_CASE(RunSmall, CLPixelWiseMultiplicationQuantizedFixture, framework::DatasetMode::PRECOMMIT, - combine(combine(combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::QSYMM16)), - framework::dataset::make("Scale", { 1.f, 2.f })), - framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })), - framework::dataset::make("RoundingPolicy", RoundingPolicy::TO_NEAREST_EVEN)), - framework::dataset::make("Src0QInfo", { QuantizationInfo(1.f / 32768.f, 0) })), - framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 32768.f, 0) })), - framework::dataset::make("OutQInfo", { QuantizationInfo(5.f / 32768.f, 0) }))) + combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), + framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), + framework::dataset::make("DataTypeOut", DataType::QSYMM16)), + framework::dataset::make("Scale", { 1.f, 2.f })), + framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })), + framework::dataset::make("RoundingPolicy", RoundingPolicy::TO_NEAREST_EVEN)), + framework::dataset::make("Src0QInfo", { QuantizationInfo(1.f / 32768.f, 0) })), + framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 32768.f, 0) })), + framework::dataset::make("OutQInfo", { QuantizationInfo(5.f / 32768.f, 0) })), + InPlaceDataSet)) { // Validate output validate(CLAccessor(_target), _reference, tolerance_qsymm16); } FIXTURE_DATA_TEST_CASE(RunLarge, CLPixelWiseMultiplicationQuantizedFixture, framework::DatasetMode::NIGHTLY, - combine(combine(combine(combine(combine(combine(combine(combine(combine(datasets::LargeShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::QSYMM16)), - framework::dataset::make("Scale", { 1.f, 2.f })), - framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })), - framework::dataset::make("RoundingPolicy", RoundingPolicy::TO_NEAREST_EVEN)), - framework::dataset::make("Src0QInfo", { QuantizationInfo(1.f / 32768.f, 0) })), - framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 32768.f, 0) })), - framework::dataset::make("OutQInfo", { QuantizationInfo(5.f / 32768.f, 0) }))) + combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(datasets::LargeShapes(), + framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), + framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), + framework::dataset::make("DataTypeOut", DataType::QSYMM16)), + framework::dataset::make("Scale", { 1.f, 2.f })), + framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })), + framework::dataset::make("RoundingPolicy", RoundingPolicy::TO_NEAREST_EVEN)), + framework::dataset::make("Src0QInfo", { QuantizationInfo(1.f / 32768.f, 0) })), + framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 32768.f, 0) })), + framework::dataset::make("OutQInfo", { QuantizationInfo(5.f / 32768.f, 0) })), + InPlaceDataSet)) { // Validate output validate(CLAccessor(_target), _reference, tolerance_qsymm16); @@ -211,16 +220,17 @@ FIXTURE_DATA_TEST_CASE(RunLarge, CLPixelWiseMultiplicationQuantizedFixture(TOLERANCE), 0.f); #define WRAP_VALIDATE(TYPE, TOLERANCE) validate_wrap(Accessor(_target), _reference, AbsoluteTolerance(TOLERANCE), 0.f); // *INDENT-OFF* // clang-format off -#define PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, SHAPES, DT1, DT2, SCALE, RP, VALIDATE) \ +#define PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, SHAPES, DT1, DT2, SCALE, RP, INPLACE_DATASET, VALIDATE) \ FIXTURE_DATA_TEST_CASE(TEST_NAME, NEPixelWiseMultiplication##FIXTURE, framework::DatasetMode::MODE, \ - combine(combine(combine(combine(combine( \ + combine(combine(combine(combine(combine(combine( \ datasets::SHAPES, \ framework::dataset::make("DataType1", DataType::DT1)), \ framework::dataset::make("DataType2", DataType::DT2)), \ framework::dataset::make("Scale", std::move(SCALE))), \ datasets::ConvertPolicies()), \ - framework::dataset::make("RoundingPolicy", RoundingPolicy::RP))) \ + framework::dataset::make("RoundingPolicy", RoundingPolicy::RP)), \ + (INPLACE_DATASET))) \ { \ VALIDATE \ } @@ -188,16 +202,69 @@ DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip( // clang-format on // *INDENT-ON* +TEST_SUITE(InPlaceValidate) +TEST_CASE(SingleTensor, framework::DatasetMode::ALL) +{ + const auto random_shape = TensorShape{ 9, 9 }; + const auto single_tensor_info = TensorInfo{ random_shape, 1, DataType::F32 }; + + Status result = NEPixelWiseMultiplication::validate(&single_tensor_info, &single_tensor_info, &single_tensor_info, scale_unity, ConvertPolicy::WRAP, RoundingPolicy::TO_ZERO); + ARM_COMPUTE_EXPECT(bool(result) == true, framework::LogLevel::ERRORS); +} + +TEST_CASE(ValidBroadCast, framework::DatasetMode::ALL) +{ + const auto larger_shape = TensorShape{ 27U, 13U, 2U }; + const auto smaller_shape = TensorShape{ 1U, 13U, 2U }; + + const auto larger_tensor_info = TensorInfo{ larger_shape, 1, DataType::F32 }; + const auto smaller_tensor_info = TensorInfo{ smaller_shape, 1, DataType::F32 }; + + Status result = NEPixelWiseMultiplication::validate(&larger_tensor_info, &smaller_tensor_info, &larger_tensor_info, scale_unity, ConvertPolicy::WRAP, RoundingPolicy::TO_ZERO); + ARM_COMPUTE_EXPECT(bool(result) == true, framework::LogLevel::ERRORS); +} + +TEST_CASE(InvalidBroadcastOutput, framework::DatasetMode::ALL) +{ + const auto larger_shape = TensorShape{ 27U, 13U, 2U }; + const auto smaller_shape = TensorShape{ 1U, 13U, 2U }; + + const auto larger_tensor_info = TensorInfo{ larger_shape, 1, DataType::F32 }; + const auto smaller_tensor_info = TensorInfo{ smaller_shape, 1, DataType::F32 }; + + Status result = NEPixelWiseMultiplication::validate(&larger_tensor_info, &smaller_tensor_info, &smaller_tensor_info, scale_unity, ConvertPolicy::WRAP, RoundingPolicy::TO_ZERO); + ARM_COMPUTE_EXPECT(bool(result) == false, framework::LogLevel::ERRORS); +} + +TEST_CASE(InvalidBroadcastBoth, framework::DatasetMode::ALL) +{ + const auto shape0 = TensorShape{ 9U, 9U }; + const auto shape1 = TensorShape{ 9U, 1U, 2U }; + + const auto info0 = TensorInfo{ shape0, 1, DataType::F32 }; + const auto info1 = TensorInfo{ shape1, 1, DataType::F32 }; + + Status result{}; + + result = NEPixelWiseMultiplication::validate(&info0, &info1, &info0, scale_unity, ConvertPolicy::WRAP, RoundingPolicy::TO_ZERO); + ARM_COMPUTE_EXPECT(bool(result) == false, framework::LogLevel::ERRORS); + + result = NEPixelWiseMultiplication::validate(&info0, &info1, &info1, scale_unity, ConvertPolicy::WRAP, RoundingPolicy::TO_ZERO); + ARM_COMPUTE_EXPECT(bool(result) == false, framework::LogLevel::ERRORS); +} +TEST_SUITE_END() // InPlaceValidate + TEST_SUITE(Quantized) TEST_SUITE(QASYMM8_SIGNED) TEST_SUITE(Scale255) -FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8SignedFixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8_SIGNED)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8_SIGNED)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8_SIGNED)), - framework::dataset::make("Scale", { scale_unity })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQASYMM8QuantDataset)) +FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8SignedFixture, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QASYMM8_SIGNED)), + framework::dataset::make("DataTypeIn2", DataType::QASYMM8_SIGNED)), + framework::dataset::make("DataTypeOut", DataType::QASYMM8_SIGNED)), + framework::dataset::make("Scale", { scale_unity })), + PixelWiseMultiplicationPolicySTZDataset), + PixelWiseMultiplicationQASYMM8QuantDataset), + InPlaceDataSet)) { // Validate output validate(Accessor(_target), _reference, tolerance_qasymm8); @@ -207,72 +274,42 @@ TEST_SUITE_END() // QASYMM8 TEST_SUITE(QASYMM8) TEST_SUITE(Scale255) -FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8)), - framework::dataset::make("Scale", { scale_255 })), - PixelWiseMultiplicationPolicySTNUDataset), - PixelWiseMultiplicationQASYMM8QuantDataset)) -{ - // Validate output - validate(Accessor(_target), _reference, tolerance_qasymm8); -} -FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8)), - framework::dataset::make("Scale", { scale_255 })), - PixelWiseMultiplicationPolicySTNUDataset), - PixelWiseMultiplicationQASYMM8QuantDataset)) +FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), + framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), + framework::dataset::make("DataTypeOut", DataType::QASYMM8)), + framework::dataset::make("Scale", { scale_255 })), + PixelWiseMultiplicationPolicySTNUDataset), + PixelWiseMultiplicationQASYMM8QuantDataset), + InPlaceDataSet)) { // Validate output validate(Accessor(_target), _reference, tolerance_qasymm8); } TEST_SUITE_END() // Scale255 TEST_SUITE(ScaleUnity) -FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8)), - framework::dataset::make("Scale", { scale_unity })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQASYMM8QuantDataset)) -{ - // Validate output - validate(Accessor(_target), _reference, tolerance_qasymm8); -} -FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8)), - framework::dataset::make("Scale", { scale_unity })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQASYMM8QuantDataset)) +FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), + framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), + framework::dataset::make("DataTypeOut", DataType::QASYMM8)), + framework::dataset::make("Scale", { scale_unity })), + PixelWiseMultiplicationPolicySTZDataset), + PixelWiseMultiplicationQASYMM8QuantDataset), + InPlaceDataSet)) { // Validate output validate(Accessor(_target), _reference, tolerance_qasymm8); } TEST_SUITE_END() // ScaleUnity TEST_SUITE(ScaleOther) -FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8)), - framework::dataset::make("Scale", { scale_other })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQASYMM8QuantDataset)) -{ - // Validate output - validate(Accessor(_target), _reference, tolerance_qasymm8); -} -FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(), - framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), - framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), - framework::dataset::make("DataTypeOut", DataType::QASYMM8)), - framework::dataset::make("Scale", { scale_other })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQASYMM8QuantDataset)) +FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QASYMM8)), + framework::dataset::make("DataTypeIn2", DataType::QASYMM8)), + framework::dataset::make("DataTypeOut", DataType::QASYMM8)), + framework::dataset::make("Scale", { scale_other })), + PixelWiseMultiplicationPolicySTZDataset), + PixelWiseMultiplicationQASYMM8QuantDataset), + InPlaceDataSet)) { // Validate output validate(Accessor(_target), _reference, tolerance_qasymm8); @@ -281,72 +318,42 @@ TEST_SUITE_END() // ScaleOther TEST_SUITE_END() // QASYMM8 TEST_SUITE(QSYMM16) TEST_SUITE(Scale255) -FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::QSYMM16)), - framework::dataset::make("Scale", { scale_255 })), - PixelWiseMultiplicationPolicySTNUDataset), - PixelWiseMultiplicationQSYMM16QuantDataset)) -{ - // Validate output - validate(Accessor(_target), _reference, tolerance_qsymm16); -} -FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::QSYMM16)), - framework::dataset::make("Scale", { scale_255 })), - PixelWiseMultiplicationPolicySTNUDataset), - PixelWiseMultiplicationQSYMM16QuantDataset)) +FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), + framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), + framework::dataset::make("DataTypeOut", DataType::QSYMM16)), + framework::dataset::make("Scale", { scale_255 })), + PixelWiseMultiplicationPolicySTNUDataset), + PixelWiseMultiplicationQSYMM16QuantDataset), + InPlaceDataSet)) { // Validate output validate(Accessor(_target), _reference, tolerance_qsymm16); } TEST_SUITE_END() // Scale255 TEST_SUITE(ScaleUnity) -FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::QSYMM16)), - framework::dataset::make("Scale", { scale_unity })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQSYMM16QuantDataset)) -{ - // Validate output - validate(Accessor(_target), _reference, tolerance_qsymm16); -} -FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::QSYMM16)), - framework::dataset::make("Scale", { scale_unity })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQSYMM16QuantDataset)) +FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), + framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), + framework::dataset::make("DataTypeOut", DataType::QSYMM16)), + framework::dataset::make("Scale", { scale_unity })), + PixelWiseMultiplicationPolicySTZDataset), + PixelWiseMultiplicationQSYMM16QuantDataset), + InPlaceDataSet)) { // Validate output validate(Accessor(_target), _reference, tolerance_qsymm16); } TEST_SUITE_END() // ScaleUnity TEST_SUITE(ScaleOther) -FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::QSYMM16)), - framework::dataset::make("Scale", { scale_other })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQSYMM16QuantDataset)) -{ - // Validate output - validate(Accessor(_target), _reference, tolerance_qsymm16); -} -FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::QSYMM16)), - framework::dataset::make("Scale", { scale_other })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQSYMM16QuantDataset)) +FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), + framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), + framework::dataset::make("DataTypeOut", DataType::QSYMM16)), + framework::dataset::make("Scale", { scale_other })), + PixelWiseMultiplicationPolicySTZDataset), + PixelWiseMultiplicationQSYMM16QuantDataset), + InPlaceDataSet)) { // Validate output validate(Accessor(_target), _reference, tolerance_qsymm16); @@ -354,13 +361,14 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQSYMM16Fixture, framew TEST_SUITE_END() // ScaleOther TEST_SUITE_END() // QSYMM16 TEST_SUITE(QSYMM16toS32) -FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16ToS32Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), - framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), - framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), - framework::dataset::make("DataTypeOut", DataType::S32)), - framework::dataset::make("Scale", { scale_unity })), - PixelWiseMultiplicationPolicySTZDataset), - PixelWiseMultiplicationQSYMM16QuantDataset)) +FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16ToS32Fixture, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallShapes(), + framework::dataset::make("DataTypeIn1", DataType::QSYMM16)), + framework::dataset::make("DataTypeIn2", DataType::QSYMM16)), + framework::dataset::make("DataTypeOut", DataType::S32)), + framework::dataset::make("Scale", { scale_unity })), + PixelWiseMultiplicationPolicySTZDataset), + PixelWiseMultiplicationQSYMM16QuantDataset), + framework::dataset::make("InPlace", { false }))) { // Validate output validate(Accessor(_target), _reference); @@ -371,18 +379,15 @@ TEST_SUITE_END() // Quantized TEST_SUITE(U8toU8) TEST_SUITE(Scale255) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture, PRECOMMIT, SmallShapes(), U8, U8, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(uint8_t, 1)) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToU8Fixture, NIGHTLY, LargeShapes(), U8, U8, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(uint8_t, 1)) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture, ALL, SmallShapes(), U8, U8, scale_255, TO_NEAREST_UP, InPlaceDataSet, WRAP_VALIDATE(uint8_t, 1)) TEST_SUITE_END() // Scale255 TEST_SUITE(ScaleUnity) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture, PRECOMMIT, SmallShapes(), U8, U8, scale_unity, TO_ZERO, DEFAULT_VALIDATE) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToU8Fixture, NIGHTLY, LargeShapes(), U8, U8, scale_unity, TO_ZERO, DEFAULT_VALIDATE) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture, ALL, SmallShapes(), U8, U8, scale_unity, TO_ZERO, InPlaceDataSet, DEFAULT_VALIDATE) TEST_SUITE_END() // ScaleUnity TEST_SUITE(ScaleOther) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture, PRECOMMIT, SmallShapes(), U8, U8, scale_other, TO_ZERO, DEFAULT_VALIDATE) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToU8Fixture, NIGHTLY, LargeShapes(), U8, U8, scale_other, TO_ZERO, DEFAULT_VALIDATE) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture, ALL, SmallShapes(), U8, U8, scale_other, TO_ZERO, InPlaceDataSet, DEFAULT_VALIDATE) TEST_SUITE_END() // ScaleOther TEST_SUITE_END() // U8toU8 @@ -390,18 +395,16 @@ TEST_SUITE_END() // U8toU8 TEST_SUITE(U8toS16) TEST_SUITE(Scale255) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, PRECOMMIT, SmallShapes(), U8, S16, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(int16_t, 2)) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture, NIGHTLY, LargeShapes(), U8, S16, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(int16_t, 2)) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, ALL, SmallShapes(), U8, S16, scale_255, TO_NEAREST_UP, framework::dataset::make("InPlace", { false }), + WRAP_VALIDATE(int16_t, 2)) TEST_SUITE_END() // Scale255 TEST_SUITE(ScaleUnity) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, PRECOMMIT, SmallShapes(), U8, S16, scale_unity, TO_ZERO, DEFAULT_VALIDATE) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture, NIGHTLY, LargeShapes(), U8, S16, scale_unity, TO_ZERO, DEFAULT_VALIDATE) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, ALL, SmallShapes(), U8, S16, scale_unity, TO_ZERO, framework::dataset::make("InPlace", { false }), DEFAULT_VALIDATE) TEST_SUITE_END() // ScaleUnity TEST_SUITE(ScaleOther) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, PRECOMMIT, SmallShapes(), U8, S16, scale_other, TO_ZERO, DEFAULT_VALIDATE) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture, NIGHTLY, LargeShapes(), U8, S16, scale_other, TO_ZERO, DEFAULT_VALIDATE) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, ALL, SmallShapes(), U8, S16, scale_other, TO_ZERO, framework::dataset::make("InPlace", { false }), DEFAULT_VALIDATE) TEST_SUITE_END() // ScaleOther TEST_SUITE_END() // U8toS16 @@ -409,18 +412,15 @@ TEST_SUITE_END() // U8toS16 TEST_SUITE(S16toS16) TEST_SUITE(Scale255) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, PRECOMMIT, SmallShapes(), S16, S16, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(int16_t, 2)) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture, NIGHTLY, LargeShapes(), S16, S16, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(int16_t, 2)) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, ALL, SmallShapes(), S16, S16, scale_255, TO_NEAREST_UP, InPlaceDataSet, WRAP_VALIDATE(int16_t, 2)) TEST_SUITE_END() // Scale255 TEST_SUITE(ScaleUnity) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, PRECOMMIT, SmallShapes(), S16, S16, scale_unity, TO_ZERO, DEFAULT_VALIDATE) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture, NIGHTLY, LargeShapes(), S16, S16, scale_unity, TO_ZERO, DEFAULT_VALIDATE) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, ALL, SmallShapes(), S16, S16, scale_unity, TO_ZERO, InPlaceDataSet, DEFAULT_VALIDATE) TEST_SUITE_END() // ScaleUnity TEST_SUITE(ScaleOther) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, PRECOMMIT, SmallShapes(), S16, S16, scale_other, TO_ZERO, DEFAULT_VALIDATE) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture, NIGHTLY, LargeShapes(), S16, S16, scale_other, TO_ZERO, DEFAULT_VALIDATE) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture, ALL, SmallShapes(), S16, S16, scale_other, TO_ZERO, InPlaceDataSet, DEFAULT_VALIDATE) TEST_SUITE_END() // ScaleOther TEST_SUITE_END() // S16toS16 @@ -429,7 +429,7 @@ TEST_SUITE_END() // S16toS16 TEST_SUITE(F16toF16) TEST_SUITE(Scale255) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF16Fixture, PRECOMMIT, SmallShapes(), F16, F16, scale_255, TO_NEAREST_UP, VALIDATE(float, 1.f)) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF16Fixture, ALL, SmallShapes(), F16, F16, scale_255, TO_NEAREST_UP, InPlaceDataSet, VALIDATE(float, 1.f)) TEST_SUITE_END() // Scale255 TEST_SUITE_END() // F16toF16 @@ -438,24 +438,22 @@ TEST_SUITE_END() // F16toF16 TEST_SUITE(F32toF32) TEST_SUITE(Scale255) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture, PRECOMMIT, SmallShapes(), F32, F32, scale_255, TO_NEAREST_UP, VALIDATE(float, 1.f)) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToF32Fixture, NIGHTLY, LargeShapes(), F32, F32, scale_255, TO_NEAREST_UP, VALIDATE(float, 1.f)) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture, ALL, SmallShapes(), F32, F32, scale_255, TO_NEAREST_UP, InPlaceDataSet, VALIDATE(float, 1.f)) TEST_SUITE_END() // Scale255 TEST_SUITE(ScaleUnity) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture, PRECOMMIT, SmallShapes(), F32, F32, scale_unity, TO_ZERO, DEFAULT_VALIDATE) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToF32Fixture, NIGHTLY, LargeShapes(), F32, F32, scale_unity, TO_ZERO, DEFAULT_VALIDATE) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture, ALL, SmallShapes(), F32, F32, scale_unity, TO_ZERO, InPlaceDataSet, DEFAULT_VALIDATE) TEST_SUITE_END() // ScaleUnity TEST_SUITE(ScaleOther) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture, PRECOMMIT, SmallShapes(), F32, F32, scale_other, TO_ZERO, DEFAULT_VALIDATE) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToF32Fixture, NIGHTLY, LargeShapes(), F32, F32, scale_other, TO_ZERO, DEFAULT_VALIDATE) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture, ALL, SmallShapes(), F32, F32, scale_other, TO_ZERO, InPlaceDataSet, DEFAULT_VALIDATE) TEST_SUITE_END() // ScaleOther TEST_SUITE_END() // F32toF32 TEST_SUITE(Broadcast) -PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, BroadcastFixture, PRECOMMIT, SmallShapesBroadcast(), F32, F32, scale_255, TO_NEAREST_UP, VALIDATE(float, 1.f)) +PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, BroadcastFixture, ALL, SmallShapesBroadcast(), F32, F32, scale_255, TO_NEAREST_UP, framework::dataset::make("InPlace", { false }), + VALIDATE(float, 1.f)) TEST_SUITE_END() // Broadcast TEST_SUITE_END() diff --git a/tests/validation/fixtures/PixelWiseMultiplicationFixture.h b/tests/validation/fixtures/PixelWiseMultiplicationFixture.h index f561a37a71..584ca50ce1 100644 --- a/tests/validation/fixtures/PixelWiseMultiplicationFixture.h +++ b/tests/validation/fixtures/PixelWiseMultiplicationFixture.h @@ -56,10 +56,12 @@ public: QuantizationInfo qinfo0, QuantizationInfo qinfo1, QuantizationInfo qinfo_out, - ActivationLayerInfo act_info) + ActivationLayerInfo act_info, + bool is_inplace) { - _target = compute_target(shape0, shape1, dt_in1, dt_in2, dt_out, scale, convert_policy, rounding_policy, qinfo0, qinfo1, qinfo_out, act_info); - _reference = compute_reference(shape0, shape1, dt_in1, dt_in2, dt_out, scale, convert_policy, rounding_policy, qinfo0, qinfo1, qinfo_out, act_info); + _is_inplace = is_inplace; + _target = compute_target(shape0, shape1, dt_in1, dt_in2, dt_out, scale, convert_policy, rounding_policy, qinfo0, qinfo1, qinfo_out, act_info); + _reference = compute_reference(shape0, shape1, dt_in1, dt_in2, dt_out, scale, convert_policy, rounding_policy, qinfo0, qinfo1, qinfo_out, act_info); } protected: @@ -78,22 +80,24 @@ protected: TensorType src2 = create_tensor(shape1, dt_in2, 1, qinfo1); TensorType dst = create_tensor(TensorShape::broadcast_shape(shape0, shape1), dt_out, 1, qinfo_out); + auto allocate_tensor = [this](TensorType & t) + { + ARM_COMPUTE_EXPECT(t.info()->is_resizable(), framework::LogLevel::ERRORS); + t.allocator()->allocate(); + ARM_COMPUTE_EXPECT(!t.info()->is_resizable(), framework::LogLevel::ERRORS); + }; + // Create and configure function FunctionType multiply; - multiply.configure(&src1, &src2, &dst, scale, convert_policy, rounding_policy, act_info); - - ARM_COMPUTE_EXPECT(src1.info()->is_resizable(), framework::LogLevel::ERRORS); - ARM_COMPUTE_EXPECT(src2.info()->is_resizable(), framework::LogLevel::ERRORS); - ARM_COMPUTE_EXPECT(dst.info()->is_resizable(), framework::LogLevel::ERRORS); + multiply.configure(&src1, &src2, (_is_inplace ? &src1 : &dst), scale, convert_policy, rounding_policy, act_info); - // Allocate tensors - src1.allocator()->allocate(); - src2.allocator()->allocate(); - dst.allocator()->allocate(); + allocate_tensor(src1); + allocate_tensor(src2); - ARM_COMPUTE_EXPECT(!src1.info()->is_resizable(), framework::LogLevel::ERRORS); - ARM_COMPUTE_EXPECT(!src2.info()->is_resizable(), framework::LogLevel::ERRORS); - ARM_COMPUTE_EXPECT(!dst.info()->is_resizable(), framework::LogLevel::ERRORS); + if(!_is_inplace) + { + allocate_tensor(dst); + } // Fill tensors fill(AccessorType(src1), 0); @@ -102,6 +106,11 @@ protected: // Compute function multiply.run(); + if(_is_inplace) + { + return src1; + } + return dst; } @@ -113,16 +122,21 @@ protected: SimpleTensor src1{ shape0, dt_in1, 1, qinfo0 }; SimpleTensor src2{ shape1, dt_in2, 1, qinfo1 }; + // current in-place implementation only supports same metadata of input and output tensors. + // By ignoring output quantization information here, we can make test cases implementation much simpler. + QuantizationInfo output_qinfo = _is_inplace ? qinfo0 : qinfo_out; + // Fill reference fill(src1, 0); fill(src2, 1); - auto result = reference::pixel_wise_multiplication(src1, src2, scale, convert_policy, rounding_policy, dt_out, qinfo_out); - return act_info.enabled() ? reference::activation_layer(result, act_info, qinfo_out) : result; + auto result = reference::pixel_wise_multiplication(src1, src2, scale, convert_policy, rounding_policy, dt_out, output_qinfo); + return act_info.enabled() ? reference::activation_layer(result, act_info, output_qinfo) : result; } TensorType _target{}; SimpleTensor _reference{}; + bool _is_inplace{ false }; }; template @@ -130,10 +144,10 @@ class PixelWiseMultiplicationValidationFixture : public PixelWiseMultiplicationG { public: template - void setup(const TensorShape &shape, DataType dt_in1, DataType dt_in2, float scale, ConvertPolicy convert_policy, RoundingPolicy rounding_policy) + void setup(const TensorShape &shape, DataType dt_in1, DataType dt_in2, float scale, ConvertPolicy convert_policy, RoundingPolicy rounding_policy, bool is_inplace) { PixelWiseMultiplicationGenericValidationFixture::setup(shape, shape, dt_in1, dt_in2, dt_in2, scale, convert_policy, rounding_policy, - QuantizationInfo(), QuantizationInfo(), QuantizationInfo(), ActivationLayerInfo()); + QuantizationInfo(), QuantizationInfo(), QuantizationInfo(), ActivationLayerInfo(), is_inplace); } }; @@ -142,10 +156,10 @@ class PixelWiseMultiplicationBroadcastValidationFixture : public PixelWiseMultip { public: template - void setup(const TensorShape &shape0, const TensorShape &shape1, DataType dt_in1, DataType dt_in2, float scale, ConvertPolicy convert_policy, RoundingPolicy rounding_policy) + void setup(const TensorShape &shape0, const TensorShape &shape1, DataType dt_in1, DataType dt_in2, float scale, ConvertPolicy convert_policy, RoundingPolicy rounding_policy, bool is_inplace) { PixelWiseMultiplicationGenericValidationFixture::setup(shape0, shape1, dt_in1, dt_in2, dt_in2, scale, convert_policy, rounding_policy, - QuantizationInfo(), QuantizationInfo(), QuantizationInfo(), ActivationLayerInfo()); + QuantizationInfo(), QuantizationInfo(), QuantizationInfo(), ActivationLayerInfo(), is_inplace); } }; @@ -154,10 +168,10 @@ class PixelWiseMultiplicationValidationFloatFixture : public PixelWiseMultiplica { public: template - void setup(const TensorShape &shape, DataType dt_in1, DataType dt_in2, float scale, ConvertPolicy convert_policy, RoundingPolicy rounding_policy, ActivationLayerInfo act_info) + void setup(const TensorShape &shape, DataType dt_in1, DataType dt_in2, float scale, ConvertPolicy convert_policy, RoundingPolicy rounding_policy, ActivationLayerInfo act_info, bool is_inplace) { PixelWiseMultiplicationGenericValidationFixture::setup(shape, shape, dt_in1, dt_in2, dt_in2, scale, convert_policy, rounding_policy, - QuantizationInfo(), QuantizationInfo(), QuantizationInfo(), act_info); + QuantizationInfo(), QuantizationInfo(), QuantizationInfo(), act_info, is_inplace); } }; @@ -167,10 +181,10 @@ class PixelWiseMultiplicationBroadcastValidationFloatFixture : public PixelWiseM public: template void setup(const TensorShape &shape0, const TensorShape &shape1, DataType dt_in1, DataType dt_in2, float scale, ConvertPolicy convert_policy, RoundingPolicy rounding_policy, - ActivationLayerInfo act_info) + ActivationLayerInfo act_info, bool is_inplace) { PixelWiseMultiplicationGenericValidationFixture::setup(shape0, shape1, dt_in1, dt_in2, dt_in2, scale, convert_policy, rounding_policy, - QuantizationInfo(), QuantizationInfo(), QuantizationInfo(), act_info); + QuantizationInfo(), QuantizationInfo(), QuantizationInfo(), act_info, is_inplace); } }; @@ -180,10 +194,10 @@ class PixelWiseMultiplicationValidationQuantizedFixture : public PixelWiseMultip public: template void setup(const TensorShape &shape, DataType dt_in1, DataType dt_in2, DataType dt_out, float scale, ConvertPolicy convert_policy, RoundingPolicy rounding_policy, - QuantizationInfo qinfo0, QuantizationInfo qinfo1, QuantizationInfo qinfo_out) + QuantizationInfo qinfo0, QuantizationInfo qinfo1, QuantizationInfo qinfo_out, bool is_inplace) { PixelWiseMultiplicationGenericValidationFixture::setup(shape, shape, dt_in1, dt_in2, dt_out, scale, convert_policy, rounding_policy, - qinfo0, qinfo1, qinfo_out, ActivationLayerInfo()); + qinfo0, qinfo1, qinfo_out, ActivationLayerInfo(), is_inplace); } }; } // namespace validation -- cgit v1.2.1