/** * Copyright 2020 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MINDSPORE_LITE_NNACL_CONV_PARAMETER_H_ #define MINDSPORE_LITE_NNACL_CONV_PARAMETER_H_ #ifdef ENABLE_NEON #include #endif #include "nnacl/op_base.h" #include "nnacl/quantization/quantize.h" typedef struct ConvParameter { OpParameter op_parameter_; ConvQuantArg conv_quant_arg_; int kernel_h_; int kernel_w_; int stride_h_; int stride_w_; int dilation_h_; int dilation_w_; int pad_u_; int pad_d_; int pad_l_; int pad_r_; int group_; int tile_num_; int input_batch_; int input_h_; int input_w_; int input_channel_; int output_batch_; int output_h_; int output_w_; int output_channel_; int thread_num_; int input_unit_; int output_unit_; ActType act_type_; } ConvParameter; typedef struct SlidingWindowParam { int left_; int right_; int top_; int bottom_; int c_block_; int block_channel_; int ic4_channel_; int out_step_; int out_h_step_; int in_step_; int in_h_step_; int in_sh_step_; // stride H int in_sw_step_; // stride W int in_kh_step_; // kernel H int in_kw_step_; // kernel W int kernel_step_; } SlidingWindowParam; #define DECONV_WINOGRAD_DEFAULT_UNIT 3 #define DECONV_WINOGRAD_DEFAULT_TILE 8 #define DECONV_WINOGRAD_BUFFER_COUNT 8 typedef struct DeConvWg { void *b_buffer_; void *AT_; void *BT_; int kh_; int kw_; int k_; int i_; int o_; } DeConvWg; typedef struct DeConvWgABuffer { bool buf_init_; void *middle_buffer_; void *dest_buffer_; } DeConvWgABuffer; typedef struct DeConvComputeUnit { void *weight_; void *tmp_buffer_; int w_start_; int h_start_; int w_size_; int h_size_; bool use_winograd_; DeConvWg winograd_; } DeConvComputeUnit; typedef struct DeConvParam { DeConvComputeUnit *compute_units_; int compute_size_; DeConvWgABuffer a_buffer_[DECONV_WINOGRAD_BUFFER_COUNT]; int input_plane_; int output_plane_; int kernel_plane_; int ic_div4_; int oc_div4_; int ic_up4_; int oc_up4_; int thread_num_; int in_tile_count_; int in_tile_h_count_; int in_tile_w_count_; int out_tile_h_; int out_tile_w_; } DeConvParam; #endif // MINDSPORE_LITE_NNACL_CONV_PARAMETER_H_