From f1addb665ad668dcd34e18c52e4961a7cf5e3886 Mon Sep 17 00:00:00 2001 From: Michalis Spyrou Date: Tue, 11 Sep 2018 11:16:47 +0100 Subject: COMPMID-1549 Implementing Batch to Space on OpenCL - NHWC Change-Id: If7ae0a8b6255a10711365068d9fb153c71f09818 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/147751 Tested-by: bsgcomp Reviewed-by: Georgios Pinitas --- .../validation/fixtures/BatchToSpaceLayerFixture.h | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'tests/validation/fixtures') diff --git a/tests/validation/fixtures/BatchToSpaceLayerFixture.h b/tests/validation/fixtures/BatchToSpaceLayerFixture.h index f124fecb9d..973f2ed27b 100644 --- a/tests/validation/fixtures/BatchToSpaceLayerFixture.h +++ b/tests/validation/fixtures/BatchToSpaceLayerFixture.h @@ -40,9 +40,9 @@ class BatchToSpaceLayerValidationFixture : public framework::Fixture { public: template - void setup(TensorShape input_shape, TensorShape block_shape_shape, TensorShape output_shape, DataType data_type) + void setup(TensorShape input_shape, TensorShape block_shape_shape, TensorShape output_shape, DataType data_type, DataLayout data_layout) { - _target = compute_target(input_shape, block_shape_shape, output_shape, data_type); + _target = compute_target(input_shape, block_shape_shape, output_shape, data_type, data_layout); _reference = compute_reference(input_shape, block_shape_shape, output_shape, data_type); } @@ -53,13 +53,19 @@ protected: std::uniform_real_distribution<> distribution(-1.0f, 1.0f); library->fill(tensor, distribution, i); } - TensorType compute_target(const TensorShape &input_shape, const TensorShape &block_shape_shape, const TensorShape &output_shape, - DataType data_type) + TensorType compute_target(TensorShape input_shape, TensorShape block_shape_shape, TensorShape output_shape, + DataType data_type, DataLayout data_layout) { + if(data_layout == DataLayout::NHWC) + { + permute(input_shape, PermutationVector(2U, 0U, 1U)); + permute(output_shape, PermutationVector(2U, 0U, 1U)); + } + // Create tensors - TensorType input = create_tensor(input_shape, data_type); + TensorType input = create_tensor(input_shape, data_type, 1, QuantizationInfo(), data_layout); TensorType block_shape = create_tensor(block_shape_shape, DataType::S32); - TensorType output = create_tensor(output_shape, data_type); + TensorType output = create_tensor(output_shape, data_type, 1, QuantizationInfo(), data_layout); // Create and configure function FunctionType batch_to_space; @@ -82,9 +88,10 @@ protected: fill(AccessorType(input), 0); { auto block_shape_data = AccessorType(block_shape); + const int idx_width = get_data_layout_dimension_index(data_layout, DataLayoutDimension::WIDTH); for(unsigned int i = 0; i < block_shape_shape.x(); ++i) { - static_cast(block_shape_data.data())[i] = output_shape[i] / input_shape[i]; + static_cast(block_shape_data.data())[i] = output_shape[i + idx_width] / input_shape[i + idx_width]; } } // Compute function -- cgit v1.2.1