12 #include <arm_compute/core/Types.h> 13 #include <arm_compute/runtime/CL/functions/CLConcatenateLayer.h> 15 #include <boost/polymorphic_pointer_cast.hpp> 19 using namespace armcomputetensorutils;
23 size_t CalcAxis(
const OriginsDescriptor& desc)
25 return (desc.GetNumDimensions() - desc.GetConcatAxis()) - 1;
33 std::vector<arm_compute::TensorInfo> aclInputs;
37 aclInputs.emplace_back(aclInputInfo);
39 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
40 std::vector<arm_compute::ITensorInfo*> aclInputPtrs;
41 for (arm_compute::ITensorInfo& input : aclInputs)
43 aclInputPtrs.emplace_back(&input);
46 size_t aclAxis = CalcAxis(descriptor);
47 return arm_compute::CLConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis);
53 bool allInputsAreSubtensors =
true;
56 for (
auto input : descriptor.
m_Inputs)
58 if (!input->GetParent())
61 allInputsAreSubtensors =
false;
66 if (allInputsAreSubtensors)
72 std::vector<arm_compute::ICLTensor *> aclInputs;
75 arm_compute::ICLTensor& aclInput = boost::polymorphic_pointer_downcast<IClTensorHandle>(input)->GetTensor();
76 aclInputs.emplace_back(&aclInput);
78 arm_compute::ICLTensor& output = boost::polymorphic_pointer_downcast<IClTensorHandle>(
82 auto layer = std::make_unique<arm_compute::CLConcatenateLayer>();
86 layer->configure(aclInputs, &output, aclAxis);
90 m_Layer = std::move(layer);
LayerDescriptor m_Parameters
ClConcatWorkload(const ConcatQueueDescriptor &descriptor, const WorkloadInfo &info)
void Execute() const override
arm_compute::Status ClConcatWorkloadValidate(const std::vector< const TensorInfo *> &inputs, const TensorInfo &output, const OriginsDescriptor &descriptor)
const ConcatQueueDescriptor m_Data
std::vector< ITensorHandle * > m_Outputs
std::vector< ITensorHandle * > m_Inputs
#define ARMNN_SCOPED_PROFILING_EVENT_CL(name)
An OriginsDescriptor for the ConcatLayer. Descriptor to configure the concatenation process...