From c11ba468017b8b06c5c0f83743575d34bad1dd3b Mon Sep 17 00:00:00 2001 From: David Monahan Date: Thu, 3 Dec 2020 11:09:46 +0000 Subject: IVGCVSW-4625 Add CL Rank Workload * Added CL implementation of Rank Workload * Removed references to memcpy_s as it's a windows only function Signed-off-by: David Monahan Change-Id: Ia63666b9640d76a775f2ab98b3cd7e9f77b5a507 --- src/backends/cl/workloads/CMakeLists.txt | 1 + src/backends/cl/workloads/ClRankWorkload.hpp | 30 +++++++++++++++++++++++++++ src/backends/cl/workloads/ClWorkloadUtils.hpp | 7 +++++++ src/backends/cl/workloads/ClWorkloads.hpp | 1 + 4 files changed, 39 insertions(+) create mode 100644 src/backends/cl/workloads/ClRankWorkload.hpp (limited to 'src/backends/cl/workloads') diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt index 6118d9bbe1..7427ea018d 100644 --- a/src/backends/cl/workloads/CMakeLists.txt +++ b/src/backends/cl/workloads/CMakeLists.txt @@ -86,6 +86,7 @@ list(APPEND armnnClBackendWorkloads_sources ClQuantizedLstmWorkload.hpp ClQuantizeWorkload.cpp ClQuantizeWorkload.hpp + ClRankWorkload.hpp ClReshapeWorkload.cpp ClReshapeWorkload.hpp ClResizeWorkload.cpp diff --git a/src/backends/cl/workloads/ClRankWorkload.hpp b/src/backends/cl/workloads/ClRankWorkload.hpp new file mode 100644 index 0000000000..0a7bccf6c6 --- /dev/null +++ b/src/backends/cl/workloads/ClRankWorkload.hpp @@ -0,0 +1,30 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include +#include + +#include "ClWorkloadUtils.hpp" + +namespace armnn +{ + +struct ClRankWorkload : public BaseWorkload +{ +public: + using BaseWorkload::BaseWorkload; + virtual void Execute() const override + { + const ClTensorHandle* clTensorHandle = PolymorphicDowncast(m_Data.m_Inputs[0]); + const int32_t rank = static_cast(clTensorHandle->GetShape().GetNumDimensions()); + + std::memcpy(GetOutputTensorData(0, m_Data), &rank, sizeof(int32_t)); + m_Data.m_Outputs[0]->Unmap(); + } +}; + +} //namespace armnn diff --git a/src/backends/cl/workloads/ClWorkloadUtils.hpp b/src/backends/cl/workloads/ClWorkloadUtils.hpp index 89f13a577a..b0cc8b4ed5 100644 --- a/src/backends/cl/workloads/ClWorkloadUtils.hpp +++ b/src/backends/cl/workloads/ClWorkloadUtils.hpp @@ -143,4 +143,11 @@ inline void RunClFunction(arm_compute::IFunction& function, const CheckLocation& } } +template +DataType* GetOutputTensorData(unsigned int idx, const PayloadType& data) +{ + ITensorHandle* tensorHandle = data.m_Outputs[idx]; + return reinterpret_cast(tensorHandle->Map()); +} + } //namespace armnn diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp index efcccb35c3..0045e7a77f 100644 --- a/src/backends/cl/workloads/ClWorkloads.hpp +++ b/src/backends/cl/workloads/ClWorkloads.hpp @@ -43,6 +43,7 @@ #include "ClQLstmWorkload.hpp" #include "ClQuantizeWorkload.hpp" #include "ClQuantizedLstmWorkload.hpp" +#include "ClRankWorkload.hpp" #include "ClReshapeWorkload.hpp" #include "ClResizeWorkload.hpp" #include "ClRsqrtWorkload.hpp" -- cgit v1.2.1