| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 1 | // Copyright (c) Facebook, Inc. and its affiliates. | 
 | 2 | // All rights reserved. | 
 | 3 | // | 
 | 4 | // Copyright 2019 Google LLC | 
 | 5 | // | 
 | 6 | // This source code is licensed under the BSD-style license found in the | 
 | 7 | // LICENSE file in the root directory of this source tree. | 
 | 8 |  | 
 | 9 | #pragma once | 
 | 10 |  | 
 | 11 | #include <stddef.h> | 
 | 12 | #include <stdint.h> | 
 | 13 |  | 
 | 14 | #include <pthreadpool.h> | 
 | 15 |  | 
| Marat Dukhan | eeaa7bd | 2019-10-25 17:31:25 -0700 | [diff] [blame] | 16 | #include <xnnpack/params.h> | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 17 | #include <xnnpack/compute.h> | 
 | 18 |  | 
 | 19 |  | 
 | 20 | enum xnn_ukernel_type { | 
 | 21 |   xnn_ukernel_type_none = 0, | 
 | 22 |   xnn_ukernel_type_add, | 
 | 23 |   xnn_ukernel_type_argmax_pooling, | 
 | 24 |   xnn_ukernel_type_average_pooling, | 
| Marat Dukhan | b1a0fc3 | 2019-12-02 19:32:02 -0800 | [diff] [blame] | 25 |   xnn_ukernel_type_binary_elementwise, | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 26 |   xnn_ukernel_type_channel_shuffle, | 
| Marat Dukhan | 1f29b80 | 2020-05-15 23:46:39 -0700 | [diff] [blame] | 27 |   xnn_ukernel_type_conv2d_hwc2chw, | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 28 |   xnn_ukernel_type_dwconv, | 
 | 29 |   xnn_ukernel_type_gemm, | 
 | 30 |   xnn_ukernel_type_global_average_pooling, | 
| Marat Dukhan | 346a9e5 | 2019-11-15 09:06:30 -0800 | [diff] [blame] | 31 |   xnn_ukernel_type_igemm, | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 32 |   xnn_ukernel_type_lut, | 
 | 33 |   xnn_ukernel_type_max_pooling, | 
 | 34 |   xnn_ukernel_type_pad, | 
 | 35 |   xnn_ukernel_type_pixelwise_average_pooling, | 
 | 36 |   xnn_ukernel_type_prelu, | 
| Marat Dukhan | fd8e689 | 2020-01-27 15:25:25 -0800 | [diff] [blame] | 37 |   xnn_ukernel_type_softmax, | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 38 |   xnn_ukernel_type_spmm, | 
 | 39 |   xnn_ukernel_type_subconv2d, | 
| Marat Dukhan | c3065f5 | 2020-06-04 13:33:32 -0700 | [diff] [blame] | 40 |   xnn_ukernel_type_unary_elementwise, | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 41 |   xnn_ukernel_type_unpooling, | 
 | 42 |   xnn_ukernel_type_vmulcaddc, | 
 | 43 | }; | 
 | 44 |  | 
 | 45 | enum xnn_operator_type { | 
| Marat Dukhan | 3b59de2 | 2020-06-03 20:15:19 -0700 | [diff] [blame] | 46 |   xnn_operator_type_invalid = 0, | 
| Marat Dukhan | 5020b96 | 2020-06-08 13:30:10 -0700 | [diff] [blame] | 47 |   xnn_operator_type_abs_nc_f32, | 
| Frank Barchard | 01898c0 | 2020-06-23 21:49:50 -0700 | [diff] [blame] | 48 |   xnn_operator_type_add_nd_f16, | 
| Marat Dukhan | b1a0fc3 | 2019-12-02 19:32:02 -0800 | [diff] [blame] | 49 |   xnn_operator_type_add_nd_f32, | 
| Marat Dukhan | ff20948 | 2020-09-03 14:26:53 -0700 | [diff] [blame] | 50 |   xnn_operator_type_add_nd_qs8, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 51 |   xnn_operator_type_argmax_pooling_nhwc_f32, | 
 | 52 |   xnn_operator_type_average_pooling_nhwc_f32, | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 53 |   xnn_operator_type_average_pooling_nhwc_qu8, | 
| Marat Dukhan | 64e5251 | 2020-06-09 13:41:16 -0700 | [diff] [blame] | 54 |   xnn_operator_type_bankers_rounding_nc_f32, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 55 |   xnn_operator_type_channel_shuffle_nc_x32, | 
 | 56 |   xnn_operator_type_channel_shuffle_nc_x8, | 
 | 57 |   xnn_operator_type_clamp_nc_f32, | 
 | 58 |   xnn_operator_type_clamp_nc_u8, | 
| Marat Dukhan | 64e5251 | 2020-06-09 13:41:16 -0700 | [diff] [blame] | 59 |   xnn_operator_type_ceiling_nc_f32, | 
| Marat Dukhan | 065b11e | 2020-05-22 09:49:41 -0700 | [diff] [blame] | 60 |   xnn_operator_type_constant_pad_nd_x32, | 
| Marat Dukhan | 4e21b27 | 2020-06-04 18:45:01 -0700 | [diff] [blame] | 61 |   xnn_operator_type_convolution_nchw_f32, | 
| Frank Barchard | 49b4dcc | 2020-06-26 14:07:19 -0700 | [diff] [blame] | 62 |   xnn_operator_type_convolution_nhwc_f16, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 63 |   xnn_operator_type_convolution_nhwc_f32, | 
| Marat Dukhan | 16f1e1a | 2020-08-04 16:38:22 -0700 | [diff] [blame] | 64 |   xnn_operator_type_convolution_nhwc_qs8, | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 65 |   xnn_operator_type_convolution_nhwc_qu8, | 
| Marat Dukhan | 4e21b27 | 2020-06-04 18:45:01 -0700 | [diff] [blame] | 66 |   xnn_operator_type_copy_nc_x32, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 67 |   xnn_operator_type_deconvolution_nhwc_f32, | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 68 |   xnn_operator_type_deconvolution_nhwc_qu8, | 
| Marat Dukhan | 6918050 | 2019-12-06 15:00:31 -0800 | [diff] [blame] | 69 |   xnn_operator_type_divide_nd_f32, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 70 |   xnn_operator_type_fully_connected_nc_f32, | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 71 |   xnn_operator_type_fully_connected_nc_qu8, | 
| Marat Dukhan | 64e5251 | 2020-06-09 13:41:16 -0700 | [diff] [blame] | 72 |   xnn_operator_type_floor_nc_f32, | 
| Frank Barchard | 7e2cbb0 | 2020-06-12 01:22:13 -0700 | [diff] [blame] | 73 |   xnn_operator_type_global_average_pooling_nwc_f16, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 74 |   xnn_operator_type_global_average_pooling_nwc_f32, | 
| Marat Dukhan | 9e0b539 | 2020-08-07 02:29:34 -0700 | [diff] [blame] | 75 |   xnn_operator_type_global_average_pooling_nwc_qs8, | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 76 |   xnn_operator_type_global_average_pooling_nwc_qu8, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 77 |   xnn_operator_type_global_average_pooling_ncw_f32, | 
| Frank Barchard | a96948e | 2020-09-11 15:34:18 -0700 | [diff] [blame] | 78 |   xnn_operator_type_hardswish_nc_f16, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 79 |   xnn_operator_type_hardswish_nc_f32, | 
| Marat Dukhan | 2881333 | 2020-06-10 18:05:38 -0700 | [diff] [blame] | 80 |   xnn_operator_type_leaky_relu_nc_f32, | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 81 |   xnn_operator_type_leaky_relu_nc_qu8, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 82 |   xnn_operator_type_max_pooling_nhwc_f32, | 
 | 83 |   xnn_operator_type_max_pooling_nhwc_u8, | 
| Marat Dukhan | 79e7f84 | 2019-12-05 14:35:50 -0800 | [diff] [blame] | 84 |   xnn_operator_type_maximum_nd_f32, | 
 | 85 |   xnn_operator_type_minimum_nd_f32, | 
| Frank Barchard | 0ea6a77 | 2020-09-09 15:26:31 -0700 | [diff] [blame] | 86 |   xnn_operator_type_multiply_nd_f16, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 87 |   xnn_operator_type_multiply_nd_f32, | 
| Marat Dukhan | 5020b96 | 2020-06-08 13:30:10 -0700 | [diff] [blame] | 88 |   xnn_operator_type_negate_nc_f32, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 89 |   xnn_operator_type_prelu_nc_f32, | 
| Artsiom Ablavatski | 9791810 | 2020-10-27 15:52:59 -0700 | [diff] [blame^] | 90 |   xnn_operator_type_resize_bilinear_nchw_f32, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 91 |   xnn_operator_type_resize_bilinear_nhwc_f32, | 
 | 92 |   xnn_operator_type_sigmoid_nc_f32, | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 93 |   xnn_operator_type_sigmoid_nc_qu8, | 
| Marat Dukhan | fd8e689 | 2020-01-27 15:25:25 -0800 | [diff] [blame] | 94 |   xnn_operator_type_softmax_nc_f32, | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 95 |   xnn_operator_type_softmax_nc_qu8, | 
| Marat Dukhan | 5020b96 | 2020-06-08 13:30:10 -0700 | [diff] [blame] | 96 |   xnn_operator_type_square_nc_f32, | 
| Marat Dukhan | 6804bbd | 2020-06-30 19:26:11 -0700 | [diff] [blame] | 97 |   xnn_operator_type_square_root_nc_f32, | 
| Marat Dukhan | f739926 | 2020-06-05 10:58:44 -0700 | [diff] [blame] | 98 |   xnn_operator_type_squared_difference_nd_f32, | 
| Marat Dukhan | 05f3f6d | 2019-12-03 15:13:53 -0800 | [diff] [blame] | 99 |   xnn_operator_type_subtract_nd_f32, | 
| Marat Dukhan | 64e5251 | 2020-06-09 13:41:16 -0700 | [diff] [blame] | 100 |   xnn_operator_type_truncation_nc_f32, | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 101 |   xnn_operator_type_unpooling_nhwc_x32, | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 102 | }; | 
 | 103 |  | 
| Marat Dukhan | 1f29b80 | 2020-05-15 23:46:39 -0700 | [diff] [blame] | 104 | struct xnn_ukernel_conv2d { | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 105 |   union { | 
| Marat Dukhan | 1f29b80 | 2020-05-15 23:46:39 -0700 | [diff] [blame] | 106 |     xnn_conv_hwc2chw_ukernel_function hwc2chw_function; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 107 |     xnn_conv_hwc_ukernel_function hwc_function; | 
 | 108 |   }; | 
 | 109 |   uint8_t output_height_tile; | 
 | 110 |   uint8_t output_channel_tile; | 
 | 111 | }; | 
 | 112 |  | 
 | 113 | struct xnn_ukernel_dwconv { | 
 | 114 |   union { | 
| Marat Dukhan | aefaef3 | 2020-04-09 07:09:34 -0700 | [diff] [blame] | 115 |     xnn_dwconv_unipass_ukernel_function unipass_function; | 
 | 116 |     xnn_dwconv_multipass_ukernel_function multipass_function; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 117 |   }; | 
| Marat Dukhan | aefaef3 | 2020-04-09 07:09:34 -0700 | [diff] [blame] | 118 |   uint8_t primary_tile; | 
 | 119 |   uint8_t incremental_tile; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 120 | }; | 
 | 121 |  | 
 | 122 | // Direct 2D Depthwise Convolution | 
 | 123 | struct xnn_ukernel_dwconv2d { | 
 | 124 |   union { | 
| Marat Dukhan | bf715f9 | 2020-10-23 20:17:00 -0700 | [diff] [blame] | 125 |     xnn_dwconv2d_chw_ukernel_function chw_function; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 126 |   }; | 
 | 127 |   uint8_t input_width_tile; | 
 | 128 |   uint8_t output_width_tile; | 
 | 129 | }; | 
 | 130 |  | 
 | 131 | struct xnn_ukernel_gemm { | 
| Marat Dukhan | 05702cf | 2020-03-26 15:41:33 -0700 | [diff] [blame] | 132 |   struct xnn_hmp_gemm_ukernel general_case; | 
 | 133 |   struct xnn_hmp_gemm_ukernel mr1_case; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 134 |   uint8_t mr; | 
 | 135 |   uint8_t nr; | 
 | 136 |   uint8_t kr; | 
 | 137 | }; | 
 | 138 |  | 
 | 139 | struct xnn_ukernel_igemm { | 
| Marat Dukhan | 05702cf | 2020-03-26 15:41:33 -0700 | [diff] [blame] | 140 |   struct xnn_hmp_igemm_ukernel general_case; | 
 | 141 |   struct xnn_hmp_igemm_ukernel mr1_case; | 
 | 142 |   struct xnn_hmp_gemm_ukernel gemm_case; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 143 |   uint8_t mr; | 
 | 144 |   uint8_t nr; | 
 | 145 |   uint8_t kr; | 
 | 146 | }; | 
 | 147 |  | 
 | 148 | struct xnn_ukernel_spmm { | 
 | 149 |   xnn_spmm_ukernel_function function; | 
 | 150 |   uint8_t mr; | 
 | 151 | }; | 
 | 152 |  | 
 | 153 | struct xnn_ukernel_vmulcaddc { | 
 | 154 |   xnn_vmulcaddc_ukernel_function function; | 
 | 155 |   uint8_t mr; | 
 | 156 | }; | 
 | 157 |  | 
| Frank Barchard | c67dd7f | 2020-07-06 11:23:57 -0700 | [diff] [blame] | 158 | struct xnn_ukernel_vbinary { | 
| Frank Barchard | 65beb1a | 2020-07-20 16:40:02 -0700 | [diff] [blame] | 159 |   xnn_vbinary_ukernel_function op_function; | 
 | 160 |   xnn_vbinary_ukernel_function opc_function; | 
 | 161 |   xnn_vbinary_ukernel_function ropc_function; | 
| Frank Barchard | c67dd7f | 2020-07-06 11:23:57 -0700 | [diff] [blame] | 162 | }; | 
 | 163 |  | 
| Frank Barchard | 62c5e23 | 2020-07-21 17:42:19 -0700 | [diff] [blame] | 164 | struct xnn_ukernel_vunary { | 
 | 165 |   xnn_vunary_ukernel_function function; | 
 | 166 | }; | 
 | 167 |  | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 168 | struct xnn_ukernel { | 
 | 169 |   enum xnn_ukernel_type type; | 
 | 170 |   union { | 
| Marat Dukhan | 1f29b80 | 2020-05-15 23:46:39 -0700 | [diff] [blame] | 171 |     struct xnn_ukernel_conv2d conv2d; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 172 |     struct xnn_ukernel_dwconv dwconv; | 
 | 173 |     struct xnn_ukernel_dwconv2d dwconv2d; | 
 | 174 |     struct xnn_ukernel_gemm gemm; | 
 | 175 |     struct xnn_ukernel_igemm igemm; | 
 | 176 |     struct xnn_ukernel_spmm spmm; | 
 | 177 |     struct xnn_ukernel_vmulcaddc vmulcaddc; | 
| Frank Barchard | c67dd7f | 2020-07-06 11:23:57 -0700 | [diff] [blame] | 178 |     struct xnn_ukernel_vbinary vbinary; | 
| Frank Barchard | 62c5e23 | 2020-07-21 17:42:19 -0700 | [diff] [blame] | 179 |     struct xnn_ukernel_vunary vunary; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 180 |   }; | 
 | 181 | }; | 
 | 182 |  | 
 | 183 | enum xnn_run_state { | 
 | 184 |   xnn_run_state_invalid = 0, | 
 | 185 |   xnn_run_state_ready, | 
 | 186 |   xnn_run_state_skip, | 
 | 187 | }; | 
 | 188 |  | 
 | 189 | struct subconvolution_params { | 
 | 190 |   void* weights; | 
 | 191 |   size_t w_stride; | 
 | 192 |   const void** indirection_buffer; | 
 | 193 |   void* output; | 
 | 194 |   size_t slice_width; | 
 | 195 |   size_t slice_height; | 
 | 196 |   size_t indirection_y_stride; | 
 | 197 |   size_t indirection_x_stride; | 
| Marat Dukhan | 80fc932 | 2019-09-29 21:06:36 -0700 | [diff] [blame] | 198 |   // scaled_kernel_size := kernel_size * mr * sizeof(void*). | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 199 |   size_t scaled_kernel_size; | 
 | 200 | }; | 
 | 201 |  | 
 | 202 | struct xnn_operator { | 
 | 203 |   size_t batch_size; | 
 | 204 |   uint32_t padding_top; | 
 | 205 |   uint32_t padding_right; | 
 | 206 |   uint32_t padding_bottom; | 
 | 207 |   uint32_t padding_left; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 208 |   uint32_t kernel_height; | 
 | 209 |   uint32_t kernel_width; | 
 | 210 |   uint32_t stride_height; | 
 | 211 |   uint32_t stride_width; | 
 | 212 |   uint32_t dilation_height; | 
 | 213 |   uint32_t dilation_width; | 
 | 214 |   uint32_t groups; | 
 | 215 |   size_t group_channels; | 
 | 216 |   size_t group_input_channels; | 
 | 217 |   size_t group_output_channels; | 
 | 218 |   size_t channels; | 
 | 219 |  | 
 | 220 |   size_t pad_before_channels; | 
 | 221 |   size_t pad_after_channels; | 
 | 222 |   uint32_t pad_value; | 
 | 223 |  | 
 | 224 |   size_t input_height; | 
 | 225 |   size_t input_width; | 
 | 226 |   size_t input_pixel_stride; | 
 | 227 |   const void* input; | 
 | 228 |   const void** indirection_buffer; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 229 |  | 
 | 230 |   size_t input2_pixel_stride; | 
 | 231 |   const void* input2; | 
 | 232 |  | 
 | 233 |   size_t output_height; | 
 | 234 |   size_t output_width; | 
 | 235 |   size_t output_pixel_stride; | 
 | 236 |   void* output; | 
 | 237 |  | 
 | 238 |   void* packed_weights; | 
 | 239 |   // Total number of non-zero kernel elements when weights use sparse representation. | 
 | 240 |   size_t num_nonzero_values; | 
 | 241 |   // Total number of non-zero kernel blocks when weights use sparse representation. | 
 | 242 |   size_t num_nonzero_blocks; | 
 | 243 |   // Total number of output channel blocks when weights use sparse representation. | 
 | 244 |   size_t num_output_channel_blocks; | 
 | 245 |   // Input channel corresponding to the first non-zero kernel element. | 
 | 246 |   size_t first_input_channel; | 
 | 247 |  | 
 | 248 |   float input_scale; | 
 | 249 |   float output_scale; | 
| Marat Dukhan | 54e95a0 | 2020-08-06 23:55:13 -0700 | [diff] [blame] | 250 |   int32_t input_zero_point; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 251 |   uint8_t output_zero_point; | 
 | 252 |   uint8_t output_min; | 
 | 253 |   uint8_t output_max; | 
 | 254 |  | 
 | 255 |   size_t valid_batch_size; | 
 | 256 |   size_t last_input_height; | 
 | 257 |   size_t last_input_width; | 
 | 258 |   const void* last_input; | 
| Marat Dukhan | 6972249 | 2019-11-11 19:55:50 -0800 | [diff] [blame] | 259 |   size_t last_output_height; | 
 | 260 |   size_t last_output_width; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 261 |   void* last_output; | 
 | 262 |  | 
 | 263 |   void* zero_buffer; | 
 | 264 |   void* lookup_table; | 
 | 265 |   void* pixelwise_buffer; | 
 | 266 |   struct subconvolution_params* subconvolution_buffer; | 
| Marat Dukhan | 8440fde | 2019-10-24 12:46:13 -0700 | [diff] [blame] | 267 |   uint32_t flags; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 268 |  | 
 | 269 |   union { | 
| Marat Dukhan | 5020b96 | 2020-06-08 13:30:10 -0700 | [diff] [blame] | 270 |     union xnn_f32_abs_params f32_abs; | 
| Marat Dukhan | 2881333 | 2020-06-10 18:05:38 -0700 | [diff] [blame] | 271 |     union xnn_f32_lrelu_params f32_lrelu; | 
| Marat Dukhan | 5020b96 | 2020-06-08 13:30:10 -0700 | [diff] [blame] | 272 |     union xnn_f32_neg_params f32_neg; | 
| Marat Dukhan | 64e5251 | 2020-06-09 13:41:16 -0700 | [diff] [blame] | 273 |     union xnn_f32_rnd_params f32_rnd; | 
| Marat Dukhan | 5868d80 | 2020-03-19 17:18:45 -0700 | [diff] [blame] | 274 |     // Parameters for Global Average Pooling in CHW layout | 
| Marat Dukhan | c3065f5 | 2020-06-04 13:33:32 -0700 | [diff] [blame] | 275 |     union xnn_f32_gavgpool_params f32_gavgpool; | 
| Frank Barchard | a96948e | 2020-09-11 15:34:18 -0700 | [diff] [blame] | 276 |     struct xnn_f16_hswish_params f16_hswish; | 
| Marat Dukhan | c3065f5 | 2020-06-04 13:33:32 -0700 | [diff] [blame] | 277 |     union xnn_f32_hswish_params f32_hswish; | 
| Frank Barchard | 01898c0 | 2020-06-23 21:49:50 -0700 | [diff] [blame] | 278 |     struct { | 
 | 279 |       struct xnn_f16_minmax_params f16_minmax; | 
 | 280 |       struct xnn_f16_scaleminmax_params f16_scaleminmax; | 
 | 281 |     }; | 
| Marat Dukhan | 8452ff5 | 2020-04-08 20:44:58 -0700 | [diff] [blame] | 282 |     // Pixelwise Average Pooling normally use f32_minmax_params, but also initialize | 
 | 283 |     // f32_scaleminmax_params in case it needs to switch to Global Average Pooling operation. | 
| Marat Dukhan | 5868d80 | 2020-03-19 17:18:45 -0700 | [diff] [blame] | 284 |     struct { | 
| Marat Dukhan | c3065f5 | 2020-06-04 13:33:32 -0700 | [diff] [blame] | 285 |       union xnn_f32_minmax_params f32_minmax; | 
 | 286 |       union xnn_f32_scaleminmax_params f32_scaleminmax; | 
| Marat Dukhan | 5868d80 | 2020-03-19 17:18:45 -0700 | [diff] [blame] | 287 |     }; | 
| Marat Dukhan | c3065f5 | 2020-06-04 13:33:32 -0700 | [diff] [blame] | 288 |     union xnn_f32_chw_params f32_chw; | 
| Marat Dukhan | 16f1e1a | 2020-08-04 16:38:22 -0700 | [diff] [blame] | 289 |     union xnn_qs8_gemm_params qs8_gemm; | 
| Marat Dukhan | 9e0b539 | 2020-08-07 02:29:34 -0700 | [diff] [blame] | 290 |     // Average Pooling normally use qs8_avgpool_params, but also initialize qs8_gavgpool_params in case it needs to switch | 
 | 291 |     // to Global Average Pooling operation. | 
 | 292 |     struct { | 
 | 293 |       union xnn_qs8_avgpool_params qs8_avgpool; | 
 | 294 |       union xnn_qs8_avgpool_params qs8_gavgpool; | 
 | 295 |     }; | 
| Marat Dukhan | ff20948 | 2020-09-03 14:26:53 -0700 | [diff] [blame] | 296 |     // Quantized Add parameters are sensitive to order of inputs, so we initialize an extra copy with the reversed order. | 
 | 297 |     struct { | 
 | 298 |       union xnn_qs8_add_params qs8_add; | 
 | 299 |       union xnn_qs8_add_params qs8_radd; | 
 | 300 |     }; | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 301 |     union xnn_qu8_add_params qu8_add; | 
 | 302 |     union xnn_qu8_gemm_params qu8_gemm; | 
 | 303 |     // Average Pooling normally use qu8_avgpool_params, but also initialize qu8_gavgpool_params in case it needs to switch | 
| Marat Dukhan | 5868d80 | 2020-03-19 17:18:45 -0700 | [diff] [blame] | 304 |     // to Global Average Pooling operation. | 
 | 305 |     struct { | 
| Marat Dukhan | 08b7a97 | 2020-07-14 18:17:29 -0700 | [diff] [blame] | 306 |       union xnn_qu8_avgpool_params qu8_avgpool; | 
 | 307 |       union xnn_qu8_avgpool_params qu8_gavgpool; | 
| Marat Dukhan | 5868d80 | 2020-03-19 17:18:45 -0700 | [diff] [blame] | 308 |     }; | 
| Marat Dukhan | c3065f5 | 2020-06-04 13:33:32 -0700 | [diff] [blame] | 309 |     union xnn_u8_minmax_params u8_minmax; | 
 | 310 |   } params; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 311 |   enum xnn_operator_type type; | 
 | 312 |   struct xnn_ukernel ukernel; | 
 | 313 |  | 
 | 314 |   struct compute_parameters compute; | 
 | 315 |   struct compute_parameters compute2; | 
 | 316 |   union { | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 317 |     struct argmax_pooling_context argmax_pooling; | 
 | 318 |     struct average_pooling_context average_pooling; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 319 |     struct channel_shuffle_context channel_shuffle; | 
| Marat Dukhan | 1f29b80 | 2020-05-15 23:46:39 -0700 | [diff] [blame] | 320 |     struct conv2d_context conv2d; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 321 |     struct dwconv2d_context dwconv2d; | 
 | 322 |     struct dwconv_context dwconv; | 
| Marat Dukhan | ca2733c | 2019-11-15 23:21:17 -0800 | [diff] [blame] | 323 |     struct elementwise_binary_context elementwise_binary; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 324 |     struct gemm_context gemm; | 
| Marat Dukhan | efc47b8 | 2019-11-18 09:25:38 -0800 | [diff] [blame] | 325 |     struct global_average_pooling_nwc_context global_average_pooling_nwc; | 
 | 326 |     struct global_average_pooling_ncw_context global_average_pooling_ncw; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 327 |     struct igemm_context igemm; | 
 | 328 |     struct lut_contiguous_context lut_contiguous; | 
 | 329 |     struct lut_strided_context lut_strided; | 
 | 330 |     struct max_pooling_context max_pooling; | 
| Marat Dukhan | 4662b19 | 2020-05-21 15:52:03 -0700 | [diff] [blame] | 331 |     struct pad_context pad; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 332 |     struct pixelwise_average_pooling_context pixelwise_average_pooling; | 
 | 333 |     struct prelu_context prelu; | 
| Marat Dukhan | 6972249 | 2019-11-11 19:55:50 -0800 | [diff] [blame] | 334 |     struct resize_bilinear_context resize_bilinear; | 
| Artsiom Ablavatski | 9791810 | 2020-10-27 15:52:59 -0700 | [diff] [blame^] | 335 |     struct resize_bilinear_chw_context resize_bilinear_chw; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 336 |     struct spmm_context spmm; | 
 | 337 |     struct subconv_context subconv; | 
| Marat Dukhan | 2995427 | 2020-02-13 17:56:11 -0800 | [diff] [blame] | 338 |     struct subgemm_context subgemm; | 
| Marat Dukhan | fd8e689 | 2020-01-27 15:25:25 -0800 | [diff] [blame] | 339 |     struct f32_three_pass_softmax_context f32_three_pass_softmax; | 
 | 340 |     struct u8_softmax_context u8_softmax; | 
| XNNPACK Team | b455b12 | 2019-09-27 18:10:33 -0700 | [diff] [blame] | 341 |     struct univector_contiguous_context univector_contiguous; | 
 | 342 |     struct univector_strided_context univector_strided; | 
 | 343 |     struct unpooling_context unpooling; | 
 | 344 |     struct vmulcaddc_context vmulcaddc; | 
 | 345 |   } context; | 
 | 346 |  | 
 | 347 |   enum xnn_run_state state; | 
| Frank Barchard | 62c5e23 | 2020-07-21 17:42:19 -0700 | [diff] [blame] | 348 | }; |