49 struct CLGEMMConvolutionLayer::Impl
51 const ITensor *weights{
nullptr };
52 std::unique_ptr<opencl::ClGemmConv2d> op{
nullptr };
53 ITensorPack run_pack{};
54 ITensorPack prep_pack{};
55 MemoryGroup memory_group{};
56 IWeightsManager *weights_manager{
nullptr };
58 WorkspaceData<CLTensor> workspace_tensors{};
59 bool is_prepared{
false };
63 : _impl(
std::make_unique<Impl>())
66 _impl->weights_manager = weights_manager;
74 configure(
CLKernelLibrary::get().get_compile_context(), input, weights, biases, output, conv_info, weights_info, dilation, act_info, num_groups, post_ops);
82 _impl->weights = weights;
83 _impl->op = std::make_unique<opencl::ClGemmConv2d>();
85 auto transformed_post_ops = experimental::transform_post_op_list_arguments<ICLTensor *, ITensorInfo *>(
post_ops, [](
auto tensor)
89 const Conv2dInfo conv2d_info =
Conv2dInfo(conv_info, dilation, act_info,
false, num_groups, transformed_post_ops);
90 _impl->op->configure(compile_context, input->
info(), weights->
info(), (biases !=
nullptr ? biases->
info() :
nullptr), output->
info(), conv2d_info,
weights_info);
100 size_t post_op_tensor_index = 0;
101 for(
const auto &op : post_ops.get_list())
103 for(
auto &
tensor : op->arguments())
113 _impl->aux_mem_req = _impl->op->workspace();
114 _impl->workspace_tensors = manage_workspace<CLTensor>(_impl->aux_mem_req, _impl->memory_group, _impl->run_pack, _impl->prep_pack);
120 const Conv2dInfo conv2d_info =
Conv2dInfo(conv_info, dilation, act_info,
false, num_groups, post_ops);
128 _impl->op->run(_impl->run_pack);
133 if(!_impl->is_prepared)
135 _impl->op->prepare(_impl->prep_pack);
136 auto has_reshape = std::find_if(_impl->aux_mem_req.begin(),
137 _impl->aux_mem_req.end(),
138 [](
const MemoryInfo &
m) ->
bool {
return m.lifetime == MemoryLifetime::Persistent; });
140 if(has_reshape !=
std::end(_impl->aux_mem_req))
142 _impl->weights->mark_as_unused();
147 _impl->run_pack.add_const_tensor(
ACL_SRC_1, _impl->weights);
150 _impl->is_prepared =
true;
experimental::PostOpList< ITensorInfo * > post_ops
static CLKernelLibrary & get()
Access the KernelLibrary singleton.
Store the tensor's metadata.
Manages all the OpenCL kernels compilation and caching, provides accessors for the OpenCL Context...
Activation Layer Information class.
Copyright (c) 2017-2023 Arm Limited.
std::vector< MemoryInfo > MemoryRequirements
static Status validate(const ITensorInfo *input, const ITensorInfo *weights, const ITensorInfo *biases, const ITensorInfo *output, const Conv2dInfo &conv2d_info, const WeightsInfo &weights_info=WeightsInfo())
Static function to check if given info will lead to a valid configuration.
TensorType get_post_op_arg_type(size_t index)
Get post op argument TensorType from post op argument index in a flattened, ordered post op argument ...
Convolution Layer Weights Information class.
Interface to enqueue OpenCL kernels and get/set the OpenCL CommandQueue and ICLTuner.
CLGEMMConvolutionLayer(std::shared_ptr< IMemoryManager > memory_manager=nullptr, IWeightsManager *weights_manager=nullptr)
Constructor.
const unsigned int num_groups
virtual ITensorInfo * info() const =0
Interface to be implemented by the child class to return the tensor's metadata.
Padding and stride information class.
void end(TokenStream &in, bool &valid)
void run() override
Run the kernels contained in the function.
Weights manager interface to handle weights transformations.
void release_temporaries(const experimental::MemoryRequirements &mem_reqs, WorkspaceData< TensorType > &workspace)
Utility function to release tensors with lifetime marked as Prepare.
Descriptor used by the 2d Convolution function.
static Status validate(const ITensorInfo *input, const ITensorInfo *weights, const ITensorInfo *biases, const ITensorInfo *output, const PadStrideInfo &conv_info, const WeightsInfo &weights_info=WeightsInfo(), const Size2D &dilation=Size2D(1U, 1U), const ActivationLayerInfo &act_info=ActivationLayerInfo(), unsigned int num_groups=1, const experimental::PostOpList< ITensorInfo *> &post_ops=experimental::PostOpList< ITensorInfo *> {})
Static function to check if given info will lead to a valid configuration of CLGEMMConvolutionLayer.
Memory group resources scope handling class.
Interface for OpenCL tensor.
Class for specifying the size of an image or rectangle.
void prepare() override
Prepare the function for executing.
CLTensor * tensor
Pointer to the auxiliary tensor.
#define ARM_COMPUTE_ERROR_ON_NULLPTR(...)
void configure(const ICLTensor *input, const ICLTensor *weights, const ICLTensor *biases, ICLTensor *output, const PadStrideInfo &conv_info, const WeightsInfo &weights_info=WeightsInfo(), const Size2D &dilation=Size2D(1U, 1U), const ActivationLayerInfo &act_info=ActivationLayerInfo(), unsigned int num_groups=1, const experimental::PostOpList< ICLTensor *> &post_ops=experimental::PostOpList< ICLTensor *> {})
Set the input and output tensors.
A sequence of PostOps that can be appended to the end of other operators.
~CLGEMMConvolutionLayer()
Default destructor.