MCPcopy Create free account
hub / github.com/ARM-software/ComputeLibrary / configure

Method configure

src/gpu/cl/operators/ClConcatenate.cpp:45–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43namespace opencl
44{
45void ClConcatenate::configure(const CLCompileContext &compile_context,
46 const std::vector<ITensorInfo *> &src_vector,
47 ITensorInfo *dst,
48 size_t axis)
49{
50 ARM_COMPUTE_ERROR_ON(dst == nullptr);
51 ARM_COMPUTE_LOG_PARAMS(src_vector, dst, axis);
52 _axis = axis;
53 _num_inputs = src_vector.size();
54
55 TensorShape dst_shape = arm_compute::misc::shape_calculator::calculate_concatenate_shape(src_vector, _axis);
56 std::vector<const ITensorInfo *> const_src_vector(src_vector.size());
57 std::transform(src_vector.begin(), src_vector.end(), const_src_vector.begin(),
58 [](ITensorInfo *t)
59 {
60 ARM_COMPUTE_ERROR_ON_NULLPTR(t);
61 return t;
62 });
63
64 // dst auto inizialitation if not yet initialized
65 auto_init_if_empty(*dst, dst_shape, 1, src_vector[0]->data_type());
66 ARM_COMPUTE_ERROR_THROW_ON(ClConcatenate::validate(const_src_vector, dst, axis));
67
68 unsigned int offset = 0;
69 switch (_axis)
70 {
71 case Window::DimX:
72 {
73 switch (_num_inputs)
74 {
75 case 2:
76 {
77 // Configure WidthConcatenate2Tensors kernel
78 auto kernel = std::make_unique<kernels::ClWidthConcatenate2TensorsKernel>();
79 kernel->configure(compile_context, src_vector.at(0), src_vector.at(1), dst);
80 _concat_kernels.emplace_back(std::move(kernel));
81 break;
82 }
83 case 4:
84 {
85 // Configure WidthConcatenate4Tensors kernel
86 auto kernel = std::make_unique<kernels::ClWidthConcatenate4TensorsKernel>();
87 kernel->configure(compile_context, src_vector.at(0), src_vector.at(1), src_vector.at(2),
88 src_vector.at(3), dst);
89 _concat_kernels.emplace_back(std::move(kernel));
90 break;
91 }
92 default:
93 {
94 // Configure generic case WidthConcatenate kernels
95 for (unsigned int i = 0; i < _num_inputs; ++i)
96 {
97 auto kernel = std::make_unique<kernels::ClWidthConcatenateKernel>();
98 kernel->configure(compile_context, src_vector.at(i), offset, dst);
99 offset += src_vector.at(i)->dimension(_axis);
100 _concat_kernels.emplace_back(std::move(kernel));
101 }
102 break;

Callers

nothing calls this directly

Calls 9

transformFunction · 0.85
auto_init_if_emptyFunction · 0.85
validateFunction · 0.50
sizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
data_typeMethod · 0.45
dimensionMethod · 0.45

Tested by

no test coverage detected