Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
virtual bool IsReshapeSupported(const TensorInfo& input,
+ const TensorInfo& output,
const ReshapeDescriptor& descriptor,
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
bool IsReshapeSupported(const BackendId& backend,
const TensorInfo& input,
+ const TensorInfo& output,
const ReshapeDescriptor& descriptor,
char* reasonIfUnsupported,
size_t reasonIfUnsupportedMaxLength)
{
- FORWARD_LAYER_SUPPORT_FUNC(backend, IsReshapeSupported, input, descriptor);
+ FORWARD_LAYER_SUPPORT_FUNC(backend, IsReshapeSupported, input, output, descriptor);
}
bool IsResizeSupported(const BackendId& backend,
}
bool LayerSupportBase::IsReshapeSupported(const TensorInfo& /*input*/,
+ const TensorInfo& /*output*/,
const ReshapeDescriptor& /*descriptor*/,
Optional<std::string&> reasonIfUnsupported) const
{
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;
{
auto cLayer = boost::polymorphic_downcast<const ReshapeLayer*>(&layer);
const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
+ const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
result = layerSupportObject->IsReshapeSupported(OverrideDataType(input, dataType),
+ OverrideDataType(output, dataType),
cLayer->GetParameters(),
reason);
break;
#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"
}
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,
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;
const armnn::PermutationVector& mappings = descriptor.m_DimMappings;
return arm_compute::CLPermute::validate(&aclInputInfo, &aclOutputInfo,
- armcomputetensorutils::BuildArmComputePermutationVector(mappings));
+ armcomputetensorutils::BuildArmComputePermutationVector(mappings));
}
ClPermuteWorkload::ClPermuteWorkload(const PermuteQueueDescriptor& descriptor,
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)
{
namespace armnn
{
+arm_compute::Status ClReshapeWorkloadValidate(const TensorInfo& input,
+ const TensorInfo& output);
+
class ClReshapeWorkload : public BaseWorkload<ReshapeQueueDescriptor>
{
public:
#include "workloads/NeonPreluWorkload.hpp"
#include "workloads/NeonQuantizeWorkload.hpp"
#include "workloads/NeonQuantizedLstmWorkload.hpp"
+#include "workloads/NeonReshapeWorkload.hpp"
#include "workloads/NeonResizeWorkload.hpp"
#include "workloads/NeonRsqrtWorkload.hpp"
#include "workloads/NeonSliceWorkload.hpp"
}
bool NeonLayerSupport::IsReshapeSupported(const TensorInfo& input,
+ const TensorInfo& output,
const ReshapeDescriptor& descriptor,
Optional<std::string&> reasonIfUnsupported) const
{
ignore_unused(descriptor);
- return IsSupportedForDataTypeNeon(reasonIfUnsupported,
- input.GetDataType(),
- &TrueFunc<>,
- &TrueFunc<>);
+ FORWARD_WORKLOAD_VALIDATE_FUNC(NeonReshapeWorkloadValidate,
+ reasonIfUnsupported,
+ input,
+ output);
}
bool NeonLayerSupport::IsResizeSupported(const TensorInfo& input,
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;
namespace armnn
{
+arm_compute::Status NeonReshapeWorkloadValidate(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::NEReshapeLayer::validate(&aclInputInfo, &aclOutputInfo);
+}
+
NeonReshapeWorkload::NeonReshapeWorkload(const ReshapeQueueDescriptor& descriptor,
const WorkloadInfo& info)
: BaseWorkload<ReshapeQueueDescriptor>(descriptor, info)
#pragma once
#include <backendsCommon/Workload.hpp>
+#include <backendsCommon/WorkloadData.hpp>
+#include <neon/workloads/NeonWorkloadUtils.hpp>
+#include <armnn/TypesUtils.hpp>
#include <arm_compute/runtime/IFunction.h>
#include <memory>
namespace armnn
{
+arm_compute::Status NeonReshapeWorkloadValidate(const TensorInfo& input, const TensorInfo& output);
+
class NeonReshapeWorkload : public BaseWorkload<ReshapeQueueDescriptor>
{
public:
}
bool RefLayerSupport::IsReshapeSupported(const TensorInfo& input,
+ const TensorInfo& output,
const ReshapeDescriptor& descriptor,
Optional<std::string&> reasonIfUnsupported) const
{
+ ignore_unused(output);
ignore_unused(descriptor);
// Define supported output types.
std::array<DataType,5> supportedOutputTypes =
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;