aboutsummaryrefslogtreecommitdiff
path: root/src/backends/gpuFsa/layers
diff options
context:
space:
mode:
authorDeclan-ARM <decmce01@arm.com>2024-02-07 13:07:31 +0000
committerTeresaARM <teresa.charlinreyes@arm.com>2024-02-09 14:01:11 +0000
commit5e90b831fc31605b5734531387837123fb31d0e0 (patch)
treec75cedfaa5f6170262eb3dfcea6e0522d89e3433 /src/backends/gpuFsa/layers
parentddbda6a1ed13f7bef7e0dce07a37e91b062ce98a (diff)
downloadarmnn-5e90b831fc31605b5734531387837123fb31d0e0.tar.gz
IVGCVSW-7569 GpuFsa Op: Add Reshape Operator
* Add Reshape EndToEnd tests to all backends Signed-off-by: Declan-ARM <decmce01@arm.com> Change-Id: Ic6d07ba8de0cf3271ed0e4c6d604e070ccb968e3
Diffstat (limited to 'src/backends/gpuFsa/layers')
-rw-r--r--src/backends/gpuFsa/layers/CMakeLists.txt2
-rw-r--r--src/backends/gpuFsa/layers/GpuFsaReshape.cpp78
-rw-r--r--src/backends/gpuFsa/layers/GpuFsaReshape.hpp21
3 files changed, 101 insertions, 0 deletions
diff --git a/src/backends/gpuFsa/layers/CMakeLists.txt b/src/backends/gpuFsa/layers/CMakeLists.txt
index 38d551140b..b3e8d6a2a0 100644
--- a/src/backends/gpuFsa/layers/CMakeLists.txt
+++ b/src/backends/gpuFsa/layers/CMakeLists.txt
@@ -18,6 +18,8 @@ list(APPEND armnnGpuFsaBackendLayers_sources
GpuFsaElementwiseBinary.hpp
GpuFsaPooling2d.cpp
GpuFsaPooling2d.hpp
+ GpuFsaReshape.cpp
+ GpuFsaReshape.hpp
GpuFsaResize.cpp
GpuFsaResize.hpp
GpuFsaSoftmax.cpp
diff --git a/src/backends/gpuFsa/layers/GpuFsaReshape.cpp b/src/backends/gpuFsa/layers/GpuFsaReshape.cpp
new file mode 100644
index 0000000000..47d4e42838
--- /dev/null
+++ b/src/backends/gpuFsa/layers/GpuFsaReshape.cpp
@@ -0,0 +1,78 @@
+//
+// Copyright © 2024 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "GpuFsaReshape.hpp"
+
+#include <aclCommon/ArmComputeTensorUtils.hpp>
+
+#include <arm_compute/dynamic_fusion/sketch/gpu/operators/GpuReshape.h>
+#include <arm_compute/dynamic_fusion/sketch/gpu/operators/GpuOutput.h>
+#include <arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadContext.h>
+#include <arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h>
+
+using namespace arm_compute::experimental::dynamic_fusion;
+
+namespace armnn
+{
+
+using namespace armcomputetensorutils;
+
+arm_compute::Status GpuFsaReshapeValidate(const TensorInfo& input, const ReshapeDescriptor& descriptor)
+{
+ auto compileContext = arm_compute::CLKernelLibrary::get().get_compile_context();
+ auto workloadContext = GpuWorkloadContext(&compileContext);
+
+ GpuWorkloadSketch sketch(&workloadContext);
+
+ arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());
+ aclInputInfo.set_are_values_constant(input.IsConstant());
+
+ arm_compute::ITensorInfo* inputInfo = workloadContext.create_tensor_info(aclInputInfo);
+
+ ReshapeAttributes attributes;
+ attributes.shape(BuildArmComputeTensorShape(descriptor.m_TargetShape));
+
+ arm_compute::Status aclStatus = GpuReshape::validate_op(sketch, inputInfo, attributes);
+
+#ifndef NDEBUG
+ if (aclStatus.error_code() != arm_compute::ErrorCode::OK)
+ {
+ std::cout << "GpuFsaReshapeValidate failed: " << aclStatus.error_description() << std::endl;
+ }
+#endif
+
+ return aclStatus;
+}
+
+void GpuFsaReshapeCreateOp(GpuFsaPreCompiledBlob* blob, const TensorInfo& input, const ReshapeDescriptor& descriptor)
+{
+ GpuWorkloadSketch* sketch = blob->sketch.get();
+ GpuWorkloadContext* workloadContext = blob->workloadContext.get();
+
+ std::vector<arm_compute::ITensorInfo*> inputTensorInfos;
+ std::vector<arm_compute::ITensorInfo*> outputTensorInfos;
+
+ arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, input.GetNumDimensions());
+
+ aclInputInfo.set_are_values_constant(input.IsConstant());
+
+ inputTensorInfos.emplace_back(workloadContext->create_tensor_info(aclInputInfo));
+
+ ReshapeAttributes attributes;
+ attributes.shape(BuildArmComputeTensorShape(descriptor.m_TargetShape));
+
+ arm_compute::ITensorInfo* addOutputInfo = GpuReshape::create_op(*sketch, inputTensorInfos[0], attributes);
+
+ // Temporary fix until fusing attempt is made for GpuFsa backend and outputLayer workoad is created
+ outputTensorInfos.emplace_back(workloadContext->create_tensor_info());
+ GpuOutput::create_op(*sketch, addOutputInfo, outputTensorInfos[0]);
+
+ // Store the tensorInfos within the blob as std::unique_ptr<> so they can be used later
+ blob->inputTensorInfos = std::make_unique<std::vector<arm_compute::ITensorInfo*>>(inputTensorInfos);
+ blob->outputTensorInfos = std::make_unique<std::vector<arm_compute::ITensorInfo*>>(outputTensorInfos);
+}
+
+} // namespace armnn
+
diff --git a/src/backends/gpuFsa/layers/GpuFsaReshape.hpp b/src/backends/gpuFsa/layers/GpuFsaReshape.hpp
new file mode 100644
index 0000000000..16fa1f975e
--- /dev/null
+++ b/src/backends/gpuFsa/layers/GpuFsaReshape.hpp
@@ -0,0 +1,21 @@
+//
+// Copyright © 2024 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/Descriptors.hpp>
+#include <gpuFsa/GpuFsaBackend.hpp>
+
+namespace armnn
+{
+
+arm_compute::Status GpuFsaReshapeValidate(const TensorInfo& input, const ReshapeDescriptor& descriptor);
+
+void GpuFsaReshapeCreateOp(GpuFsaPreCompiledBlob* blob,
+ const TensorInfo& input,
+ const ReshapeDescriptor& descriptor);
+
+} // namespace armnn
+