aboutsummaryrefslogtreecommitdiff
path: root/tests/validation/CL/DirectConvolutionLayer.cpp
diff options
context:
space:
mode:
authorMichele Di Giorgio <michele.digiorgio@arm.com>2021-03-25 12:37:45 +0000
committerGeorgios Pinitas <georgios.pinitas@arm.com>2021-03-26 09:23:49 +0000
commit97e258000f99c6a5f872f4e8968eaf6a93de2cf7 (patch)
treed4bd44c1350823ec9b12918e45180b3c7e7fe66e /tests/validation/CL/DirectConvolutionLayer.cpp
parent40efd5365108b97fc8d6cb93fa1d572a08a93ad5 (diff)
downloadComputeLibrary-97e258000f99c6a5f872f4e8968eaf6a93de2cf7.tar.gz
Check biases pointer before referencing in CLDirectConvolutionLayer
The biases input can be nullptr, hence we need to check before referencing. A test is also added to ensure a successful configure and run of Direct Convolution when there is no bias. Resolves: COMPMID-4315 Change-Id: I23223efd6ced81215aff490221fb4606945c139b Signed-off-by: Michele Di Giorgio <michele.digiorgio@arm.com> Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5322 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: James Conroy <james.conroy@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'tests/validation/CL/DirectConvolutionLayer.cpp')
-rw-r--r--tests/validation/CL/DirectConvolutionLayer.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/validation/CL/DirectConvolutionLayer.cpp b/tests/validation/CL/DirectConvolutionLayer.cpp
index 4671d8c3ec..c01234020f 100644
--- a/tests/validation/CL/DirectConvolutionLayer.cpp
+++ b/tests/validation/CL/DirectConvolutionLayer.cpp
@@ -87,6 +87,49 @@ const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo
TEST_SUITE(CL)
TEST_SUITE(DirectConvolutionLayer)
+/** Check whether the configuration of a Direct Convolution layer with no
+ * bias leads to a successful execution.
+ */
+TEST_CASE(NoBias, framework::DatasetMode::PRECOMMIT)
+{
+ const auto src_shape = TensorShape(27U, 13U, 2U);
+ const auto weights_shape = TensorShape(3U, 3U, 2U, 4U);
+ const auto bias_shape = TensorShape(4U);
+ const auto dst_shape = TensorShape(25U, 11U, 4U);
+ constexpr auto dt = DataType::F32;
+
+ auto src = create_tensor<CLTensor>(src_shape, dt);
+ auto weights = create_tensor<CLTensor>(weights_shape, dt);
+ auto dst = create_tensor<CLTensor>(dst_shape, dt);
+
+ const auto conv_info = PadStrideInfo(1, 1, 0, 0);
+
+ // Create Direct Convolution function
+ CLDirectConvolutionLayer conv{};
+ conv.configure(&src, &weights, nullptr, &dst, conv_info);
+
+ src.allocator()->allocate();
+ weights.allocator()->allocate();
+ dst.allocator()->allocate();
+
+ library->fill_tensor_value(CLAccessor(src), 1.f);
+ library->fill_tensor_value(CLAccessor(weights), 1.f);
+
+ conv.run();
+
+ // Compute reference to compare
+ SimpleTensor<float> ref_src{ src_shape, dt };
+ SimpleTensor<float> ref_weights{ weights_shape, dt };
+ SimpleTensor<float> ref_bias{ bias_shape, dt };
+ library->fill_tensor_value(ref_src, 1.f);
+ library->fill_tensor_value(ref_weights, 1.f);
+ // No bias
+ library->fill_tensor_value(ref_bias, 0.f);
+ auto ref_dst = reference::convolution_layer<float>(ref_src, ref_weights, ref_bias, dst_shape, conv_info);
+
+ validate(CLAccessor(dst), ref_dst);
+}
+
// *INDENT-OFF*
// clang-format off
DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(