From d17a677a70d477ae508c084148ba6974fc38477d Mon Sep 17 00:00:00 2001 From: Isabella Gottardi Date: Tue, 27 Feb 2018 17:41:55 +0000 Subject: COMPMID-979: Add NHWC data layout to the tensor's metadata Change-Id: I89bdab7dc63a437eb7d60c0ae652c53c3875e503 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/122524 Tested-by: Jenkins Reviewed-by: Anthony Barbier Reviewed-by: Pablo Tello --- arm_compute/core/Helpers.inl | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'arm_compute/core/Helpers.inl') diff --git a/arm_compute/core/Helpers.inl b/arm_compute/core/Helpers.inl index 8b86c22676..ff85773abb 100644 --- a/arm_compute/core/Helpers.inl +++ b/arm_compute/core/Helpers.inl @@ -227,6 +227,7 @@ inline bool auto_init_if_empty(ITensorInfo &info_sink, const ITensorInfo &info_s info_sink.set_tensor_shape(info_source.tensor_shape()); info_sink.set_fixed_point_position(info_source.fixed_point_position()); info_sink.set_quantization_info(info_source.quantization_info()); + info_sink.set_data_layout(info_source.data_layout()); return true; } @@ -266,6 +267,17 @@ inline bool set_data_type_if_unknown(ITensorInfo &info, DataType data_type) return false; } +inline bool set_data_layout_if_unknown(ITensorInfo &info, DataLayout data_layout) +{ + if(info.data_layout() == DataLayout::UNKNOWN) + { + info.set_data_layout(data_layout); + return true; + } + + return false; +} + inline bool set_fixed_point_position_if_zero(ITensorInfo &info, int fixed_point_position) { if(info.fixed_point_position() == 0 && (info.data_type() == DataType::QS8 || info.data_type() == DataType::QS16)) @@ -357,4 +369,33 @@ inline int coords2index(const TensorShape &shape, const Coordinates &coord) return index; } + +inline int get_data_layout_dimension_index(const ITensorInfo &info, const DataLayoutDimension data_layout_dimension) +{ + ARM_COMPUTE_ERROR_ON_MSG(info.data_layout() == DataLayout::UNKNOWN, "Cannot retrieve the dimension index for an unknown layout!"); + + /* Return the index based on the data layout + * [N C H W] + * [3 2 1 0] + * [N H W C] + */ + switch(data_layout_dimension) + { + case DataLayoutDimension::CHANNEL: + return (info.data_layout() == DataLayout::NCHW) ? 2 : 0; + break; + case DataLayoutDimension::HEIGHT: + return (info.data_layout() == DataLayout::NCHW) ? 1 : 2; + break; + case DataLayoutDimension::WIDTH: + return (info.data_layout() == DataLayout::NCHW) ? 0 : 1; + break; + case DataLayoutDimension::BATCHES: + return 3; + break; + default: + ARM_COMPUTE_ERROR("Data layout index not supported!"); + break; + } +} } // namespace arm_compute -- cgit v1.2.1