1 /*
2 * SPDX-FileCopyrightText: Copyright 2023-2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 /* ----------------------------------------------------------------------
20 * Project: CMSIS NN Library
21 * Title: arm_depthwise_conv_get_buffer_sizes_s4.c
22 * Description: Collection of get buffer size functions for the various s4 depthwise convolution layer functions.
23 *
24 * $Date: 17 April 2024
25 * $Revision: V.1.1.0
26 *
27 * Target : Arm(R) M-Profile Architecture
28 *
29 * -------------------------------------------------------------------- */
30
31 #include "arm_nnfunctions.h"
32 #include "arm_nnsupportfunctions.h"
33
34 /**
35 * @ingroup NNConv
36 */
37
38 /**
39 * @addtogroup GetBufferSizeNNConv
40 * @{
41 */
42
arm_depthwise_conv_s4_opt_get_buffer_size(const cmsis_nn_dims * input_dims,const cmsis_nn_dims * filter_dims)43 int32_t arm_depthwise_conv_s4_opt_get_buffer_size(const cmsis_nn_dims *input_dims, const cmsis_nn_dims *filter_dims)
44 {
45 #if defined(ARM_MATH_MVEI)
46 return arm_depthwise_conv_s8_opt_get_buffer_size_mve(input_dims, filter_dims);
47 #else
48 return arm_depthwise_conv_s8_opt_get_buffer_size_dsp(input_dims, filter_dims);
49 #endif
50 }
51
arm_depthwise_conv_wrapper_s4_get_buffer_size(const cmsis_nn_dw_conv_params * dw_conv_params,const cmsis_nn_dims * input_dims,const cmsis_nn_dims * filter_dims,const cmsis_nn_dims * output_dims)52 int32_t arm_depthwise_conv_wrapper_s4_get_buffer_size(const cmsis_nn_dw_conv_params *dw_conv_params,
53 const cmsis_nn_dims *input_dims,
54 const cmsis_nn_dims *filter_dims,
55 const cmsis_nn_dims *output_dims)
56 {
57 int32_t size = 0;
58
59 if (input_dims->c == output_dims->c && input_dims->n == 1 && dw_conv_params->dilation.w == 1 &&
60 dw_conv_params->dilation.h == 1)
61 {
62 size = arm_depthwise_conv_s4_opt_get_buffer_size(input_dims, filter_dims);
63 }
64
65 return size;
66 }
67
arm_depthwise_conv_wrapper_s4_get_buffer_size_dsp(const cmsis_nn_dw_conv_params * dw_conv_params,const cmsis_nn_dims * input_dims,const cmsis_nn_dims * filter_dims,const cmsis_nn_dims * output_dims)68 int32_t arm_depthwise_conv_wrapper_s4_get_buffer_size_dsp(const cmsis_nn_dw_conv_params *dw_conv_params,
69 const cmsis_nn_dims *input_dims,
70 const cmsis_nn_dims *filter_dims,
71 const cmsis_nn_dims *output_dims)
72 {
73 return arm_depthwise_conv_wrapper_s4_get_buffer_size(dw_conv_params, input_dims, filter_dims, output_dims);
74 }
75
arm_depthwise_conv_wrapper_s4_get_buffer_size_mve(const cmsis_nn_dw_conv_params * dw_conv_params,const cmsis_nn_dims * input_dims,const cmsis_nn_dims * filter_dims,const cmsis_nn_dims * output_dims)76 int32_t arm_depthwise_conv_wrapper_s4_get_buffer_size_mve(const cmsis_nn_dw_conv_params *dw_conv_params,
77 const cmsis_nn_dims *input_dims,
78 const cmsis_nn_dims *filter_dims,
79 const cmsis_nn_dims *output_dims)
80 {
81 int32_t size = 0;
82
83 if (input_dims->c == output_dims->c && input_dims->n == 1 && dw_conv_params->dilation.w == 1 &&
84 dw_conv_params->dilation.h == 1)
85 {
86 size = arm_depthwise_conv_s8_opt_get_buffer_size_mve(input_dims, filter_dims);
87 }
88
89 return size;
90 }
91
92 /**
93 * @} end of GetBufferSizeNNConv group
94 */
95