aboutsummaryrefslogtreecommitdiff
path: root/tests/validation/reference
diff options
context:
space:
mode:
authorPablo Marquez Tello <pablo.tello@arm.com>2022-04-27 11:46:31 +0100
committerPablo Marquez Tello <pablo.tello@arm.com>2022-05-10 09:48:59 +0000
commit920f2b6c2070f6328891e26538e8bcad63e2a79c (patch)
treedfa769580dd15083c6690b7b4019ad23948f8f36 /tests/validation/reference
parent06adbc56e9c4a7947e6bc843da6687b3ff357de4 (diff)
downloadComputeLibrary-920f2b6c2070f6328891e26538e8bcad63e2a79c.tar.gz
Add support for 2d and 3d indices for axis 0
* Partially resolves COMPMID-5055 Change-Id: Id05374b8c69e6b9ab4c2790a4de93d7172063b71 Signed-off-by: Pablo Marquez Tello <pablo.tello@arm.com> Change-Id: Ic6e2c2d1d34abbf6222c8d56859514e267447266 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/7488 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Giorgio Arena <giorgio.arena@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'tests/validation/reference')
-rw-r--r--tests/validation/reference/Gather.cpp41
1 files changed, 29 insertions, 12 deletions
diff --git a/tests/validation/reference/Gather.cpp b/tests/validation/reference/Gather.cpp
index 93ac09cf95..02292fb74e 100644
--- a/tests/validation/reference/Gather.cpp
+++ b/tests/validation/reference/Gather.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2019 Arm Limited.
+ * Copyright (c) 2018-2019, 2022 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -45,22 +45,39 @@ SimpleTensor<T> gather(const SimpleTensor<T> &src, const SimpleTensor<uint32_t>
Window win;
win.use_tensor_dimensions(dst_shape);
- execute_window_loop(win, [&](const Coordinates & id)
+ if(indices.shape().num_dimensions() == 1u)
{
- Coordinates offset;
- for(unsigned int dim = 0; dim < id.num_dimensions(); ++dim)
+ execute_window_loop(win, [&](const Coordinates & id)
{
- if(dim == actual_axis)
+ Coordinates offset;
+ for(unsigned int dim = 0; dim < id.num_dimensions(); ++dim)
{
- offset.set(dim, indices_ptr[id[dim]]);
+ if(dim == actual_axis)
+ {
+ offset.set(dim, indices_ptr[id[dim]]);
+ }
+ else
+ {
+ offset.set(dim, id[dim]);
+ }
}
- else
+ *reinterpret_cast<T *>(dst(id)) = *reinterpret_cast<const T *>(src(offset));
+ });
+ }
+ else
+ {
+ if(actual_axis == 0)
+ {
+ win.set(Window::DimX, Window::Dimension(0, 1, 1));
+ uint32_t index = 0;
+ execute_window_loop(win, [&](const Coordinates & id)
{
- offset.set(dim, id[dim]);
- }
+ auto *dst_ptr = reinterpret_cast<T *>(dst(id));
+ const int row_to_copy = indices[index++];
+ std::copy_n(src.data() + row_to_copy * src.shape()[0], src.shape()[0], dst_ptr);
+ });
}
- *reinterpret_cast<T *>(dst(id)) = *reinterpret_cast<const T *>(src(offset));
- });
+ }
return dst;
}
@@ -72,4 +89,4 @@ template SimpleTensor<uint8_t> gather(const SimpleTensor<uint8_t> &src, const Si
} // namespace reference
} // namespace validation
} // namespace test
-} // namespace arm_compute \ No newline at end of file
+} // namespace arm_compute