diff options
author | Francis Murtagh <francis.murtagh@arm.com> | 2019-07-26 15:44:17 +0100 |
---|---|---|
committer | Francis Murtagh <francis.murtagh@arm.com> | 2019-07-26 15:44:17 +0100 |
commit | 3b9383548309a8f9121668826a628ec250c57a1c (patch) | |
tree | 01cc4e162008aea23bfe9ae167ded0e8f9abc39c /src/backends/cl | |
parent | 82b15eda6f87a20bc31256f5e85eb4082d3d0591 (diff) | |
download | armnn-3b9383548309a8f9121668826a628ec250c57a1c.tar.gz |
IVGCVSW-3554 Update workloads to pass Softmax Axis Parameter to Backends
* Add check in CL and Neon to ensure axis is 1 otherwise
return unsupported.
* Edit CreateWorkload test and JsonPrinter test to ensure axis of 1.
Change-Id: I499b405532e26fefc2dd1c18b6dc6005813b5604
Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
Diffstat (limited to 'src/backends/cl')
-rw-r--r-- | src/backends/cl/ClLayerSupport.cpp | 8 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp | 7 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp | 4 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp | 2 |
4 files changed, 16 insertions, 5 deletions
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index 7eb1dcf39a..b737daf7f4 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -594,8 +594,14 @@ bool ClLayerSupport::IsSoftmaxSupported(const TensorInfo& input, const SoftmaxDescriptor& descriptor, Optional<std::string&> reasonIfUnsupported) const { + if (!(descriptor.m_Axis == 1 || + (descriptor.m_Axis < 0 && static_cast<int>(input.GetNumDimensions()) + descriptor.m_Axis == 1))) + { + SetValueChecked(reasonIfUnsupported, "Cl Softmax: Only supports Axis equal to 1."); + return false; + } ignore_unused(descriptor); - FORWARD_WORKLOAD_VALIDATE_FUNC(ClSoftmaxWorkloadValidate, reasonIfUnsupported, input, output); + FORWARD_WORKLOAD_VALIDATE_FUNC(ClSoftmaxWorkloadValidate, reasonIfUnsupported, input, output, descriptor); } bool ClLayerSupport::IsSpaceToBatchNdSupported(const TensorInfo& input, diff --git a/src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp b/src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp index b1dc404a6f..2f6d380f94 100644 --- a/src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp +++ b/src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp @@ -6,6 +6,7 @@ #include "ClSoftmaxBaseWorkload.hpp" #include <aclCommon/ArmComputeTensorUtils.hpp> +#include <aclCommon/ArmComputeUtils.hpp> #include <arm_compute/runtime/CL/functions/CLSoftmaxLayer.h> @@ -13,12 +14,14 @@ namespace armnn { arm_compute::Status ClSoftmaxWorkloadValidate(const TensorInfo& input, - const TensorInfo& output) + const TensorInfo& output, + const SoftmaxDescriptor& descriptor) { const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input); const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output); - return arm_compute::CLSoftmaxLayer::validate(&aclInputInfo, &aclOutputInfo); + unsigned int aclAxis = ComputeSoftmaxAclAxis(input); + return arm_compute::CLSoftmaxLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_Beta, aclAxis); } } diff --git a/src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp b/src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp index b800056cdf..8d73060162 100644 --- a/src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp +++ b/src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp @@ -5,6 +5,7 @@ #pragma once +#include <armnn/Descriptors.hpp> #include <armnn/Tensor.hpp> #include <arm_compute/core/Error.h> @@ -12,6 +13,7 @@ namespace armnn { arm_compute::Status ClSoftmaxWorkloadValidate(const TensorInfo& input, - const TensorInfo& output); + const TensorInfo& output, + const SoftmaxDescriptor& descriptor); } // namespace armnn diff --git a/src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp b/src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp index c78ab039ef..f2f8d17901 100644 --- a/src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp +++ b/src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp @@ -14,7 +14,7 @@ namespace armnn { ClSoftmaxFloatWorkload::ClSoftmaxFloatWorkload(const SoftmaxQueueDescriptor& descriptor, const WorkloadInfo& info, - std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager) + std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager) : FloatWorkload<SoftmaxQueueDescriptor>(descriptor, info) , m_SoftmaxLayer(memoryManager) { |