diff options
author | Kevin May <kevin.may@arm.com> | 2019-12-12 17:28:05 +0000 |
---|---|---|
committer | Jim Flynn Arm <jim.flynn@arm.com> | 2019-12-17 19:54:02 +0000 |
commit | 93e023b9917f695e4e18f8c6ae8c4e1c84ba3b37 (patch) | |
tree | c149b43b719ae3afd7e80a931c48ec1f92f2778a /src/backends/cl | |
parent | 664e4f2dd6a5f7053f41af1ee2d04a4e490f7b4c (diff) | |
download | armnn-93e023b9917f695e4e18f8c6ae8c4e1c84ba3b37.tar.gz |
IVGCVSW-4262 Use ACL Permute and Reshape Validate function in Neon and CL
!android-nn-driver:2487
Signed-off-by: Kevin May <kevin.may@arm.com>
Change-Id: Ibabb73c0ae0df2e530a68398f75c76e6b80c0701
Diffstat (limited to 'src/backends/cl')
-rw-r--r-- | src/backends/cl/ClLayerSupport.cpp | 10 | ||||
-rw-r--r-- | src/backends/cl/ClLayerSupport.hpp | 1 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClPermuteWorkload.cpp | 16 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClPermuteWorkload.hpp | 4 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClReshapeWorkload.cpp | 9 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClReshapeWorkload.hpp | 3 |
6 files changed, 28 insertions, 15 deletions
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index 7a1c573c0f..2998d293f9 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -45,6 +45,7 @@ #include "workloads/ClPermuteWorkload.hpp" #include "workloads/ClPooling2dWorkload.hpp" #include "workloads/ClPreluWorkload.hpp" +#include "workloads/ClReshapeWorkload.hpp" #include "workloads/ClResizeWorkload.hpp" #include "workloads/ClRsqrtWorkload.hpp" #include "workloads/ClQuantizedLstmWorkload.hpp" @@ -603,9 +604,7 @@ bool ClLayerSupport::IsPermuteSupported(const TensorInfo& input, const PermuteDescriptor& descriptor, Optional<std::string&> reasonIfUnsupported) const { - ignore_unused(input); - ignore_unused(output); - FORWARD_WORKLOAD_VALIDATE_FUNC(ClPermuteWorkloadValidate, reasonIfUnsupported, descriptor); + FORWARD_WORKLOAD_VALIDATE_FUNC(ClPermuteWorkloadValidate, reasonIfUnsupported, input, output, descriptor); } bool ClLayerSupport::IsPooling2dSupported(const TensorInfo& input, @@ -653,13 +652,12 @@ bool ClLayerSupport::IsQuantizeSupported(const TensorInfo& input, } bool ClLayerSupport::IsReshapeSupported(const TensorInfo& input, + const TensorInfo& output, const ReshapeDescriptor& descriptor, Optional<std::string&> reasonIfUnsupported) const { - ignore_unused(input); ignore_unused(descriptor); - ignore_unused(reasonIfUnsupported); - return true; + FORWARD_WORKLOAD_VALIDATE_FUNC(ClReshapeWorkloadValidate, reasonIfUnsupported, input, output); } bool ClLayerSupport::IsResizeSupported(const TensorInfo& input, diff --git a/src/backends/cl/ClLayerSupport.hpp b/src/backends/cl/ClLayerSupport.hpp index 219ce3b49e..b72f298928 100644 --- a/src/backends/cl/ClLayerSupport.hpp +++ b/src/backends/cl/ClLayerSupport.hpp @@ -210,6 +210,7 @@ public: Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; bool IsReshapeSupported(const TensorInfo& input, + const TensorInfo& output, const ReshapeDescriptor& descriptor, Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; diff --git a/src/backends/cl/workloads/ClPermuteWorkload.cpp b/src/backends/cl/workloads/ClPermuteWorkload.cpp index bec80e55f8..41bce1d4fa 100644 --- a/src/backends/cl/workloads/ClPermuteWorkload.cpp +++ b/src/backends/cl/workloads/ClPermuteWorkload.cpp @@ -14,16 +14,16 @@ namespace armnn { -arm_compute::Status ClPermuteWorkloadValidate(const PermuteDescriptor& descriptor) +arm_compute::Status ClPermuteWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const PermuteDescriptor& descriptor) { - const armnn::PermutationVector& perm = descriptor.m_DimMappings; + const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input); + const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output); + const armnn::PermutationVector& mappings = descriptor.m_DimMappings; - ARM_COMPUTE_RETURN_ERROR_ON_MSG(!perm.IsEqual({ 0U, 3U, 1U, 2U }) - && !perm.IsEqual({ 0U, 2U, 3U, 1U }) - && !perm.IsEqual({ 3U, 2U, 0U, 1U }), - "Only [0, 3, 1, 2], [0, 2, 3, 1] and [3, 2, 0, 1] permutations are supported"); - - return arm_compute::Status{}; + return arm_compute::CLPermute::validate(&aclInputInfo, &aclOutputInfo, + armcomputetensorutils::BuildArmComputePermutationVector(mappings)); } ClPermuteWorkload::ClPermuteWorkload(const PermuteQueueDescriptor& descriptor, diff --git a/src/backends/cl/workloads/ClPermuteWorkload.hpp b/src/backends/cl/workloads/ClPermuteWorkload.hpp index 58aa7ea0fa..8b5f4c6147 100644 --- a/src/backends/cl/workloads/ClPermuteWorkload.hpp +++ b/src/backends/cl/workloads/ClPermuteWorkload.hpp @@ -16,7 +16,9 @@ namespace armnn { -arm_compute::Status ClPermuteWorkloadValidate(const PermuteDescriptor& descriptor); +arm_compute::Status ClPermuteWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const PermuteDescriptor& descriptor); class ClPermuteWorkload : public BaseWorkload<PermuteQueueDescriptor> { diff --git a/src/backends/cl/workloads/ClReshapeWorkload.cpp b/src/backends/cl/workloads/ClReshapeWorkload.cpp index db1702a74f..d752290444 100644 --- a/src/backends/cl/workloads/ClReshapeWorkload.cpp +++ b/src/backends/cl/workloads/ClReshapeWorkload.cpp @@ -12,6 +12,15 @@ namespace armnn { +arm_compute::Status ClReshapeWorkloadValidate(const TensorInfo& input, + const TensorInfo& output) +{ + const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input); + const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output); + + return arm_compute::CLReshapeLayer::validate(&aclInputInfo, &aclOutputInfo); +} + ClReshapeWorkload::ClReshapeWorkload(const ReshapeQueueDescriptor& descriptor, const WorkloadInfo& info) : BaseWorkload<ReshapeQueueDescriptor>(descriptor, info) { diff --git a/src/backends/cl/workloads/ClReshapeWorkload.hpp b/src/backends/cl/workloads/ClReshapeWorkload.hpp index a7b464e719..62f5fccec8 100644 --- a/src/backends/cl/workloads/ClReshapeWorkload.hpp +++ b/src/backends/cl/workloads/ClReshapeWorkload.hpp @@ -12,6 +12,9 @@ namespace armnn { +arm_compute::Status ClReshapeWorkloadValidate(const TensorInfo& input, + const TensorInfo& output); + class ClReshapeWorkload : public BaseWorkload<ReshapeQueueDescriptor> { public: |