diff options
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 2bbd77acdb..8803e77ec5 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -40,6 +40,7 @@ #include "workloads/ClPermuteWorkload.hpp" #include "workloads/ClPooling2dWorkload.hpp" #include "workloads/ClPreluWorkload.hpp" +#include "workloads/ClReshapeWorkload.hpp" #include "workloads/ClResizeWorkload.hpp" #include "workloads/ClQuantizedLstmWorkload.hpp" #include "workloads/ClQuantizeWorkload.hpp" @@ -508,9 +509,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, @@ -558,13 +557,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 69c2280a59..491e793064 100644 --- a/src/backends/cl/ClLayerSupport.hpp +++ b/src/backends/cl/ClLayerSupport.hpp @@ -184,6 +184,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: |